Я работаю в 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
Спасибо заранее!
Благодарим за быстрый ответ, но он не работает. Он дает красный цвет. Он работает, когда я включаю тег 'Using Systems;', но тогда мое 'transform' не работает. – JuliusSecret
что вы имеете в виду, но * мое преобразование не работает *? –
, когда я использую функцию 'Using Systems;', transform.position получает красный цвет, что означает, что он больше не работает. – JuliusSecret