zoukankan      html  css  js  c++  java
  • 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程序。一个作为服务器端,另一个作为客服端。

  • 相关阅读:
    Asp.NET 4.0 ajax实例DataView 模板编程1
    ASP.NET 4.0 Ajax 实例DataView模板编程 DEMO 下载
    部分东北话、北京话
    .NET 培训课程解析(一)
    ASP.NET 4.0 Ajax 实例DataView模板编程2
    ASP.NET Web Game 架构设计1服务器基本结构
    ASP.NET Web Game 构架设计2数据库设计
    TFS2008 基本安装
    Linux上Oracle 11g安装步骤图解
    plsql developer远程连接oracle数据库
  • 原文地址:https://www.cnblogs.com/jj391/p/4760215.html
Copyright © 2011-2022 走看看