using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
public class ParticleManager : NetworkBehaviour
{
[SyncVar(hook = "SetParticleActive")]
public bool active = true;
public GameObject particle;
void Update()
{
if (Input.GetKeyDown(KeyCode.Q))
{
CmdPatricle(!particle.activeInHierarchy);
}
}
[Command]
public void CmdPatricle(bool isok)
{
active = isok;
Debug.Log("CMD" + isok);
}
//bool isok 得到是已经变化后的 active
public void SetParticleActive(bool isok)
{
particle.SetActive(isok);
Debug.Log("Hook" + isok);
}
}
如果上面代码 不加 hook
//[SyncVar(hook = "SetParticleActive")]
[SyncVar]
public bool active = true;
public GameObject particle;
void Start()
{
particle = GameObject.Find("Particle System");
}
//public override void OnStartClient()
//{
// // register client events, enable effects
// NetworkServer.SpawnWithClientAuthority(gameObject, connectionToClient);
//}
void Update()
{
if (Input.GetKeyDown(KeyCode.Q))
{
CmdPatricle(!particle.activeInHierarchy);
Debug.Log("End " + active);
}
}
[Command]
public void CmdPatricle(bool isok)
{
active = isok;
Debug.Log("CMD" + isok);
//因为RPC 在服务器端调用(本地没有权限)
RpcSetClient(active);
}
//bool isok 得到是已经变化后的 active
public void SetParticleActive(bool isok)
{
particle.SetActive(isok);
Debug.Log("Hook" + isok);
}
[ClientRpc]
public void RpcSetClient(bool isok)
{
Debug.Log("Client Rpc" + isok);
active = isok;
particle.SetActive(isok);
Debug.Log("Client Rpc active" + active);
}