• unity3d的网络使用的简单Demo


      网络是游戏非常的重要组成部分,它可以给游戏添加不少乐趣。unity3d本身就封装好Network类,它可以帮助我们快速的在本地建立一个局域网。

      首先在unity中创建GameController 类;把它挂载带Main Camera上。

    using UnityEngine;
    using System.Collections;
    
    public class GameController : MonoBehaviour {
    
        private int connectNum = 10;//客服端的链接数量
        private int port = 8899;//端口号
        private string ip = "127.0.0.1";//IP地址
        public GameObject cube;//游戏的预制对象
        void OnGUI()
        {
            if(GUILayout.Button("创建服务器"))
            {
                Network.InitializeServer(connectNum, port);//创建服务器
            }
            if(GUILayout.Button("链接服务器"))
            {
                Network.Connect(ip, port);//链接服务器
            }
        }
    
    //初始化服务器
    public void OnServerInitialized() { NetworkPlayer player = Network.player; int group = int.Parse(player + "");//每个客户端的唯一标识 GameObject go = Network.Instantiate(cube, cube.transform.position, cube.transform.rotation,group) as GameObject;//生成游戏对象 go.networkView.RPC("PlayerState", RPCMode.AllBuffered, player);//远程调用PlayerState方法,player是方法的需要传递的参数
      } 

    //链接服务器时unity3d自动调用的方法
    public void OnConnectedToServer()
       {
         NetworkPlayer player
    = Network.player;
        
    int group = int.Parse(player + "");
         GameObject go
    = Network.Instantiate(cube, cube.transform.position, cube.transform.rotation, group) as GameObject;
         go.networkView.RPC(
    "PlayerState",RPCMode.AllBuffered,player);
      }
    }

      然后在unity中创建Plane和Cube,Plane用来作为地面。在创建PlayerMove脚本挂载到Cube上,在Cube的Inspector面板点击Add Component,添加Character Controller和NetWork View两个组件。

    using UnityEngine;
    using System.Collections;
    
    public class PlayerMove : MonoBehaviour {
    
        private CharacterController controller;
        public float speed = 8;
        // Use this for initialization
        void Start () {
            controller = this.GetComponent<CharacterController>();
        }
        
        // Update is called once per frame
        void Update () {
            float h = Input.GetAxis("Horizontal");
            float v = Input.GetAxis("Vertical");
            Vector3 v1 = new Vector3(h, 0, v);
            controller.SimpleMove(v1 * speed);
        }
    }

      在创建Player脚本,挂载到Cube上。

    using UnityEngine;
    using System.Collections;
    
    public class Player : MonoBehaviour {
    
        private CharacterController controller;
        // Use this for initialization
        void Start () {
    
            controller = this.GetComponent<CharacterController>();
        }
      //禁用掉CharacterController组件,Cunbe就无法移动
        public void LooseControll()
        {
    
            controller = this.GetComponent<CharacterController>();
            controller.enabled = false;
        }
    
        [RPC]
        public void PlayerState(NetworkPlayer player)
        {
          //判断游戏对象是不是本客户端所创建的游戏对象,如果不是就失去对游戏对象的控制。
    if(Network.player!=player) { LooseControll(); } } }

      最后把Cube制作成预制物体。

      由于unity不能同时运行两个程序,所以要把制作成的Demo打包成exe程序,在同时打开两个exe程序。一个作为服务器端,另一个作为客服端。

  • 相关阅读:
    Python面向对象高级编程(__slots__、多继承、定制类)-6
    CS231n Lecture6-Training Neural Networks, part I学习笔记
    CS231n Lecture5-Convolutional Neural Networks学习笔记
    CS231n Lecture4-Introduction to Neural Networks学习笔记
    Python面向对象编程(类与实例、数据封装、继承多态、type()、isinstance())-5
    Python模块-4
    alloc和初始化的定义
    块的定义和使用
    属性的定义以及@synthesize的使用
    实例方法和类方法的定义
  • 原文地址:https://www.cnblogs.com/jj391/p/4760215.html
Copyright © 2020-2023  润新知