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);
}