网络游戏开发(一)

来源:互联网 发布:5.1声道耳机推荐 知乎 编辑:程序博客网 时间:2024/05/22 23:21

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

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

这篇文章我来说下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 initializationvoid Start ()     {}// Update is called once per framevoid 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!可以进行测试了


1 0