Networked Events 网络的事件
网络的事件就像 客户端 RPC 调用,但不是只在客户端对象上调用一个函数,客户端对象上的事件将被触发。为事件 注册的其他脚本 然后调用 - 参数在服务器上,所以这使得网络的客户端上脚本间交互。事件必须以前缀 “Event” 开头并且有 SyncEvent 的自定义属性。
事件的脚本
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Networking; public class NetWorkEvent : NetworkBehaviour { private static NetworkHash128 assetId = NetworkHash128.Parse("e9962587f"); private static NetWorkEvent instance; public static NetWorkEvent Instance { get { if (instance == null) { instance = GameObject.FindObjectOfType(typeof(NetWorkEvent)) as NetWorkEvent; if (instance == null) { GameObject NetWorkEvent = Instantiate(Resources.Load("NetWorkPrefab/NetWorkEvent")) as GameObject; NetWorkEvent.name = "NetWorkEvent"; instance = NetWorkEvent.AddComponent(typeof(NetWorkEvent)) as NetWorkEvent; //NetWorkTools.RegisterModel(NetWorkEvent); //NetWorkTools.SpwanModel(NetWorkEvent, assetId); } } return instance; } } public List<GameObject> spwanList = new List<GameObject>(); /// <summary> /// 消防车事件 /// </summary> [SyncEvent] public event System.Action EventOpenFireengineWater; public delegate void del_Sound(string name); public event del_Sound EventSound; //public event System.Action soundInit; NetworkHash128 assetid = NetworkHash128.Parse("a123456"); public void SendFireenWater() { if (EventOpenFireengineWater != null) { EventOpenFireengineWater(); } } //播放声音 public void SendSound(string value) { EventSound(value); } public void ShowSoundManager() { if (UnetManager.Instance.ClientOrServer()) { GameObject soundManager = GameObject.Instantiate((Resources.Load("SoundManager") as GameObject), transform.position, Quaternion.identity); spwanList.Add(soundManager); } else { NetWorkTools.RegisterModel(spwanList[0]); } } } 事件的注册
NetWorkEvent.Instance.EventOpenFireengineWater += OpenFireengineWater; public void OpenFireengineWater() { FireengineWater.SetActive(true); }