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

Вам необходимо добавить уровень иерархии. Один родительский элемент как контейнер для символа и путевых точек. Тогда код перемещает только символ.

- 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 для ваших объектов патрулирования.

Смежные вопросы