Unity تضيف دردشة متعددة اللاعبين إلى غرف PUN 2
في هذا البرنامج التعليمي، سأوضح كيفية إضافة دردشة الغرفة في PUN 2 باستخدام RPCs (استدعاءات الإجراءات عن بعد).
لذلك دعونا نبدأ!
الجزء 1: إعداد PUN 2 ومثال متعدد اللاعبين
لدينا بالفعل برنامج تعليمي حول كيفية إعداد مثال متعدد اللاعبين باستخدام PUN 2، تحقق من الرابط أدناه:
أنشئ لعبة متعددة اللاعبين في Unity 3D باستخدام PUN 2
عد بمجرد الانتهاء من إعداد مشروع متعدد اللاعبين حتى نتمكن من المتابعة.
وبدلاً من ذلك، يمكنك تنزيل المشروع المصدر مباشرة.
الجزء 2: إضافة دردشة متعددة اللاعبين
- قم بإنشاء سكريبت جديد، وأطلق عليه اسم PUN2_Chat ثم الصق الكود أدناه بداخله:
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);
}
}
}
إذا اتبعت برنامجنا التعليمي PUN 2، فسيكون لديك الآن مشهدان "GameLobby" و "GameLevel"
- افتح المشهد "GameLevel" ثم قم بإرفاق PUN2_Chat بكائن _RoomController ثم احفظ المشهد
- افتح المشهد "GameLobby" ثم أنشئ غرفة جديدة، ومن المفترض أن تتمكن الآن من الدردشة بالضغط "T"