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;//直接将自己刷新到新坐标
}
}
}
我看你的代码,对性能影响不大的,是你的电脑配置太低了吗
如果优化这段代码的话,可以让 if(bo)里面的执行次数降低一点,比如1秒执行 20次左右就可以了,你可以使用协程,或者repeatinvoke来实现或者加一个计时器