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<Weapon>().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);//变为父物体的子物体
  }

这样就完成了。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值