2016-09-17 15 views
0

TileControllerスクリプトでドロップイベントが発生すると、PlayerControllerスクリプトのメソッドを使用してプレハブをインスタンス化しようとしています。Unity C# - メソッドを呼び出すプレハブをインスタンス化する

私はTileControllerで使用する場合:

public void OnDrop (PointerEventData eventData){ 
    GameObject instance = Instantiate(Resources.Load("Player", typeof(GameObject))) as GameObject; 
} 

正しくシーンにプレハブの負荷。

しかし、私は使用している場合:

public void OnDrop (PointerEventData eventData){ 
    player.instantiatePlayer(); 
} 

エラーが返されます次に:

NullReferenceException: Object reference not set to an instance of an object 

私が使用しているPlayerController方法は次のとおりです。

public void instantiatePlayer() {  
    GameObject instance = Instantiate(Resources.Load("Player", typeof(GameObject))) as GameObject; 
} 

私はそれが本当に何かだと思いますシンプルな私は行方不明ですが、私はそれが何であるかを判断することができません。

答えて

0

コントローラクラスには「player」という名前のメンバーがありますが、何も設定されていません。これはヌルなので、NullReferenceExceptionが発生しています。あなたがそれをしたファーのやり方は正しいです。

+0

TileControllerクラスで私は持っています:\t 'private PlayerController player; void Start(){ \t player = GetComponent (); } ' – Aeross

+0

このスクリプトが実行されているGameObjectにPlayerControllerがアタッチされていることを確認してください。そうでない場合は、追加します。そうであれば、null参照はPlayerController.instantiatePlayerメソッドのどこかにあります。そのため、Visual Studio Tools for Unity拡張機能を使用してVisual StudioをUnityに接続し、そのコード行にブレークラインを挿入して、ヌルリファレンスの参照先を確認しますです。コンソールウィンドウには、例外の呼び出しスタックが表示されます(正しくリコールした場合) –

0

あなたはPeterの投稿にコメントします。 Start機能の最初のチェックは、あなたの参照「プレーヤー」がヌルと等しいかどうかです。 GetComponentはコンポーネントを取得しようとしていますが、見つからない場合はnullを返します。

そのnullでない場合、多分いくつかのコードでは、プレーヤーの参照の下でオブジェクトを破壊するかもしれません。

関連する問題