我正在开发Unity 2D fps多人游戏。每当玩家按下Space时,他们都会实例化子弹,并且当子弹击中任何玩家时,它必须自行消灭并将玩家推向子弹方向。我的代码如下:
void OnTriggerEnter2D(Collider2D col)
{
if (isServer == false)
return;
if (col.gameObject.tag != "bullet")
return;
CmdTrigger(col.gameObject);
}
[Command]
void CmdTrigger(GameObject col)
{
RpcTrigger(col);
}
[ClientRpc]
void RpcTrigger(GameObject col)
{
Rigidbody2D rb;
rb = col.GetComponent<Rigidbody2D>();
if (rb.velocity.x > 0)
RpcExplode(Mathf.Sign(1));
else
RpcExplode(Mathf.Sign(-1));
//Network.Destroy(col);
}
问题在于,当子弹与玩家碰撞时,我无法将GameObject很好地传递给其他玩家,因此每个玩家都可以在其客户端销毁子弹。当子弹击中播放器时,它不会自行销毁,它会经过并且控制台会向我显示以下错误:“ NullRefrenceException:对象引用未设置为对象的实例”,如果单击它,它将带给我到此行:
rb = col.GetComponent<Rigidbody2D>();
这是我的角色控制完整代码:https://pastebin.com/L1DEmQv1
有什么想法吗?对我来说,尽快修复它非常重要。谢谢。