Unity Thêm trò chuyện nhiều người chơi vào phòng PUN 2

Trong hướng dẫn này, tôi sẽ hướng dẫn cách thêm phòng trò chuyện trong PUN 2 bằng cách sử dụng RPC (Cuộc gọi thủ tục từ xa).

Vì vậy, hãy bắt đầu!

Phần 1: Ví dụ thiết lập PUN 2 và nhiều người chơi

Chúng tôi đã có hướng dẫn về cách thiết lập ví dụ nhiều người chơi với PUN 2, hãy xem liên kết bên dưới:

Tạo trò chơi nhiều người chơi trong Unity 3D bằng PUN 2

Hãy quay lại sau khi bạn thiết lập xong dự án nhiều người chơi để chúng ta có thể tiếp tục.

Ngoài ra, bạn có thể tải xuống trực tiếp source project.

Phần 2: Thêm trò chuyện nhiều người chơi

  • Tạo một tập lệnh mới, gọi nó là PUN2_Chat rồi dán đoạn mã bên dưới vào trong đó:

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);
        }
    }
}

Nếu bạn làm theo hướng dẫn PUN 2 của chúng tôi thì bây giờ bạn sẽ có 2 Cảnh "GameLobby" và "GameLevel"

  • Mở Cảnh "GameLevel" sau đó đính kèm PUN2_Chat vào Đối tượng _RoomController sau đó Lưu Cảnh
  • Mở Cảnh "GameLobby" sau đó tạo Phòng mới, bây giờ bạn có thể trò chuyện bằng cách nhấn "T"