Unity - A计划(永久有效期) 扫二维码继续学习 二维码时效为半小时

(197评价)
价格: 4431.00元
关于UGUI拖拽的问题
丑之也发起了问答2017-04-21
1
回复
762
浏览

SiKi老师好,我想请问一下,Canvas里图片什么都不加拖拽就很流畅,一但场景中添加了3D物体,拖拽时就感觉延迟好大,而且物体越多,延迟越明显,这是为什么?有什么解决办法?

附上代码:

using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
/*通用的鼠标拖拽*/
public class TuoZuai : MonoBehaviour, IDragHandler, IPointerDownHandler,IPointerUpHandler
{
    public static Vector3 vec3;//用于存放鼠标位置
    public static Vector3 pos;   //存放当前组件位置
    private bool bo;
    //按下鼠标将会被触发的事件  
    public void OnPointerDown(PointerEventData data)
    {
        vec3 = Input.mousePosition;//获取当前鼠标位置  
        pos = transform.GetComponent<RectTransform>().position;//获取自己所在的位置  
    }
    public void OnPointerUp(PointerEventData data)
    {
        bo = false;
    }

    //鼠标拖拽时候会被触发的事件  
    public void OnDrag(PointerEventData data)
    {
        bo = true;
    }
    void Update()
    {
        if(bo){
            Vector3 off = Input.mousePosition - vec3;
            //此处Input.mousePosition指鼠标拖拽结束的新位置  
            //减去刚才在按下时的位置,刚好就是鼠标拖拽的偏移量  
            vec3 = Input.mousePosition;//刷新下鼠标拖拽结束的新位置,用于下次拖拽的计算  
            pos = pos + off;//原来image所在的位置自然是要被偏移的  
            transform.GetComponent<RectTransform>().position = pos;//直接将自己刷新到新坐标  
        }
    }
}

 

所有回复
  • siki 2017-04-21

    我看你的代码,对性能影响不大的,是你的电脑配置太低了吗

    如果优化这段代码的话,可以让 if(bo)里面的执行次数降低一点,比如1秒执行 20次左右就可以了,你可以使用协程,或者repeatinvoke来实现或者加一个计时器

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
发表回复
你还没有登录,请先 登录或 注册!