這個問題在這里已經有了答案: 什么是 NullReferenceException,我該如何解決? (27 個回答) 11 小時前關閉。
我有一個PlayerMovement班級和一個EnemyMovement班級。我的敵人只有在玩家移動時才會移動。
創建敵人后,應將其添加到PlayerMovement物件中的敵人串列中。
這就是我所擁有的:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemyMovement : MonoBehaviour
{
public PlayerMovement player;
void Awake()
{
player.Subscribe(this);
}
public void Move()
{
print("Enemy moved!");
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
public static ArrayList enemies;
void Start()
{
enemies = new ArrayList();
}
void Message(Direction direction)
{
foreach(EnemyMovement enemy in enemies)
{
enemy.Move();
}
}
public void Subscribe(EnemyMovement enemy)
{
enemies.Add(enemy);
}
}
但是,Unity 給了我錯誤
NullReferenceException:物件參考未設定為物件的實體。
如何正確地將一個物件的自參考傳遞給另一個物件?
uj5u.com熱心網友回復:
在我依靠自己或其他用戶通過 Inspector 輸入參考的情況下,我通常喜歡在代碼中添加檢查。例如:
public class EnemyMovement : MonoBehaviour
{
public PlayerMovement player;
void Awake()
{
if (player == null)
{
Debug.LogError ( “PlayerMovement is null.” );
return;
}
player.Subscribe(this);
}
// ..
}
然后,如果我從一開始就知道我想要一個初始化的專案,我通常會在定義中這樣做,如下所示:
public class PlayerMovement : MonoBehaviour
{
public static ArrayList enemies = new();
// ..
}
這樣,您獲得 NullRegerence 例外的機會就會小得多。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/512414.html
標籤:C#unity3d
