C# NullReferenceException:对象引用未设置为对象Unity2D的实例

C# NullReferenceException:对象引用未设置为对象Unity2D的实例,c#,unity3d,C#,Unity3d,我想用c#在unity上制作一个拾取武器系统。 我试图将一个值从一个脚本更改为另一个脚本,但遇到了一些问题。 我想把武器号码改成1 using UnityEngine; public class Pew : MonoBehaviour { public int weapon = 0; } 所以,我使用这行代码 using UnityEngine; public class PickUpBow : MonoBehaviour { public void OnCollisionEnt

我想用c#在unity上制作一个拾取武器系统。 我试图将一个值从一个脚本更改为另一个脚本,但遇到了一些问题。 我想把武器号码改成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;
    }
}
使用UnityEngine;
公共类PickUpBow:单一行为
{
公共空间OnCollisionInter2D(碰撞2D碰撞)
{
GameObject thePlayer=GameObject.Find(“thePlayer”);
Pew-Pew=thePlayer.GetComponent();
皮尤武器=1;
}
}
但是当我触摸对象时,它会给出以下错误:“对象引用未设置为对象统一的实例”,在下面的一行:
Pew-Pew=thePlayer.GetComponent()


谢谢大家!

这意味着
图层
null

这意味着任务不起作用:
GameObject thePlayer=GameObject.Find(“thePlayer”)

确保这项工作:
GameObject.Find(“ThePlayer”)

文件:

此函数仅返回活动的游戏对象。如果找不到名为的游戏对象,则返回null


确保名称正确匹配

我假设碰撞是与玩家发生的

问题在于GameObject.Find(“ThePlayer”)通过这种方式在层次结构中搜索任何名为的游戏对象。也许名字里有些空白。使用这种方法不是一种好的做法,因为它可能会导致此类问题

因此,不是:

GameObject thePlayer = GameObject.Find("ThePlayer");
Pew pew = thePlayer.GetComponent<Pew>();
GameObject thePlayer=GameObject.Find(“thePlayer”);
Pew-Pew=thePlayer.GetComponent();
最好像:

GameObject thePlayer = collision.gameObject;
Pew pew = thePlayer.GetComponent<Pew>();
GameObject thePlayer=collision.GameObject;
Pew-Pew=thePlayer.GetComponent();
这个新代码的问题是,我们假设碰撞发生在玩家身上,但如果是敌人呢

一个好的解决方案是使用,现在:

if(collision.gameObject.CompareTag("Player") 
{
    GameObject thePlayer = collision.gameObject;
    Pew pew = thePlayer.GetComponent<Pew>();
}
if(collision.gameObject.CompareTag(“玩家”)
{
GameObject thePlayer=collision.GameObject;
Pew-Pew=thePlayer.GetComponent();
}

如果我想更换一个玩家,我该如何分配一个游戏对象?非常感谢你,老兄,我花了两个小时试图解决这个问题,你是最棒的。效果非常好。这能回答你的问题吗?