Unity バージョン: 5.5
シーン例:
- Light [Light コンポーネントを持つゲームオブジェクト]
- LightSwitch - [内容: BoxCollider|NetworkIdentity|NetworkBehaviour から継承されたスクリプトで、誰かが BoxCollider をクリックしたときにライトのオン/オフを切り替える]
LightSwitch.cs
public class LightSwitch : NetworkBehaviour
{
public GameObject roomLight;
void OnMouseDown () {
CmdToggleLight(!roomLight.activeSelf);
}
[Command]
void CmdToggleLight (bool status) {
RpcToggleLight(status);
}
[ClientRpc]
void RpcToggleLight (bool status) {
roomLight.SetActive(status);
}
}
どのプレイヤーでもその LightSwitch をクリックして、ライトのオン/オフを切り替えられるようにするにはどうすればよいですか?
編集:例に従って、これは私が構築しなければならなかったコードです:
using UnityEngine;
using UnityEngine.Networking;
using System.Collections;
public class LightSwitch : NetworkBehaviour
{
public GameObject roomLight;
[SyncVar(hook="setLight")]
private bool status;
void OnMouseDown()
{
// my player's singleton
Player.singleton.CmdToggleSwitch(this.gameObject);
}
public void toggleLight()
{
status = !status;
}
void setLight(bool newStatus)
{
roomLight.SetActive(newStatus);
}
[ClientRpc]
public void RpcToggleSwitch(GameObject switchObject)
{
switchObject.GetComponent<LightSwitch>().toggleLight();
}
}
Player.cs コード:
using UnityEngine;
using UnityEngine.Networking;
using System.Collections;
using System.Collections.Generic;
using System;
public class Player : NetworkBehaviour {
public static Player singleton;
void Start () {
singleton = this;
}
//... my player class code ....//
[Command]
public void CmdToggleSwitch(GameObject gObject)
{
gObject.GetComponent<LightSwitch>().RpcToggleSwitch(gObject);
}
}
Unity のおかげで、ライトを切り替えるだけでも大したことはありません。