【发布时间】:2020-04-05 14:47:11
【问题描述】:
所以我正在构建一个游戏,如果我让玩家跳跃,并且如果玩家降落在板条箱或敌人上,玩家会通过碰撞上的函数跳跃(使用碰撞检测器另一个游戏对象来检测碰撞)。碰撞已注册,虽然该函数未执行,但经过一些调试后,我注意到我正在调用的对象(脚本)在我播放时不存在,它们为 null,并且它给出了 nullReferenceException。
碰撞检测器类:
public class CollisionDetector : MonoBehaviour {
public bool collide=false;
public rogueMovement ro;
public Crate cr;
void OnCollisionEnter2D(Collision2D collision)
{
if (collision.collider.tag=="enemy")
{
Debug.Log("Jumpoff enemy");
collision.collider.GetComponent<rogueMovement>().jumpOffEnemy();
collide = true;
}
else if (collision.collider.tag=="crate")
{
ro.isJumping=false;
Debug.Log("Crate collision");
cr.Die();
}
}
}
我希望它执行的功能:
public void jumpOffEnemy()
{
//ani.SetTrigger("jump");
rb.AddForce(new Vector2(0f, Verticaljump), ForceMode2D.Impulse);
//transform.Translate(0f,5f*Time.deltaTime,0f);
Debug.Log("jump");
}
这是在玩之前和之后,我放置了 Crate 脚本和 rogue 类的碰撞检测器游戏对象发生的情况的图像
【问题讨论】:
-
好吧,看来
GetComponent<rogueMovement>()正在返回null。所以你需要解决这个问题。 -
是的,我做到了。如果您检查我发布的图像,玩游戏后返回 null 的对象,尽管在玩游戏之前它还可以,没有错误。