欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > 【Unity】 鼠标拖动物体移动速度跟不上鼠标,会掉落

【Unity】 鼠标拖动物体移动速度跟不上鼠标,会掉落

2025/4/3 6:05:46 来源:https://blog.csdn.net/m0_73117967/article/details/146559849  浏览:    关键词:【Unity】 鼠标拖动物体移动速度跟不上鼠标,会掉落

错误示范:

一开始把移动的代码写到update里去了,发现物体老是掉(总之移动非常不流畅,体验感很差)

void Update(){Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);if (Physics.Raycast(ray, out RaycastHit hit, Mathf.Infinity, LayerMask.GetMask("Interactables"))){if (Input.GetMouseButton(0)){hit.transform.position=ScreenToWorldPos(Input.mousePosition);}}}public Vector3 ScreenToWorldPos(Vector3 screenPosition){Vector3 targetScreenPos = Camera.main.WorldToScreenPoint(depthReference.position);float depth = targetScreenPos.z;screenPosition.z = depth;Vector3 worldPosition = Camera.main.ScreenToWorldPoint(screenPosition);return worldPosition;}

修改:

把移动的代码改到协程里更新就能流畅移动了

void Update(){Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);if (Physics.Raycast(ray, out RaycastHit hit, Mathf.Infinity, LayerMask.GetMask("Interactables"))){if (Input.GetMouseButtonDown(0)){StartCoroutine(Move(hit.collider.transform));}}}IEnumerator Move(Transform hitobj){while (true){if (Input.GetMouseButton(0) ){Vector3 targetPosition = ScreenToWorldPos(Input.mousePosition);hitobj.position = targetPosition;}yield return null;}}public Vector3 ScreenToWorldPos(Vector3 screenPosition){Vector3 targetScreenPos = Camera.main.WorldToScreenPoint(depthReference.position);float depth = targetScreenPos.z;screenPosition.z = depth;Vector3 worldPosition = Camera.main.ScreenToWorldPoint(screenPosition);return worldPosition;}


问了一下gpt大概是这个原理,说白了就是鼠标输入不是逐帧更新的,它一直在更新,update执行速度跟不上,协程的执行速度跟得上(但是我还是没明白为啥协程比update快,就算update重新启动,可是执行的代码都是一样的,要么就是因为update每次都要重新进行射线检测拖慢了速度吧)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词