以下信息来自麦子学院
这是最终实现的效果
Network组件的基本原理及相关知识
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NetWork : MonoBehaviour {
int port = 10010;
string message = "";
Vector2 sc;
void OnGUI() {
switch(Network.peerType){
case NetworkPeerType.Disconnected:
StartSeever();
break;
case NetworkPeerType.Server:
OnServer();
break;
case NetworkPeerType.Client:
break;
case NetworkPeerType.Connecting:
break;
}
}
void StartSeever() {
if (GUILayout.Button("创建服务器")) {
var error = Network.InitializeServer(12, port, false);
//初始化服务器 返回一个创建错误的状态
switch(error){
case NetworkConnectionError.NoError:
break;
default:
Debug.LogError("启动服务器失败");
break;
}
}
}
void OnServer(){
GUILayout.Label("服务器已经运行,等待客户端连接");
foreach (var temp in Network.connections) {
GUILayout.Label("客户端"+"IP"+temp.ipAddress+"Potr"+temp.port);
GUILayout.Label("-----------------");
}
//创建scrollview
sc=GUILayout.BeginScrollView(sc,GUILayout.Width(280),GUILayout.Height(350));
//绘制纹理显示内容
GUILayout.Box(message);
//结束滚动视图
GUILayout.EndScrollView();
}
[RPC]
void RecvMessage(string str,NetworkMessageInfo info){
message = "发送端" + info.sender + "消息" + str;
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NetWorkClient : MonoBehaviour {
int port = 10010;
string message = "";
Vector2 sc;
void OnGUI()
{
switch (Network.peerType)
{
case NetworkPeerType.Disconnected:
StartConnection();
break;
case NetworkPeerType.Server:
break;
case NetworkPeerType.Client:
OnClient();
break;
case NetworkPeerType.Connecting:
break;
}
}
void StartConnection()
{
if (GUILayout.Button("连接服务器"))
{
var error = Network.Connect("127.0.0.1",port);
//连接服务器
switch (error)
{
case NetworkConnectionError.NoError:
break;
default:
Debug.LogError("客户端错误"+error);
break;
}
}
}
void OnClient()
{
//创建scrollview
sc = GUILayout.BeginScrollView(sc, GUILayout.Width(280), GUILayout.Height(350));
//绘制纹理显示内容
GUILayout.Box(message);
//文本框
message = GUILayout.TextArea(message);
if(GUILayout.Button("发送")){
GetComponent<NetworkView>().RPC("RecvMessage",RPCMode.All,message);
//第一个参数发给的对象名称 第二个是给所有人发
}
//结束滚动视图GUILayout.Label("服务器已经运行,等待客户端连接");
GUILayout.EndScrollView();
}
[RPC]
void RecvMessage(string str, NetworkMessageInfo info)
{
message = "发送端" + info.sender + "消息" + str;
}
}