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

Posted

技术标签:

【中文标题】引用具有网络标识 Unity UNET 的对象的子对象?【英文标题】:Referencing child objects of an object with a network identity Unity UNET? 【发布时间】:2018-04-23 20:35:53 【问题描述】:

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

网络写入者 myChildObject 没有网络身份

然后它继续给我一个空引用错误。 经过考虑,我相信它给了我这个错误,因为没有网络 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】:

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

【讨论】:

以上是关于引用具有网络标识 Unity UNET 的对象的子对象?的主要内容,如果未能解决你的问题,请参考以下文章

Unity5网络模块UNet介绍

Unity Networking-UNet 中的附加场景加载

Unity5.1 新的网络引擎UNET UNET 官方推荐Demo案例

在 Unity Networking - UNET 中同步复杂的游戏对象

Unity 5 - UNET - 将拖动的游戏对象同步为客户端(HL2 重力枪风格)

Unity UNET - 在播放器对象之外调用 [Command]