2016-11-16 11 views
0

Я работаю в 3D-среде, доме, с 16 комнатами. В каждой комнате я разместил невидимый куб с тегом под названием «RoomsToScanTag». Я работаю с активом под названием «Дизайнер поведения», и в моем инспекторе я дал тэг для поиска (в данном случае «RoomsToScanTag»). С помощью этого тэга я хочу, чтобы робот сначала отправился в комнату1, затем продолжил номер2, до комнаты16.C# - Unity - скрипт перемещения не работает правильно

Это мой код

using UnityEngine; 
using BehaviorDesigner.Runtime; 
using BehaviorDesigner.Runtime.Tasks; 

public class MoveTowardsNew : Action 
{ 
    private Transform[] roomsToScanHAHA; 
    public string targetTagRooms; 
    public Transform targetyo; 
    int controlNumber = 0; 

    public string MessageToConsole; 

    public override void OnAwake() 
    { 
     var targets = GameObject.FindGameObjectsWithTag (targetTagRooms); 
     roomsToScanHAHA = new Transform[targets.Length]; 
     for (int i = 0; i < targets.Length; i++) 
     { 
      roomsToScanHAHA [i] = targets [i].transform; 
     } 
    } 

    public override TaskStatus OnUpdate() 
    { 
     while (controlNumber < roomsToScanHAHA.Length) 
     { 
      targetyo = roomsToScanHAHA [controlNumber]; 
      if (Vector3.SqrMagnitude (transform.position - targetyo.position) < 0.5f) 
      { 
       Debug.Log (MessageToConsole); 
       return TaskStatus.Success; 
      } 
      controlNumber++; 
     } 
     NavMeshAgent agent = GetComponent<NavMeshAgent>(); 
     agent.destination = targetyo.position; 
     return TaskStatus.Running; 
    } 
} 

Это моя проблема

Он движется, но как-то движется не Room1 FIRST, но это, кажется, зациклены на Комната4. Я понятия не имею, почему это так. Я хочу, чтобы перейти к первому комнате 1, то room2, и т.д. и т.п.

EDIT

Room1 расположен ближе всего к роботу, Комната4 довольно далеко.

EDIT 2

Я забыл добавить, что я знаю, где эта проблема лежит ... Именно из-за сортировки массива. Сейчас он заполняется значениями преобразования, а room4 оказывается первым в этом массиве. Мне нужен массив до sort на основе GameObject name, но я не знаю, как это сделать. Какие-нибудь советы?

EDIT 3

using UnityEngine; 
using BehaviorDesigner.Runtime; 
using BehaviorDesigner.Runtime.Tasks; 

public class MoveTowardsNew : Action 
{ 
    private Transform[] roomsToScanHAHA; 
    public string targetTagRooms; 
    public Transform targetyo; 
    int controlNumber = 0; 

    public string MessageToConsole; 

    public override void OnAwake() 
    { 
     var targets = GameObject.FindGameObjectsWithTag (targetTagRooms); 
     roomsToScanHAHA = new Transform[targets.Length]; 
     for (int i = 0; i < targets.Length; i++) 
     { 
      roomsToScanHAHA [i] = targets [i].transform; 
     } 
     Array.Sort(roomsToScanHAHA , 
      delegate(Transform x, Transform y) 
      { 
       return x.gameObject.name.CompareTo(y.gameObject.name); 
      }); 
    } 

    public override TaskStatus OnUpdate() 
    { 
     while (controlNumber < roomsToScanHAHA.Length) 
     { 
      targetyo = roomsToScanHAHA [controlNumber]; 
      if (Vector3.SqrMagnitude (transform.position - targetyo.position) < 0.5f) 
      { 
       Debug.Log (MessageToConsole); 
       return TaskStatus.Success; 
      } 
      controlNumber++; 
     } 
     NavMeshAgent agent = GetComponent<NavMeshAgent>(); 
     agent.destination = targetyo.position; 
     return TaskStatus.Running; 
    } 
} 

Здесь Array.sort красный и возвращает следующее сообщение об ошибке:

Assets/MoveTowardsNew.cs(22,17): error CS0103: The name `Array' does not exist in the current context 

Спасибо заранее!

ответ

1

Добавьте этот код в OnAwake() в конце:

Array.Sort(roomsToScanHAHA , 
    delegate(Transform x, Transform y) 
    { 
     return x.gameObject.name.CompareTo(y.gameObject.name); 
    }); 

Позвольте мне знать, если это работает. (это один из many ways для сортировки массива)

+0

Благодарим за быстрый ответ, но он не работает. Он дает красный цвет. Он работает, когда я включаю тег 'Using Systems;', но тогда мое 'transform' не работает. – JuliusSecret

+0

что вы имеете в виду, но * мое преобразование не работает *? –

+0

, когда я использую функцию 'Using Systems;', transform.position получает красный цвет, что означает, что он больше не работает. – JuliusSecret

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

  • Нет связанных вопросов^_^