Unity3D Unet(Network)如何将生成的物体变为子物体

Unity3D Unet(Network)如何将生成的物体变为子物体

相信搜索这个问题的你已经发现了,在服务器上将生成的物体变为子物体是很简单的,就和平时的做法一样,但是在客户端上却无法正常转换。

这是因为在服务器上Spawn出物体到客户端后,客户端的层级关系和服务器是不同的,所以我们需要通过同步 netId 来获取其父物体。

  1. 首先,你需要在物体生成时指定其父物体的 netId: (这里我将代码写在了玩家身上)
   [Command]
   void CmdCreatWeapon()
   {
       GameObject myWeapon = Instantiate(weapon, hand.position, hand.rotation) as GameObject;//生成武器
       myWeapon.GetComponent().parentId = netId;//同步武器的父集Id(parentId)为玩家(当前物体)的netId
       NetworkServer.SpawnWithClientAuthority(myWeapon, connectionToClient);//派生出当前武器(这一步是因为我要给武器授权,你做的时候直接Spawn出来就行)
   }
  1. 然后通过生成时得到的 netId 来获取自身父物体:(此代码写在生成的物体上)
 [SyncVar] [HideInInspector] public NetworkInstanceId parentId;//父集Id(要用[SyncVar]同步)

 private void Start()
  {
       GameObject parentObject = ClientScene.FindLocalObject(parentId);//通过父集Id查找父物体
       transform.SetParent(parentObject.transform);//变为父物体的子物体
  }

这样就完成了。

你可能感兴趣的:(Unet,(Network),Unity3D,Unet,Network,游戏开发,Unity)