2017-02-20 22 views
0

В иерархии У меня есть два ThirdPersonController сценарий прилагается к каждому из нихПочему при изменении скорости ходьбы персонажей во время игры работает только для одного из них?

Тогда я пошел в сценарий ThirdPersonController и изменил переменную скорость, чтобы быть открытыми:

[SerializeField] public float m_MoveSpeedMultiplier = 1f; 

Тогда в моем сценарии сверху я сделал:

public float walkSpeed = 10f; 
private ThirdPersonCharacter[] thirdPersonCharacter; 

Тогда в Awake

void Awake() 
{ 
     thirdPersonCharacter = new ThirdPersonCharacter[2]; 
     for(int i = 0; i < thirdPersonCharacter.Length; i++) 
     { 
      thirdPersonCharacter[i] = GetComponent<ThirdPersonCharacter>(); 
     } 
} 

Затем в обновлении

void Update() 
    { 
     thirdPersonCharacter[0].m_MoveSpeedMultiplier = walkSpeed; 
     thirdPersonCharacter[1].m_MoveSpeedMultiplier = walkSpeed; 
    } 

Но когда игра запущена, и я меняюсь в одном из ThirdPersonController в инспекторе в сценарии значение walkSpeed ​​от 10 до 1 или от 10 до 20 это осуществление только один из символов. Почему это не влияет на обоих из них?

Поскольку он не работает я пробовал:

public ThirdPersonCharacter[] thirdPersonCharacter; 

Затем в функции Start удалили код раньше. И просто перетащил ThirdPersonController и ThirdPersoncontroller (1) инспектору в скрипт после изменения размера третьегоPersonCharacter на 2. Скрипт теперь привязан только к ThirdPersonController.

И все же при изменении значения скорости во время работы он производит только один из них только ThirdPersonController.

Моя общая цель - иметь возможность контролировать как ThirdPersonController, так и ThirdPersonController (1) с той же скоростью в режиме реального времени во время игры, а затем также иметь возможность управлять каждой скоростью в отдельности. Поэтому я буду иметь 3 значения скорости. Один для обоих и двух для каждого. Но я пока не могу изменить их скорость.

ответ

1

Проблема похожа на проблему с this поста.

Строка кода ниже:

thirdPersonCharacter[i] = GetComponent<ThirdPersonCharacter>(); 

будет возвращать ссылку на ThirdPersonCharacter прикрепленного к this сценарию геймобжекты прикрепляется к. Он вернет тот же самый номер в цикле for.

Чтобы получить разные ThirdPersonCharacter, вам необходимо найти каждого пользователя GameObject, который ThirdPersonCharacter прилагается, а затем выполнить GetComponent.

GameObject tpc1 = GameObject.Find("TPC1"); 
thirdPersonCharacter[0] = tpc1.GetComponent<ThirdPersonCharacter>(); 

GameObject tpc2 = GameObject.Find("TPC2"); 
thirdPersonCharacter[1] = tpc2.GetComponent<ThirdPersonCharacter>(); 

Заменить TPC1 и TPC2 с именем геймобжекты ThirdPersonCharacter прилагается к.

Вы можете найти другие способы сделать это here.

0
thirdPersonCharacter[i] = GetComponent<ThirdPersonCharacter>(); 

Приведенный выше код возвращает тот же (первый) компонент каждый раз. Попробуйте это вместо этого;

void Awake() 
{ 
    thirdPersonCharacter = GetComponents<ThirdPersonCharacter>(); 
} 
+0

Это еще один способ сделать это. Обратите внимание, что если вы делаете это так, вам нужно выполнить дополнительную работу, например, проверить имя игрового объекта, если вы беспокоитесь о порядке возврата «ThirdPersonCharacter». В противном случае он может вернуть 'ThirdPersonCharacter1' в качестве первого индекса на этот раз и в любое время в вашей игре, он может сначала возвратить' ThirdPersonCharacter2'. – Programmer