我正在尝试通过单击使角色跟随移动对象(基本 RTS 移动),并且我听说使用协同程序比使用 void Update 节省更多的计算能力。但是,我对协同程序很陌生,我需要一些帮助。
- 另外,我觉得没有必要包含点击代码,因为这是一个简单的点击然后调用这个脚本的功能。
这是我的问题
如果我的角色
MoveToPoint()
首先使用,那么使用FollowTarget()
将需要玩家点击对象两次而不是一次开始跟随,我似乎无法弄清楚为什么..当玩家在同一个对象上多次单击时,多个
UpdatePosition()
将运行,我如何让它在该对象上运行一次?(我的朋友大力点击一个物体试图让角色走得更快,而显然它没有。现在有大约 10 个协程运行..)有不止一个角色,当另一个停止跟随时,似乎另一个角色的协同程序也停止了。如何让他们在不影响彼此的情况下单独关注和取消关注?
void Start () { agent = GetComponent<NavMeshAgent>(); } IEnumerator UpdatePosition() { while(true) { yield return new WaitForSeconds(0.5f); if (target != null) { agent.SetDestination(target.position); Debug.Log("Still looping"); } else { Debug.Log("Not looping!"); } } Debug.Log("Finished Co-routine!"); } public void MoveToPoint (Vector3 point) { agent.SetDestination(point); } public void FollowTarget(Interactable newTarget) { agent.stoppingDistance = newTarget.radius * .8f; StartCoroutine(UpdatePosition()); target = newTarget.transform; } public void StopFollowingTarget () { StopCoroutine(UpdatePosition()); agent.stoppingDistance = 0f; target = null; }