2016-07-30 3 views
-1

В Иерархии у меня есть 2 ThirdPersonController. В окне> Animator я создал новое пустое состояние, названное его Walk, и установил его на HumanoidWalk, поэтому при запуске игры оба игрока идут.Как я могу изменить скорость движения каждого игрового объекта?

На одном из них я добавил скрипт и как Prefab второй ThirdPersonController (1).

Затем, при запуске игры, он создает клоны ThirdPersonController (1). Итак, я вижу в иерархии больше N ThirdPersoncontrollers.

Сегодня, чтобы изменить скорость ходьбы для каждого третьего контролера, я меняю инспектор на множитель скорости перемещения. Но если я хочу в скрипте уже при создании клонов, чтобы установить для каждой другой скорость, как я могу это сделать?

using UnityEngine; 
using System.Collections; 

public class Multiple_objects : MonoBehaviour { 

    public GameObject prefab; 
    public GameObject[] gos; 
    public int NumberOfObjects; 

    void Awake() 
    { 
      gos = new GameObject[NumberOfObjects]; 
     for(int i = 0; i < gos.Length; i++) 
     { 
      GameObject clone = (GameObject)Instantiate(prefab, Vector3.zero, Quaternion.identity); 
      gos [i] = clone; 

     } 
    } 

    // Use this for initialization 
    void Start() { 


    } 

    // Update is called once per frame 
    void Update() { 

    } 
} 

Что я попытался сейчас, чтобы получить Animator компонент префаб и установите скорость всех клонов:

using UnityEngine; 
using System.Collections; 

public class Multiple_objects : MonoBehaviour { 

    public GameObject prefab; 
    public GameObject[] gos; 
    public int NumberOfObjects; 
    private Animator _animaotr; 

    void Awake() 
    { 
      gos = new GameObject[NumberOfObjects]; 
     for(int i = 0; i < gos.Length; i++) 
     { 
      GameObject clone = (GameObject)Instantiate(prefab, Vector3.zero, Quaternion.identity); 
      gos [i] = clone; 
      _animaotr.speed = 10; 
     } 
    } 

    // Use this for initialization 
    void Start() { 

     _animaotr = prefab.GetComponent<Animator>(); 

    } 

    // Update is called once per frame 
    void Update() { 

    } 
} 

Но главная проблема в том, что на моем первом ThirdPersonController в иерархии оригинальный, который я создал в окне> Пустое состояние аниматора, называемое «Прогулка» и установите HumandoidWalk.

Теперь, чтобы установить скорость по какой-то причине изменения скорости аниматор никогда эффект ничего, например:

_animaotr.speed = 10; 

только при изменении скорости в ThirdPersonController> Инспектор> Third Person символов (Script)> Move Speed мультипликатор. И он меняет одну и ту же скорость на все третьи контроллеры в иерархии, включая этот клон.

Но как изменить каждую скорость клонирования на другую скорость? И почему _animator.speed ничего не меняет, и мне нужно использовать этот множитель скорости перемещения?

ответ

0

Умножитель скорости перемещения Свойство, которое отображается в редакторе, объявлено как m_MoveSpeedMultiplier в сценарии ThirdPersonCharacter. Это delacre как float m_MoveSpeedMultiplier = 1f;, что означает, что это переменная private, и не может получить из другого сценария. Причина, по которой она появляется в редакторе, состоит в том, что она имеет [SerializeField], а это означает, что это сериализованная переменная private.

Для доступа к нему во время выполнения, вы должны изменить от float m_MoveSpeedMultiplier = 1f; к public float m_MoveSpeedMultiplier = 1f; в ThirdPersonCharacter сценария.

Используйте GetComponent, чтобы получить экземпляр ThirdPersonCharacter из gos GameObject, затем сохраните его где-нибудь для повторного использования. Поскольку у вас есть 2 ThirdPersonCharacter, вы можете создать два массива ThirdPersonCharacter для хранения этих экземпляров. Он должен выглядеть следующим образом:

using UnityEngine; 
using System.Collections; 
using UnityStandardAssets.Characters.ThirdPerson; 

public class Multiple_objects : MonoBehaviour 
{ 
    public GameObject prefab; 
    public GameObject[] gos; 
    public int NumberOfObjects; 

    private ThirdPersonCharacter[] thirdPersonCharacter; 

    void Awake() 
    { 
     thirdPersonCharacter = new ThirdPersonCharacter[2]; 

     gos = new GameObject[NumberOfObjects]; 
     for (int i = 0; i < gos.Length; i++) 
     { 
      GameObject clone = (GameObject)Instantiate(prefab, Vector3.zero, Quaternion.identity); 
      gos[i] = clone; 
      thirdPersonCharacter[i] = clone.GetComponent<ThirdPersonCharacter>(); 
     } 
    } 

    // Use this for initialization 
    void Start() 
    { 

     thirdPersonCharacter[0].m_MoveSpeedMultiplier = 5f; 
     thirdPersonCharacter[1].m_MoveSpeedMultiplier = 5f; 
    } 

    // Update is called once per frame 
    void Update() 
    { 

    } 
} 
+0

Свойство m_MoveSpeedMultiplier не существует. –

+1

@ TheLostLostit Пожалуйста, прочтите инструкцию еще раз. ** ", чтобы получить доступ к нему во время выполнения, вам нужно перейти от' float m_MoveSpeedMultiplier = 1f; 'к' public float m_MoveSpeedMultiplier = 1f; 'в сценарии' ThirdPersonCharacter'. ** – Programmer