网络游戏开发(一)

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

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

这篇文章我来说下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!可以进行测试了


本人也在寻找一份游戏开发实习工作,如果大佬们需要开发人员,请把我带走奋斗

这是我的简历:resume.liujunliang.com.cn/resume.pdf

作品的话可以私聊我哦!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值