Unity教程:如何制作简易聊天室
发表于2017-03-26
很多项目都要做聊天系统,方便玩家用户之间的交流。那么在unity中如何建立制作一个简易聊天室呢,这就需要利用 Unity 中内建的 Network 来简易说明。
首先新增一个 Server.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | using UnityEngine; using System.Collections; public class Server : MonoBehaviour{ //The number of allowed incoming connections public int connections = 4; //The port number we want to listen to public int port = 25000; void OnGUI() { //Network state switch (Network.peerType) { //Disconnected case NetworkPeerType.Disconnected: CreateServer(); break; //In server case NetworkPeerType.Server: OnServer(); break; } } //Create server button void CreateServer() { if (GUILayout.Button ("Create Server")) { //Initialize the server //Network.InitializeServer(int connections, int listenPort, bool useNat); Network.InitializeServer( connections, port, false ); } } //Wait for client and display the client information void OnServer() { GUILayout.Label ( "The Server is startting now, waiting for client connecting." ); int length = Network.connections.Length; for (int cnt = 0; cnt < length; cnt++) { GUILayout.Label( "-------------------------" ); GUILayout.Label( "Client " + cnt ); GUILayout.Label( "Client IP : " + Network.connections[cnt].ipAddress ); GUILayout.Label( "Client Port : " + Network.connections[cnt].port ); } }} |
Server.cs 脚本主要是用来初始化伺服器
这裡所使用的方法都是 Unity API
这个脚本是用来初始化伺服器提供客户端连线
接下来新增 Client.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | using UnityEngine; using System.Collections; public class Client : MonoBehaviour{ public string IP = "127.0.0.1"; //The port number we want to listen to public int port = 25000; //The total message private string message; //The send message private string sendMessage = ""; //The client name private string name = ""; void OnGUI() { switch (Network.peerType) { case NetworkPeerType.Disconnected: StartConnect(); break; case NetworkPeerType.Client: OnClient(); break; } } void StartConnect() { if (GUILayout.Button ("Connect to server")) { Network.Connect( IP, port ); } } void OnClient() { name = GUILayout.TextField( name, 10 ); sendMessage = GUILayout.TextField(sendMessage, 25); if (GUILayout.Button ("Send Message")) { //Network send function //networkView.RPC(string name, RPCMode mode, params object[] args); GetComponent().RPC( "ReceiveMessage", RPCMode.All, name, sendMessage ); sendMessage = ""; } GUILayout.Label ( "Message : " ); GUILayout.Label ( message ); } //Network receive function [RPC] void ReceiveMessage(string n, string msg, NetworkMessageInfo info) { message += n + " : " + msg + "n"; } } |
用来传递讯息至其他客户端
并且接受从其他客户端传来的讯息
接下来创建两个新场景并分别命名为 Server 及 Client
分别将两个脚本赋予场景中的 Main Camera
并新增 Component → Miscellaneous → Network View 至 Camera 上
接著分别输出两个场景档
产生出 Server 及 Client 执行档后
分别执行一次 Server、两次 Client
按下 Create Server 按钮后
至 Client 端按下 Connect to server 按钮
若伺服端接收成功後
即可開始進行聊天功能測試
測試結果
此範例所用到的 Unity API 彙整
