Unity3D精简版网络游戏雏形(简单网络通信聊天和角色监视案例)
还是把代码贴出来吧,不知道怎么上传附件。。
下面是服务器端的代码:
using UnityEngine;
using System.Collections;
public class Script_FWQ : MonoBehaviour
{
//端口号
int Port = 10000;
//聊天信息
string Message = "";
//移动信息
string MoveInfo = "";
//滚动试图位置
Vector2 scrollPosition;
void OnGUI() {
//网络连接状态
switch (Network.peerType) {
//服务器未开启状态
case NetworkPeerType.Disconnected:
StartServe();
break;
//成功连接服务器端状态
case NetworkPeerType.Server:
OnServer();
break;
//成功连接客户端状态
case NetworkPeerType.Client:
break;
//正在尝试连接状态
case NetworkPeerType.Connecting:
break;
}
}
//创建本机服务器端
void StartServe() {
if (GUILayout.Button("创建本机服务器端")) {
//创建服务器,允许连接10台主机客户端
NetworkConnectionError error = Network.InitializeServer(10,Port,false);
//InitializeServer(1,2,3):说明:1,允许的入站连接或玩家的数量,主机端口;2,要监听的端口 ;3,useNat设置NAT穿透功能
Debug.Log("连接状态"+error);
}
}
void OnServer() {
GUILayout.Label("服务器创建完毕,等待客户端连接");
//得到客户端连接的数量
int length = Network.connections.Length;
for (int i = 0; i < length; i++) {
GUILayout.Label("连接服务器客户端ID"+i);
GUILayout.Label("连接服务器客户端IP"+Network.connections[i].ipAddress);
GUILayout.Label("连接服务器客户端端口号"+Network.connections[i].port);
}
if (GUILayout.Button("断开服务器")) {
Network.Disconnect();
//重置聊天信息
Message = "";
MoveInfo = "";
}
//创建滚动视图,用来显示聊天信息
scrollPosition = GUILayout.BeginScrollView(scrollPosition,GUILayout.Width(400),GUILayout.Height(800));
//显示聊天信息
GUILayout.Box(Message);
GUILayout.EndScrollView();
}
//接收消息
[RPC]
void RequestMessage(string message, NetworkMessageInfo info) {
Message += "\n" + "发送者" + info.sender + ":" + message;
}
//接收到模型移动的消息
[RPC]
void RequestMove(string message,NetworkMessageInfo info) {
MoveInfo += "\n" + "移动者" + info.sender + ":执行了" + message + "移动事件";
}
}
下面这个是客户端的代码:
using UnityEngine;
using System.Collections;
public class Script_KHD : MonoBehaviour
{
//服务器的IPd地址,这里的IP需要更改成本机的IP地址
string IP = "10.137.7.3";
//端口号
int Prot = 10000;
//输入信息
string inputMessage = "请输入信息!";
//接收到的消息
string Message = "";
//滚动试图的位置
Vector2 scrollPosition;
//移动速度
float speed = 10.0f;
//旋转速度
float rotationSpeed = 100.0f;
//主角控制的模型
GameObject cube0 = null;
//对方控制的模型
GameObject cube1 = null;
void Start() {
cube0 = GameObject.Find("Cube0");
cube1 = GameObject.Find("Cube1");
}
void FixedUpdate() {
if (Network.isClient) {
float translation = Input.GetAxis("Vertical");
float Rotation = Input.GetAxis("Horizontal");
if (translation == 1) {
//使用RPG发送向前的移动信息
networkView.RPC("RequestMove", RPCMode.All, "up");
}
if (translation == -1) {
//使用RPG发送向后的移动信息
networkView.RPC("RequestMove", RPCMode.All, "down");
}
if (Rotation ==1) {
//使用RPG发送向左的旋转信息
networkView.RPC("RequestMove",RPCMode.All,"left");
}
if (Rotation == -1) {
//使用RPG发送向右的旋转信息
networkView.RPC("RequestMove",RPCMode.All,"right");
}
}
}
//连接服务器状态
void OnGUI() {
switch (Network.peerType) {
//成功连接运行于客户端
case NetworkPeerType.Client:
OnClient();
break;
//正在尝试连接
case NetworkPeerType.Connecting:
break;
//服务器未开启状态
case NetworkPeerType.Disconnected:
StartConnect();
break;
//成功连接运行于服务器端
case NetworkPeerType.Server:
break;
default:
break;
}
}
//连接服务器
void StartConnect() {
if (GUILayout.Button("加入游戏")) {
NetworkConnectionError error = Network.Connect(IP, Prot);
Debug.Log("连接状态"+error);
}
}
//客户端运行内容
void OnClient() {
//开始创建滚动视图,用来显示聊天信息
scrollPosition = GUILayout.BeginScrollView(scrollPosition,GUILayout.Width(400),GUILayout.Height(800));
//显示聊天信息
GUILayout.Box(Message);
//开始创建水平视图
GUILayout.BeginHorizontal();
//编辑输入内容
inputMessage = GUILayout.TextArea(inputMessage);
//发送内容
if (GUILayout.Button("发送信息")) {
//使用RPG发送内容
networkView.RPC("RequestMessage", RPCMode.All, inputMessage);
}
//结束创建水平视图
GUILayout.EndHorizontal();
//断开连接
if (GUILayout.Button("断开连接")) {
Network.Disconnect();
}
//结束创建滚动视图
GUILayout.EndScrollView();
}
//接收消息
[RPC]
void RequestMessage(string message, NetworkMessageInfo info) {
Message += "\n" + "发送者" + info.sender + ":" + message;
}
//接收模型的移动信息
[RPC]
void RequestMove(string message,NetworkMessageInfo info) {
string sender = info.sender.ToString();
GameObject moveObject = null;
//自己移动的事件
if (sender =="1") {
moveObject = cube0;
}
//其他玩家的移动事件
else {
moveObject = cube1;
}
//根据消息判断事件类型
int vertical = 0;
int horizontal = 0;
if (message == "up") {
//向前
vertical = 1;
}
if (message == "down") {
//向后
vertical = -1;
}
if (message == "left") {
//向左旋转
horizontal = 1;
}
if (message == "right") {
//向右旋转
horizontal = -1;
}
//移动角色
float translation = vertical * speed * Time.deltaTime;
float rotation = horizontal * rotationSpeed * Time.deltaTime;
moveObject.gameObject.transform.Translate(0,0,translation);
moveObject.gameObject.transform.Rotate(0,rotation,0);
}
}