2016-12-22 4 views
0

私のゲームでは、異なるウェイポイントをパトロールする必要がある複数のオブジェクトがあります。子ども用ウェイポイントを使用したパトロール

public Transform[] targets; 
public float speed = 1; 

private int currentTarget = 0; 

IEnumerator StartMoving() 
    { 
     while (true) 
     { 
      float elapsedTime = 0; 
      Vector3 startPos = transform.position; 

      while (Vector3.Distance(transform.position, targets[currentTarget].position) > 0.05f) 
      { 
       transform.position = Vector3.Lerp(startPos, targets[currentTarget].position, elapsedTime/speed); 
       elapsedTime += Time.deltaTime; 

       yield return null; 
      } 
      yield return new WaitForSeconds(delay); 
     } 
    } 

コードが正常に動作しますが、その理由を整理するために私は、そのオブジェクトの子としてそのウェイポイントを持っているために、各オブジェクトをしたいと思いますが、問題はウェイポイントがそのオブジェクトの子であるため、彼らはそれと一緒に移動され、望ましくない動作を引き起こします。

これに対応する方法はありますか?

答えて

0

階層のレベルを追加する必要があります。キャラクターとウェイポイントのコンテナとして1つの親アイテム。コードは文字だけを移動します。あなたが本当に親にしたい場合は

- Container with Scripts 
    - Character with mesh 
    - Waypoints 
     - WaypointA 
     - WaypointB 
     - ... 
+0

これは最も簡単な解決策です。 – Abdou023

0

まあ、彼らは..あなたはパトロールオブジェクトの反対方向にウェイポイントを移動することができます。

//Remember prev pos 
Vector3 prevPosition = transform.position; 

transform.position = Vector3.Lerp(startPos, targets[currentTarget].position, elapsedTime/speed); 

//Move the waypoints in the opposite direction 
foreach(Transform childWaypoint in ...) 
{ 
    childWaypoint.position -= transform.position - prevPosition; 
}  

しかし、よりよい解決策を割り当てだろうパトロールオブジェクト用のVector3の配列..

public class Patrollers : Monobehaviour 
{ 
    Vector3[] _waypoints; 
    //.. 
} 
関連する問題