使用网络标识Unity UNET引用对象的子对象?

时间:2018-04-23 20:35:53

标签: c# unity3d unet

所以我有一个我试图通过UNET操纵的对象。我正在做的是基本上将一个对象产生到服务器上,然后我执行光线投射,如果光线投射回来并且我击中了该衍生对象的孩子,那么我想要更改它的材质。有点像突出效果。我可以让子对象恢复正常,它一直在工作,直到我使用Rpc调用它。我收到的警告说的是:

  

网络编写器myChildObject没有网络标识

然后它继续给我一个Null引用错误。 在考虑之后,我相信它给了我这个错误,因为没有网络ID,该对象无法发送到其他客户端,但是它的父级已经有了一个,如果它的父级已有,我不能给它一个一个... 这种疯狂是否有解决方法,或者我是否认为这一切都错了?

我的PlayerController上的代码块如下:

[Command]
void CmdHighlight()
{
    //get what the user hit and then if we hit something send it over the server to be highlighted
    GameObject hitObject = ControllerUNET.CheckForHitObject();
    if(hitObject != null)
        RpcHighlight(hitObject);
}

[ClientRpc]
void RpcHighlight(GameObject hitObject)
{
  //highlight the object over the server
  //Throws null reference on game object on line below
  ControllerUNET.HighlightHitObject(hitObject);

}

1 个答案:

答案 0 :(得分:0)

嗯,经过更多的研究和测试后,我发现我的初步结论是正确的。您不能通过服务器发送游戏对象,Unity也不支持已有游戏对象的子对象上的网络ID。相反,我在父节点上创建了一个子列表,然后当我得到命中对象时,我在列表中找到它的索引,然后通过服务器发送它,客户端使用它来获取对被击中对象的引用。 / p>