2016-07-27 28 views
-1
using UnityEngine; 
using System.Collections; 
using System.Collections.Generic; 

public class Waypoints : MonoBehaviour { 

    public Transform[] waypoint; 
    public float patrolSpeed; 
    public bool loop = true; 
    public int dampingLook = 4; 
    public float pauseDuration; 
    private float curTime; 
    private int currentWaypoint = 0; 
    public CharacterController character; 

    // Use this for initialization 
    void Start() { 


    } 

    void LateUpdate(){ 

     if(currentWaypoint < waypoint.Length){ 
      patrol(); 
     }else{  
      if(loop){ 
       currentWaypoint= 0; 
      } 
     } 
    } 

    void patrol(){ 

     Vector3 nextWayPoint = waypoint[currentWaypoint].position; 

     // Keep waypoint at character's height 
     nextWayPoint.y = transform.position.y; 

     // Get the direction we need to move to 
     // reach the next waypoint 
     Vector3 moveDirection = nextWayPoint - transform.position; 

Является ли трансформирующее значение символом? Итак, transform.position получит позицию символа в этом случае ThirdPersonController, я добавил скрипт к нему? Как известно, что скрипт принадлежит преобразованию персонажа?Что такое трансформация и что такое Transform?

И если я делаю Transform _transform, тогда в чем разница между _transform и преобразованием, которое я использую сейчас?

Если я хочу установить или получить начальную позицию символа, например, я мог бы сделать в скрипте: public Transform _transform; затем в функции запуска: _transform = GetComponent(); то, например, я мог бы получить позицию из _transform?

+0

Не помечать ваш вопрос не имеет значения теги. – spender

+1

действительно, SO не является «учебным» ориентированным сайтом. – Fattie

+0

никогда, никогда, никогда не использовали имена переменных, включая знак подчеркивания, по любой причине. – Fattie

ответ

0

Ну, Transform является тип где, как преобразование является свойством типа Transform. Если вы получаете преобразование, вы всегда получите Transform of GameObject, которому назначен ваш сценарий.

В вашем примере преобразование относится к трансформации путевой точки. Если вы хотите получить Трансформацию символа, вам нужно будет получить его с помощью character.transform.

Вы, наверное, видели люди doning:

private Transform _transform; 

Мы делаем это, чтобы кэшировать преобразование текущего GameObject в наш собственный член, потому что вызов преобразования может быть небольшой производительностью удар, если вы делаете это очень часто. Тем не менее, мы по-прежнему необходимо вызвать преобразование по крайней мере один раз, чтобы на самом деле получить ссылку:

private void Awake(){ 
    _transform = transform; 
} 

EDIT: Чтобы установить позицию символов вы можете использовать:

character.transform.position = someVector3; 
+2

Hi Noël - хорошие новости, они значительно улучшили «GameObject» и «Компонент» в U5, поэтому в наши дни нет необходимости кэшировать .transform. – Fattie

+0

Итак, я могу сохранить начальную позицию моего персонажа, выполнив в функции Start: someVector3 = character.transform.position; правильно ? И тогда мне интересно, как добавить этот someVector3 в массив путевых точек с индексом 0, но не заменять индекс 0, а нажать уже два индекса в массиве. Итак, someVector3 будет в индексе 0, а два других индекса будут перенесены в индексы 1 и 2.? –

+0

@TheLostLostit Действительно, так вы извлекаете позицию. Еще одна проблема - динамические ожидания. Всякий раз, когда вы имеете дело с динамическим количеством элементов, которые хотите сохранить, вы должны использовать списки вместо массивов.частный Список _позиций; Затем вы можете добавить такие позиции: _positions.Add (someVector3); Обратите внимание, что это добавляет someVector3 в конец списка. Используйте InsertAt, чтобы добавить вектор где-нибудь еще. –