2016-11-16 12 views
0

私は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 

感謝を!

答えて

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

関連する問題