2017-10-27 17:56:19 htwzl 阅读数 2248

子物体上的方法:

public void blockDestroy()

   Destroy(gameobject); 


在父物体上调用此方法

parentObj.BroadcastMassage("blockDestroy"); 


.BroadcastMessage

    原型:public void BroadcastMessage(string methodName, object parameter = null, SendMessageOptions options = SendMessageOptions.RequireReceiver);

    作用:这个函数的作用和SendMessageUpwards的作用正好相反,它不是推送消息给父对象,而是推送消息给所有的子对象,当然,也是会遍历所有的子对象。


2017-07-14 09:45:21 luoyikun 阅读数 1186
using UnityEngine;
using System.Collections;

public class AutoAddCollision : MonoBehaviour {

    // Use this for initialization
    void Start () {
        ModelAddMeshCollider();

    }

    void ModelAddMeshCollider()
    {
        foreach (var render in transform.GetComponentsInChildren<MeshRenderer>())
        {
            render.gameObject.AddComponent<MeshCollider>();
        }
    }
}
2019-08-13 10:55:10 qq_34229678 阅读数 151

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

这样就完成了。

没有更多推荐了,返回首页