如何使用Rpc在统一光子(脚本不工作)



在这里,我用RPC在unity photon多人游戏中制作了一个简单的手电筒脚本,脚本将游戏对象手电筒设置为active和false。当我运行游戏时,我在主机上似乎没有出现任何错误。总之,2个客户端没有同步手电筒的更改

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using Photon.Pun;
public class flashlight : MonoBehaviourPunCallbacks
{
public GameObject FlashlightLight;
private bool flashlightActive = false;
PhotonView view;
public GameObject player;
//public bool active;

void Start()
{
view = this.GetComponent<PhotonView>();
}
[PunRPC]
public void Light(bool active)
{
if (view.IsMine)
{
if(active == true)
{
FlashlightLight.gameObject.SetActive(true);
}
if(active == false)
{
FlashlightLight.gameObject.SetActive(false);
}

}
}
void Update()
{
if (Input.GetKeyDown(KeyCode.F))
{
view.RPC("Light", RpcTarget.AllBuffered, true);

}
if (Input.GetKeyDown(KeyCode.G))
{
view.RPC("Light", RpcTarget.AllBuffered, false);
}


}


}

在您的RPC方法Light()中,仅当它是本地播放器时,您正在检查isMine属性和设置光状态。

你必须从Light()中移除条件if(view.isMine),并将其放入Update()中,在那里你正在检查玩家输入以使其工作。

下面的内容就可以了

[PunRPC]
public void Light(bool active) {
FlashlightLight.gameObject.SetActive(active);
}
private void Update() {
if (!photonView.IsMine)
return;
if (Input.GetKeyDown(KeyCode.F)) {
photonView.RPC("Light", RpcTarget.AllBuffered, true);
}
if (Input.GetKeyDown(KeyCode.G)) {
photonView.RPC("Light", RpcTarget.AllBuffered, false);
}
}

然而,你的代码可以进一步优化,而不是使用view变量,你可以只使用photonView属性,这是继承在你的类通过MonoBehaviourPunCallbacks调用。

相关内容

  • 没有找到相关文章

最新更新