赞
踩
对于新手来说,Unity
90%
的运行时错误都是NullReferenceException
,这里就不放chatGpt
的废话了,其就是字面意思,因为各种各样的原因造成了没有引用任何东西的情况。
null
的原因断点、Debug.Log(),Console.WriteLine()
)public class TestNullRef : MonoBehaviour
{
private object myObject;
void Start()
{
Debug.Log(myObject);//null
myObject.ToString();
}
}
根据上面的报错提示,先找到错误的位置,接着理清问题后,就该如何规避了:
void Start(){
myObject=new TestObject();
Debug.Log(myObject);
myObject.ToString();
}
private class TestObject{}
一开始我先不设变量的值。
//代码无误的
public class MoveToTarget : MonoBehaviour
{
[SerializeField] private Transform targetTransform;
void Update()
{
Vector3 moveDir = (targetTransform.position - transform.position).normalized;
float moveSpeed = 1f;
transform.position += moveDir * moveSpeed * Time.deltaTime;
//朝相反的方向移动,远离
//targetTransform.position += moveDir * moveSpeed * Time.deltaTime;
}
}
报错:未获取变量。
如果去掉[SerializeField]
改为
private Transform targetTransform;
那么,我们想解决问题,先找到错误的位置了,使用Debug.Log()
查找
void Update()
{
Debug.Log(targetTransform);
Debug.Log(transform);
Vector3 moveDir = (targetTransform.position - transform.position).normalized;
float moveSpeed = 1f;
transform.position += moveDir * moveSpeed * Time.deltaTime;
}
无论是上述哪个错误,就是没写targetTransform
变量的值,补上相应的GameObject
就好了。
其实存在很多原因造成空引用异常,比如找不到你设置的变量(当然也可能你没设),或者是局部变量与全局变量有冲突等等。
所以我们更应该要培养自己debug的能力,也不要太过依赖chatGpt
,因为它有时挺不靠谱的。
https://assetstore.unity.com/packages/tools/game-toolkits/missing-reference-finder-257205
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。