![](/img/trans.png)
[英]Connecting MySql in Unity3d -> NullReferenceException: Object reference not set to an instance of an object
[英]NullReferenceException: Object reference not set to an instance of an object Unity2D
我正在尝试使用 c# 在统一上制作一个拾取武器系统。 我正在尝试将一个值从一个脚本更改为另一个,但我遇到了一些问题。 我正在尝试将武器编号更改为 1。
using UnityEngine;
public class Pew : MonoBehaviour
{
public int weapon = 0;
}
所以,我正在使用这行代码
using UnityEngine;
public class PickUpBow : MonoBehaviour
{
public void OnCollisionEnter2D(Collision2D collision)
{
GameObject thePlayer = GameObject.Find("ThePlayer");
Pew pew = thePlayer.GetComponent<Pew>();
pew.weapon = 1;
}
}
但是当我触摸 object 时,它给了我以下错误:“对象引用未设置为 object Unity 的实例”,在以下行: Pew pew = thePlayer.GetComponent<Pew>();
谢谢!
我假设碰撞发生在玩家身上。
问题是因为 GameObject.Find("ThePlayer") 在层次结构中搜索任何以这种方式命名的游戏object 。 也许名称中有一些空格。 使用该方法不是一个好习惯,因为它可能会导致此类问题。
所以,而不是:
GameObject thePlayer = GameObject.Find("ThePlayer");
Pew pew = thePlayer.GetComponent<Pew>();
最好像:
GameObject thePlayer = collision.gameObject;
Pew pew = thePlayer.GetComponent<Pew>();
这个新代码的问题是我们假设碰撞发生在玩家身上,但如果是敌人怎么办?
一个好的解决方案是使用Tags ,现在:
if(collision.gameObject.CompareTag("Player")
{
GameObject thePlayer = collision.gameObject;
Pew pew = thePlayer.GetComponent<Pew>();
}
这意味着播放null
thePlayer
这意味着分配不起作用: GameObject thePlayer = GameObject.Find("ThePlayer");
确保这有效: GameObject.Find("ThePlayer");
文档: https://docs.unity3d.com/ScriptReference/GameObject.Find.html
此 function 仅返回活动游戏对象。 如果找不到具有名称的 GameObject,则返回 null。
确保名称正确匹配!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.