私は、移動するオブジェクトをクリックすることで文字を作ろうとしています(基本的なRTSの動き)、コルーチンを使用するとvoid Updateを使うよりも計算能力が向上すると聞いています。しかし、私はコルーチンには新しく、いくつかの助けが必要です。Navmesh&co-routineを使った基本的なRTSムーブメント?
- また、このスクリプトの簡単なクリックとコール機能のため、クリックするコードを含める必要はありません。ここで
は私の質問です
私のキャラクターは
MoveToPoint()
は、まず、2回オブジェクトをクリックするプレイヤーが必要になりますFollowTarget()
を使用して、むしろ何度も、次の起動に使用している場合は、私は考え出したように見えることはできません理由.. ..同じオブジェクトで複数の時間をクリックすると、複数の
UpdatePosition()
が実行されます。そのオブジェクトで1回実行させるにはどうすればよいですか? (私の友人は、明らかにキャラクターを歩かせようとするとオブジェクトを強くクリックしてしまいますが、今は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; }
あなたが2回クリックする必要がある理由は、コルーチンでは最初に半分待ってから目的地を更新するだけなのかもしれません。 'yield return new WaitForSeconds(0.5)'をwhileループの最後に移動することを検討してください。 –