C# NullReferenceException:对象引用未设置为对象Unity2D的实例
我想用c#在unity上制作一个拾取武器系统。 我试图将一个值从一个脚本更改为另一个脚本,但遇到了一些问题。 我想把武器号码改成1C# 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
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();
}
如果我想更换一个玩家,我该如何分配一个游戏对象?非常感谢你,老兄,我花了两个小时试图解决这个问题,你是最棒的。效果非常好。这能回答你的问题吗?