2016-04-03 11 views
0

Picture of Errorメニューシーンからゲームシーンに移動した後。変数は割り当てられていますが、値はnullです

Picture of Script

私はゲームシーンにメニューからの移行時にプレイヤーの位置をロードしようとしていますが、私は私の変数、プレイヤーがnullであるというエラーを取得しています。私は変数の値を表示しています。開始関数と更新関数には値がありますが、どちらも値がありますが、私はloadPosition関数でゲームシーンからアクセスしようとしたときに、無効である。何時間も熟考した後、私は、可変シーンのプレーヤーがnullである理由は、MenuシーンからWorld()を呼び出していてゲームシーンではないと感じているからです。別のシーンからstart関数を呼び出す方法はありますか?ゲームシーンに移行します。このエラーは私をナットにしています!私は読書の容易さのために私のコードの無関係な部分を削除しました。ところで、デモは私のゲームシーンです。前もって感謝します!おそらく失敗しているnull

player = GameObject.FindWithTag ("Player");

のため

GameObject player; 


    void Update(){ 

    if (Application.loadedLevelName == "Demo") { 
    savePosition(); 
    print(player); 
    } 
} 

void Start() { 
    if (Application.loadedLevelName == "Demo"){ 
     player = GameObject.FindWithTag ("Player"); 
     print (player); 
    } 

} 

public void loadPosition(){ 

    float playerX = PlayerPrefs.GetFloat ("PlayerX"); 
    float playerY = PlayerPrefs.GetFloat ("PlayerY"); 
    float playerZ = PlayerPrefs.GetFloat ("PlayerZ"); 
    player.transform.position = new Vector3 (playerX, playerY, playerZ); 

} 


public void savePosition(){ 


    PlayerPrefs.SetFloat ("PlayerX", player.transform.position.x); 
    PlayerPrefs.SetFloat ("PlayerY", player.transform.position.y); 
    PlayerPrefs.SetFloat ("PlayerZ", player.transform.position.z); 
    float playerX = PlayerPrefs.GetFloat ("PlayerX"); 
    float playerY = PlayerPrefs.GetFloat ("PlayerY"); 
    float playerZ = PlayerPrefs.GetFloat ("PlayerZ"); 
    print (new Vector3 (playerX, playerY, playerZ)); 
} 
+0

前に、私はプレーヤーが動作するはず見つけるための 'OnLevelWasLoaded'機能を含めて考えます。 –

+0

@GunnarB。私はOnLevelWasLoaded関数でGameObject.FindWithTag( "Player")を使ってみましたが、Unityはまだ私にエラーを与えていました。 :/ –

+0

プレイヤーをデバッグするために、プレイヤーを公開し、実行時にインスペクターで見てください。 –

答えて

0

playerです。あなたのGameObjectのタグが "Player"であることを確認してください。タグが「Player」でなければ、FindWithTagは失敗します。これが起こっている場合は、エディターでGameObjectの名前を "Player"に変更します。ヌル問題を解決する必要があることを

player = GameObject.Find("Player"); 

これを試してみてください。

EDIT:

toWorld()機能からloadPosition()を取り外し、OnLevelWasLoaded()機能でGameObject.Find("Ethan")後にそれを入れて、print(player)

+0

私のタグは "Player"です。私はplayer = GameObject.FindWithTag( "Player")と思う。失敗しています。 –

+0

GameObject.Find( "Player")を使用しても、エラーはまだあります。 –

+0

はい、名前を変更してGameObject.Find()を使用します。今月この問題を抱えるFindWithTagの2番目の質問です。おそらくFindWithTagにバグがあります。 – Programmer