2016-08-19 6 views
2

最近タワー防衛ゲームのYouTubeで "Brackeys"のチュートリアルに従っています。私の敵のプレハブを現場で動かすことはできません)。プレハブはすべて産卵していますが、1つの場所にこだわっています。 任意のヘルプはタワーディフェンスゲームで敵のスクリプトが正しく動作しないc#

おかげで、ミッチ

using UnityEngine; 

public class Enemy : MonoBehaviour 
{ 
    public float speed = 10f; 
    private Transform target; 
    private int wavePointIndex = 0; 

    // Use this for initialization 
    void Start() 
    { 
     // An error pops up on the first frame for this line of code below 
     target = Waypoints.points[0]; 
    } 

    // Update is called once per frame 
    void Update() 
    { 
     // This is the main source of the error below. 
     Vector3 dir = target.position - transform.position; 
     transform.Translate (dir.normalized * speed * Time.deltaTime, Space.World); 

     if (Vector3.Distance (transform.position, target.position) <= 0.4f) 
     { 
      GetNextWayPoint(); 
     } 
    } 

    void GetNextWayPoint() 
    { 
     if (wavePointIndex >= Waypoints.points.Length - 1) 
     { 
      Destroy (gameObject); 
      return; 
     } 
     wavePointIndex++; 
     target = Waypoints.points[wavePointIndex]; 
    } 
} 

error description in unity Enemy prefab that has script on it

答えて

1

あなたがあなたのエディタでEnemyスクリプトEnemyMoverという名前のショーをアップロードされた画像を認識されるであろう。これは問題ではありませんが、混乱を避けるために、シーン内にスクリプト名を置くようにしてください。

あなたによると、このコード行は問題です:target = Waypoints.points[0];

問題はpointsTransformの配列であり、初期化されていないことです。

.Your Waypointスクリプトがウェイポイントゲームオブジェクトに添付されていない:

は、次の3つの問題があります。 ウェイポイントゲームオブジェクトを選択し、Waypointスクリプトをドラッグします。 points配列変数を初期化するためには、ウェイポイント GameObjectに接続する必要があります。

Waypoint複数のGameObjectにスクリプトが添付されています。 Waypointスクリプトが1つのゲームオブジェクトにのみアタッチされ、そのGameObjectがすべてのウェイポイントの親であることを確認してください。このゲームオブジェクトの名前はウェイポイントです。

これを確認するには、[プロジェクト]タブからWaypointスクリプトを選択し、右クリックしてを参照してください。Find Reference In SceneWaypointスクリプトが添付されているすべてのゲームオブジェクトが表示されます。 ウェイポイントという名前のGameObjectにアタッチされている場合は、そのGameObjectからスクリプトを削除します。

Waypointスクリプト内のファンクションは、Enemyスクリプトのファンクションの前に呼び出されています。これはUnityで時折起こります。

ゴー編集へ - >プロジェクトの設定 - >スクリプトの実行順序Waypointスクリプトを注文にドラッグし、Enemyスクリプトをoderにドラッグします。 「適用」をクリックします。問題#3

enter image description here

第2の解決策はstaticキーワードを削除し、GameObject.Find("Waypoints");GetComponent<Waypoint>();を使用することです。スクリプトherehereの両方の完全なスクリプトを見つけることができます。 staticキーワードを削除するというこの2番目の方法に従うと、チュートリアルの残りの部分では時間がかかることに注意してください。

+0

非常に最初の解決策が私の問題を解決しました! それはあなたと最も混乱するのは常に簡単な問題です –

+0

ニース。それはそれらの一つかもしれません。答えを受け入れることを忘れないでください。 – Programmer

+0

私はそれに投票しましたが、十分なポイントがありませんと言われました 今日はこれを使い始めたばかりです ありがとう –

関連する問題