例子场景:舞台上有4个座位,我有一个名为x的int值,当玩家坐在椅子上时,x值增加了1。当你从座位上站起来时,x值减少了1。我在rpc的帮助下将这个值发送给所有玩家。当游戏中的所有玩家都就位时(当游戏中的玩家数等于x),我将一个光子物体加载到场景中。最后一个坐在座位上的人把这个物体上传到舞台上。因为当最后一个玩家坐在座位上时,x的值就等于游戏中的玩家数量。在游戏的一部分,我必须彻底摧毁这个物体。只有座位上的最后一个玩家才能摧毁它,因为物体的主人是他自己。我想要的是:即使主动者是第一个坐下来的玩家,它也会等待其他玩家坐下来,当x值等于游戏中的玩家数量时(当最后一个玩家坐下时),掌握者就会加载这个项目。因此,在游戏中,物体的主人变成了自制力者。自动驾驶者可以随意摧毁物体。我怎么能这么做。我使用的代码文件:
public class control : MonoBehaviourPunCallbacks{
private int x;
private GameObject nesne;
public void sit()
{
x = PlayerPrefs.GetInt("kaçoldu");
photonView.RPC("KacOldu", RpcTarget.OthersBuffered,x);
KacOldu(x);
if (PhotonNetwork.CurrentRoom.PlayerCount == x)
{
nesne = PhotonNetwork.Instantiate("nesne", Vector3.zero, Quaternion.identity, 0, null);
}
}
public void up()
{
x = PlayerPrefs.GetInt("kaçoldu");
photonView.RPC("KacOldueksi", RpcTarget.OthersBuffered, x);
KacOldueksi(x);
PhotonNetwork.Destroy(nesne);
}
[PunRPC]
private void KacOldu(int x)
{
x = PlayerPrefs.GetInt("kaçoldu");
x++;
Debug.Log("kaç?"+ x);
PlayerPrefs.SetInt("kaçoldu", x);
}
[PunRPC]
private void KacOldueksi(int x)
{
x = PlayerPrefs.GetInt("kaçoldu");
x--;
Debug.Log("kaç?" + x);
PlayerPrefs.SetInt("kaçoldu", x);
}}
游戏中的独断者不能摧毁名为"nesne“的对象,因为"nesne”的所有者是另一个玩家。如果我尝试这个:if (PhotonNetwork.CurrentRoom.PlayerCount == x && PhotonNetwork.IsMasterClient) { nesne = PhotonNetwork.Instantiate("nesne", Vector3.zero, Quaternion.identity, 0, null); },我仍然不能成功,因为如果最后一位坐着的球员不是自制力者,那么"nesne“的拥有者仍然不能成为主动者。当游戏中的玩家数量等于x时,我想让自制力加载"nesne“,你能帮我吗?
发布于 2022-04-05 13:36:09
老实说,我并不真正理解PlayerPrefs背后的逻辑,也不明白x到底应该是什么,因为似乎每个玩家都能完全否定它……
如果不是你想要的,我会
(
RpcTarget.AllBuffered,以便您自己也可以调用所以有点像。
public void sit()
{
x = PlayerPrefs.GetInt("kaçoldu");
photonView.RPC(nameof(KacOldu), RpcTarget.AllBuffered, x);
}
public void up()
{
x = PlayerPrefs.GetInt("kaçoldu");
photonView.RPC(nameof(KacOldueksi), RpcTarget.AllBuffered, x);
}
[PunRPC]
private void KacOldu(int x)
{
x = PlayerPrefs.GetInt("kaçoldu");
x++;
Debug.Log("kaç?"+ x);
PlayerPrefs.SetInt("kaçoldu", x);
// This happens now regardless of whether you or anyone else is the last sitting client
if (PhotonNetwork.IsMasterClient && PhotonNetwork.CurrentRoom.PlayerCount == x)
{
// I would actually use this instead in case the Masterclient role is shifted to someone else
nesne = PhotonNetwork.InstantiateRoomObject("nesne", Vector3.zero, Quaternion.identity, 0, null);
}
}
[PunRPC]
private void KacOldueksi(int x)
{
x = PlayerPrefs.GetInt("kaçoldu");
x--;
Debug.Log("kaç?" + x);
PlayerPrefs.SetInt("kaçoldu", x);
// This happens for any standing up client including the masterclient himself
if (PhotonNetwork.IsMasterClient && nesne)
{
PhotonNetwork.Destroy(nesne);
}
}https://stackoverflow.com/questions/71745026
复制相似问题