首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有可能只有乳突者才能装载光子物体?

是否有可能只有乳突者才能装载光子物体?
EN

Stack Overflow用户
提问于 2022-04-05 00:10:20
回答 1查看 179关注 0票数 1

例子场景:舞台上有4个座位,我有一个名为x的int值,当玩家坐在椅子上时,x值增加了1。当你从座位上站起来时,x值减少了1。我在rpc的帮助下将这个值发送给所有玩家。当游戏中的所有玩家都就位时(当游戏中的玩家数等于x),我将一个光子物体加载到场景中。最后一个坐在座位上的人把这个物体上传到舞台上。因为当最后一个玩家坐在座位上时,x的值就等于游戏中的玩家数量。在游戏的一部分,我必须彻底摧毁这个物体。只有座位上的最后一个玩家才能摧毁它,因为物体的主人是他自己。我想要的是:即使主动者是第一个坐下来的玩家,它也会等待其他玩家坐下来,当x值等于游戏中的玩家数量时(当最后一个玩家坐下时),掌握者就会加载这个项目。因此,在游戏中,物体的主人变成了自制力者。自动驾驶者可以随意摧毁物体。我怎么能这么做。我使用的代码文件:

代码语言:javascript
复制
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“,你能帮我吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-05 13:36:09

老实说,我并不真正理解PlayerPrefs背后的逻辑,也不明白x到底应该是什么,因为似乎每个玩家都能完全否定它……

如果不是你想要的,我会

(

  • a)只需使用RpcTarget.AllBuffered,以便您自己也可以调用
  • b),以检查RPC的数量而不是RPC

所以有点像。

代码语言:javascript
复制
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);
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71745026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档