网络游戏开发(一)

时间:2022-06-01 20:29:20

最近在做一个第一人称局域网射击类游戏

我将分为三个篇幅来写一些开发方法和心得体会

这篇文章我来说下Unity网络组件的简单常用使用方法



直接上代码:

using UnityEngine;
using System.Collections;

public class NetworkManager : MonoBehaviour
{
// 最大客户端连接数
private int connections = 15;

//连接端口号
private int listenPort = 8090;

//是否选择nat
private bool useNat = false;

//IP地址
private string ip = "127.0.0.1";

//实例化的网络对象
public GameObject obj;

// Use this for initialization
void Start ()
{

}

// Update is called once per frame
void Update ()
{

}

void OnGUI()
{
//如果客户端与服务器未发生连接
if (Network.peerType == NetworkPeerType.Disconnected)
{
if(GUILayout.Button("创建服务器"))
{
//创建服务器端
NetworkConnectionError isError = Network.InitializeServer(connections, listenPort, useNat);
print(isError.ToString());
}
if(GUILayout.Button("创建客户端"))
{
//连接服务器
NetworkConnectionError isError = Network.Connect(ip, listenPort);
print(isError.ToString());
}
}
else if(Network.peerType==NetworkPeerType.Connecting)
{
print("正在连接");
}
else if(Network.peerType==NetworkPeerType.Server)
{
GUILayout.Label("服务器创建成功");
}
else if (Network.peerType == NetworkPeerType.Client)
{
GUILayout.Label("服务器连接成功");
}
}

//Called on the server whenever a Network.InitializeServer was invoked and has completed
//只在服务器端调用
void OnServerInitialized()
{
Network.Instantiate(obj,new Vector3(0,20,0),Quaternion.identity,int.Parse(Network.player+" "));
}


//当有客户端创建后将调用该函数
//只在服务器端调用
void OnPlayerConnected()
{
print("有客户端连接,the number value is:"+Network.player);
}


//当连接服务器后调用
//只在客户端中调用
void OnConnectedToServer()
{
print("成功连接服务器");
Network.Instantiate(obj, new Vector3(0, 20, 0), Quaternion.identity, int.Parse(Network.player + " "));
}
}

注意:

这里实例化的游戏对象的同步方式是单方向的同步的,意思是象只会在实例化游戏对象的客户端往其他客户端同步(服务器端看做一个特殊的客户端)

就是说,当一个游戏对象a在客户端A实例化,一个游戏对象b在另外一个客户端B实例化。当a的位置在A中发生改变后,B中显示的a的位置会同步显示;当b的位置在A中发生改变后,由于游戏对象b不是在A中实例化的,所以B中不会同步改变b的位置。


将脚本添加到主摄像机里

这里我实例化的游戏对象是个立方体,保存在Prefab文件内

在立方体上添加如下图两个组件:

网络游戏开发(一)

将立方体拖到obj对象上

ok!可以进行测试了