私は3D環境、家、16室の部屋で働いています。それぞれの部屋では、 "RoomsToScanTag"というタグ付きの目に見えないキューブを配置しました。私はBehavior Designerと呼ばれる資産を使って作業しています。私の検査官では、検索するタグ名(この場合は "RoomsToScanTag")を与えました。このタグネームを使って、まずロボットを部屋1に移動し、次に部屋2まで、部屋16まで移動します。C# - ユニティ - 移動スクリプトが正しく動いていない
は、これは私のコード
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;
}
}
である。これは、それが動いているが、何とかFIRST ROOM1しないように移動しているが、room4に固執しているようだ
私の問題です。私はそれがなぜなのか分かりません。私はそれが最初のROOM1に行きたい、そしてROOM2、などなど
EDIT
ROOM1がロボットに最も近い、room4はかなり遠いです。私はどこに問題がある...それが原因配列のソートの知っていることを追加するのを忘れ
EDIT 2
。今、それは変換値で満たされていて、room4はその配列の最初のものです。ゲームオブジェクト名に基づいて並べ替えをにする必要がありますが、これを行う方法はわかりません。任意のヒント?
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