Как заставить клона игнорировать входные данные движения, когда его родитель движется - PullRequest
0 голосов
/ 26 ноября 2018

Я использую move_states для отслеживания движения персонажа, но он может отслеживать только себя, когда персонаж разделен на два персонажа, как заставить клона игнорировать ввод игрока, когда его родитель перемещается.

часть сценария motion_input:

private void Movement_input() 
{
     if (move_states == 0) 
     {
         if (Input.GetKey(KeyCode.UpArrow)) 
         {
             move_states = 1;
             target_position = transform.position + new Vector3(0, 0.8f, 0);
         }
         else if (Input.GetKey(KeyCode.DownArrow)) 
         {
             move_states = 1;
             target_position = transform.position + new Vector3(0, -0.8f, 0);
         }
         else if (Input.GetKey(KeyCode.LeftArrow))
         {
             move_states = 1;
             target_position = transform.position + new Vector3(-1, 0, 0);
         }
         else if (Input.GetKey(KeyCode.RightArrow)) 
         {
             move_states = 1;
             target_position = transform.position + new Vector3(1, 0, 0);
         }
     }
 }

Спасибо за помощь!

Ответы [ 3 ]

0 голосов
/ 26 ноября 2018

Я бы сделал клонированные объекты отдельным сборным вместе с другим скриптом.Из основного скрипта вы можете получить ссылки на клоны и вызывать для них метод каждый раз, когда они должны двигаться.Примерно так:

private Gameobject[] copies;
private int dir; 

public void MoveClones()
{
    for (int i = 0; i < copies.Length; i++)
    {
        copies[i].SendMessage("MoveDir", dir);
    }
}

И тогда ваша функция MoveDir находится в сценарии объекта-клона с единственным параметром для направления.Вы можете проверить состояние перемещения там.

0 голосов
/ 27 ноября 2018

У вас есть выбор.

Например: я бы выделил детей отдельно и с тегом (например, «клон») в каждом из них (даже в первом).Затем каждый раз, когда вы пытаетесь переместить одну из них (вам нужно найти способ решить, какой из них получает приоритет), она должна проверять в цикле поиска объектов с тегом «клон», если у кого-то есть move_states, равное 0.

Некоторый код может быть:

bool canMove = true;
for each (GameObject clone in GameObject.FindGameObjectsWithTag()){
    if (clone.GetComponent<script>().move_states == 1)
        canMove = false;
}
if(canMove == true)
    Movement_input(); 

Дайте мне знать, если он у вас работает;)

0 голосов
/ 26 ноября 2018

Если я не понял неправильно, у вас есть объект, который можно клонировать, и его сценарий также клонирован.Простым решением было бы отключение дочернего скрипта no ?.

Когда вы говорите «родитель», вы имеете в виду иерархию «родитель» или просто клонированный объект?В случае иерархии родительского элемента вы можете просто отсоединить дочерний элемент от его родительского элемента.

...