关于“NullReferenceException: Object reference not set to an instance of an object”的思考

1、执行Vector2 screen_xy = Camera.main.WorldToScreenPoint(transform.position)时,报 “NullReferenceException: Object reference not set to an instance of an object”异常报错。提示对象引用未设置为对象的实例

 

1) 刚开始认为是transfrom对应的object对象未实例化原因,因此尝试直接输入:Vector3 a = new Vector3(0.0f, 0.0f, 0.01f),这样操作可以直接排除是受transform object的影响。但是,并未解决异常,报相同错误。

2)也怀疑是Vector2 screen_xy未进行实例化原因,尝试:Vector2 screen_xy = new Vector2(0.0f, 0.01f)。但是,仍然未解决问题,报相同错误。

3)最后,锁定为Camera.main.WorldToScreenPoint()这个方法,存在未实例化对象问题。只能是Camera.main,通过该网址:https://csharp.hotexamples.com/examples/-/Camera/ScreenToWorldPoint/php-camera-screentoworldpoint-method-examples.html

如下图提示:

    发现两点:第一,Camera是一个类,通过类名调用函数,但是程序中未申请有Camera类。第二,Camera.main默认的是初始化摄像头就是“Main Camera”,但是本Scene是初始化的“Camera”。

 

  1. 解决的方法是:

实例化一个Camera类对象mainCamera,并将其绑定到“Main Camera”上,在用mainCamera取代“Camera.main”,即可实现提取空间坐标系下对应的屏幕坐标。