Unity fügt Multiplayer-Chat zu den PUN 2-Räumen hinzu

In diesem Tutorial zeige ich, wie man mithilfe von RPCs (Remote Procedure Calls) einen Raumchat in PUN 2 hinzufügt.

Also fangen wir an!

Teil 1: Einrichten von PUN 2 und Beispiel für einen Mehrspielermodus

Wir haben bereits ein Tutorial zum Einrichten eines Multiplayer-Beispiels mit PUN 2, schauen Sie sich den Link unten an:

Erstelle ein Multiplayer-Spiel in Unity 3D mit PUN 2

Kommen Sie zurück, sobald Sie mit der Einrichtung eines Multiplayer-Projekts fertig sind, damit wir fortfahren können.

Alternativ können Sie das Quellprojekt direkt herunterladen.

Teil 2: Mehrspieler-Chat hinzufügen

  • Erstellen ein neues Skript, nennen Sie es PUN2_Chat und fügen Sie dann den folgenden Code ein:

PUN2_Chat.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Photon.Pun;
using Photon.Realtime;

public class PUN2_Chat : MonoBehaviourPun
{
    bool isChatting = false;
    string chatInput = "";

    [System.Serializable]
    public class ChatMessage
    {
        public string sender = "";
        public string message = "";
        public float timer = 0;
    }

    List<ChatMessage> chatMessages = new List<ChatMessage>();

    // Start is called before the first frame update
    void Start()
    {
        //Initialize Photon View
        if(gameObject.GetComponent<PhotonView>() == null)
        {
            PhotonView photonView = gameObject.AddComponent<PhotonView>();
            photonView.ViewID = 1;
        }
        else
        {
            photonView.ViewID = 1;
        }
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyUp(KeyCode.T) && !isChatting)
        {
            isChatting = true;
            chatInput = "";
        }

        //Hide messages after timer is expired
        for (int i = 0; i < chatMessages.Count; i++)
        {
            if (chatMessages[i].timer > 0)
            {
                chatMessages[i].timer -= Time.deltaTime;
            }
        }
    }

    void OnGUI()
    {
        if (!isChatting)
        {
            GUI.Label(new Rect(5, Screen.height - 25, 200, 25), "Press 'T' to chat");
        }
        else
        {
            if (Event.current.type == EventType.KeyDown && Event.current.keyCode == KeyCode.Return)
            {
                isChatting = false;
                if(chatInput.Replace(" ", "") != "")
                {
                    //Send message
                    photonView.RPC("SendChat", RpcTarget.All, PhotonNetwork.LocalPlayer, chatInput);
                }
                chatInput = "";
            }

            GUI.SetNextControlName("ChatField");
            GUI.Label(new Rect(5, Screen.height - 25, 200, 25), "Say:");
            GUIStyle inputStyle = GUI.skin.GetStyle("box");
            inputStyle.alignment = TextAnchor.MiddleLeft;
            chatInput = GUI.TextField(new Rect(10 + 25, Screen.height - 27, 400, 22), chatInput, 60, inputStyle);

            GUI.FocusControl("ChatField");
        }
        
        //Show messages
        for(int i = 0; i < chatMessages.Count; i++)
        {
            if(chatMessages[i].timer > 0 || isChatting)
            {
                GUI.Label(new Rect(5, Screen.height - 50 - 25 * i, 500, 25), chatMessages[i].sender + ": " + chatMessages[i].message);
            }
        } 
    }

    [PunRPC]
    void SendChat(Player sender, string message)
    {
        ChatMessage m = new ChatMessage();
        m.sender = sender.NickName;
        m.message = message;
        m.timer = 15.0f;

        chatMessages.Insert(0, m);
        if(chatMessages.Count > 8)
        {
            chatMessages.RemoveAt(chatMessages.Count - 1);
        }
    }
}

Wenn Sie unserem PUN 2-Tutorial gefolgt wären, hätten Sie jetzt 2 Szenen "GameLobby" und "GameLevel"

  • Öffnen Sie die "GameLevel"-Szene, hängen Sie dann PUN2_Chat an das _RoomController-Objekt an und speichern Sie dann die Szene
  • Öffnen Sie die Szene "GameLobby" und erstellen Sie dann einen neuen Raum. Sie sollten nun in der Lage sein, durch Drücken von zu chatten "T"

Empfohlene Artikel
Erstellen Sie mit PUN 2 ein Multiplayer-Spiel in Unity
Erstellen Sie ein Multiplayer-Autospiel mit PUN 2
Synchronisieren Sie Rigidbodies über das Netzwerk mit PUN 2
Unity-Anmeldesystem mit PHP und MySQL
Erstellen vernetzter Multiplayer-Spiele in Unity
Multiplayer-Datenkomprimierung und Bitmanipulation
Unity Online-Ranglisten-Tutorial