Unity - 未调用 Photon OnJoinedRoom

Posted

技术标签:

【中文标题】Unity - 未调用 Photon OnJoinedRoom【英文标题】:Unity - Photon OnJoinedRoom not being called 【发布时间】:2017-12-23 13:30:35 【问题描述】:

我正在使用 photon 为 android 制作 FPS 游戏。 代码如下:

using UnityEngine;
using UnityEngine.UI;

public class SceneLoaderButton : Photon.PunBehaviour 


    public string roomName, mapNameGL, password;


    public GameObject loadingPan;

    public MenuRooms menuManager;

    // Use this for initialization
    void Start () 

        Button btn = GetComponent<Button> ();
        btn.onClick.AddListener (ConnectCustomRoom);

    

    // Update is called once per frame
    void Update () 

    

    void ConnectCustomRoom()

        string room = roomName;

        RoomInfo[] ri;
        ri = PhotonNetwork.GetRoomList ();

        bool correct = false;

        string passwd, mapName = "";
        passwd = password;

        foreach (RoomInfo info in ri) 
            if (info.name == room) 
                if (info.customProperties ["Password"].ToString() == passwd) 
                    print(info.playerCount + "/" + info.maxPlayers);
                    if (info.playerCount < info.maxPlayers)
                    
                        correct = true;
                    
                    else
                    
                        menuManager.error("No room for you");
                    
                    mapName = info.customProperties ["MapName"].ToString ();
                
                else
                
                    menuManager.error("Incorrect password");
                
            
        
        mapNameGL = mapName;
        print(mapNameGL);

        if (correct) 
            print("Correct");
            loadingPan.active = !loadingPan.active;
            PhotonNetwork.playerName = "Player" + UnityEngine.Random.Range (1000,9999).ToString();
            PhotonNetwork.JoinRoom(room);
        
    


    void OnJoinedRoom()
    
        print("Joined room: " + roomName);
        //We joined room, load respective map
        Application.LoadLevel(mapNameGL);
    

这是来自按钮的代码。它被实例化,它应该加入房间,然后加载场景。在其他脚本中,“onjoinedroom”回调有效,即使我继承自 Photon.MonoBehaveiour,而不是 PUNBehaveiour。怎么了?

【问题讨论】:

【参考方案1】:

基于 PUN 文档,它是一个虚拟成员,因此您可以覆盖该方法。

尝试将方法更改为:

override void OnJoinedRoom ()

//your codes

//or
public override void OnJoinedRoom ()

//your codes

这个类提供了一个 .photonView 和 PUN 的所有回调/事件 可以打电话。覆盖您要使用的事件/方法。通过扩展 此类,您可以实现单个方法作为覆盖。

希望对你有帮助。

参考: PUN Documentation

【讨论】:

以上是关于Unity - 未调用 Photon OnJoinedRoom的主要内容,如果未能解决你的问题,请参考以下文章

Unity Photon Network CustomPropeties 在加载新场景后未更新

使用Photon引擎进行unity网络游戏开发——Photon常用类介绍

使用Photon引擎进行unity网络游戏开发

Photon Unity:变量不使用 PunRPC 同步

如何在 Unity Photon 多人游戏中更改其他客户端变量?

在Unity中使用Photon(网络多人联机)