UnityNetwork
来源:互联网 发布:淘宝充气娃娃实际拍图 编辑:程序博客网 时间:2024/05/29 18:19
http://blog.csdn.net/yuanlin2008/article/details/7834864文章:Unity的网络功能,NetworkView实用介绍
http://www.ceeger.com/Components/class-NetworkView.htmlUnity宝典对NetworkView的介绍
http://www.ceeger.com/Components/net-MasterServer.htmlMasterServer 官方翻译文档。
unity5.x开发指南:222页 网络实例
游戏管理:
using UnityEngine;using System.Collections;public enum BallGameState{ lobby,//大厅 idle,//等待 gaming,//游戏中 lose //失败}public class Manager : MonoBehaviour { public GameObject prefab_ball; private BallGameState state = BallGameState.lobby; private string IP = "127.0.0.1"; private int Port = 1000; private Rigidbody myBall;// Use this for initializationvoid Start () {}void OnGUI() { switch(state) { case BallGameState.lobby: OnLobby(); break; case BallGameState.idle: OnIdle(); break; case BallGameState.gaming: OnGaming(); break; case BallGameState.lose: OnLose(); break; } } void OnLobby() { if(GUILayout.Button("建立服务器")) { NetworkConnectionError error = Network.InitializeServer(100, Port, false); if(error==NetworkConnectionError.NoError) { state = BallGameState.idle; } } GUILayout.Label("================================"); GUILayout.BeginHorizontal(); GUILayout.Label("服务器IP地址:"); IP = GUILayout.TextField(IP); GUILayout.EndHorizontal(); if(GUILayout.Button("连接服务器")) { NetworkConnectionError error = Network.Connect(IP, Port); if(error==NetworkConnectionError.NoError) { state = BallGameState.idle; } } } void OnIdle() { if(GUILayout.Button("Start")) { StartGaming(); } } //游戏逻辑状态 void OnGaming() { float x = Input.GetAxis("Horizontal"); float y = Input.GetAxis("Vertical"); myBall.AddForce(new Vector3(x, y*3, 0)); //出界则失败 if(myBall.transform.position.y<-5) { Network.Destroy(myBall.GetComponent<NetworkView>().viewID); state = BallGameState.lose; } } void OnLose() { GUILayout.Label("You Lose"); if(GUILayout.Button("Start Again!")) { StartGaming(); } } //开始游戏 void StartGaming() { state = BallGameState.gaming; GameObject obj = Network.Instantiate(prefab_ball, new Vector3(0, 1, 0), Quaternion.identity, 0) as GameObject; myBall = obj.GetComponent<Rigidbody>(); //obj.GetComponent<Renderer>().material.color = new Color(Random.value, Random.value, Random.value); }// Update is called once per framevoid Update () {}}
using UnityEngine;using System.Collections;public class SphereSerializer2 : MonoBehaviour { private Rigidbody rigidbody; private Renderer renderer; private NetworkView networkView; bool firstSerialize = true; void Awake() { rigidbody = GetComponent<Rigidbody>(); renderer = GetComponent<Renderer>(); networkView = GetComponent<NetworkView>(); networkView.observed = this;//不再是同步刚体,而是脚本组件 } void OnSerializeNetworkView(BitStream stream,NetworkMessageInfo info) { if(firstSerialize) { firstSerialize = false; Vector3 color = Vector3.zero; if(stream.isWriting)//发送数据 { if (networkView.isMine)//如果isMine是true,表示此游戏对象是本机创建的 color = new Vector3(1, 0, 0); else color = new Vector3(0, 1, 0); stream.Serialize(ref color); } else//读取数据 { stream.Serialize(ref color); } renderer.material.color = new Color(color.x, color.y, color.z); } Vector3 pos = Vector3.zero; Quaternion rotation = Quaternion.identity; Vector3 velocity = Vector3.zero; if(stream.isWriting) { pos = rigidbody.position; stream.Serialize(ref pos); rotation = rigidbody.rotation; stream.Serialize(ref rotation); velocity = rigidbody.velocity; stream.Serialize(ref velocity); } else { stream.Serialize(ref pos); transform.position = pos; stream.Serialize(ref rotation); transform.rotation = rotation; stream.Serialize(ref velocity); rigidbody.velocity = velocity; } }// Use this for initializationvoid Start () {}// Update is called once per framevoid Update () {}}
MasterServer实例:224页
单独运行:Server
using UnityEngine;using System.Collections;public class MyServer : MonoBehaviour { public string gameName = "CrazyBalls";// Use this for initializationvoid Start () { MasterServer.ipAddress = "127.0.0.1"; //指定MasterServer的端口号 MasterServer.port = 23466;//初始化服务器 Network.InitializeServer(35, 25003, false);//!Network.HavePublicAddress()最后一个参数这样应该更好 //在MasterServer上注册本服务器,命名为“小菜鸟的房间”,介绍为一起玩吧 MasterServer.RegisterHost(gameName,"小菜鸟的房间", "来一起玩吧");//创建这个类型的主机服务器(房间)}// Update is called once per frame}
Client:单独运行
using UnityEngine;using System.Collections;public class Client : MonoBehaviour {// Use this for initializationvoid Start () { //指定MasterServer的IP地址 MasterServer.ipAddress = "127.0.0.1"; //指定MasterServer的端口号 MasterServer.port = 23466; //请求CrazyBalls游戏 MasterServer.RequestHostList("CrazyBalls");//请求这个游戏类型的主机} void OnGUI() { //得到所有服务器 HostData[] data = MasterServer.PollHostList();//获取请求的房间列表(服务器) //显示服务器列表,并可加入 foreach(HostData hostData in data) { GUILayout.BeginHorizontal(); string text = hostData.gameName + " 房间人数:" + hostData.connectedPlayers + "/" + hostData.playerLimit;//最大人数 GUILayout.Label(text); string hostInfo = ""; foreach(string hostIp in hostData.ip)//应该只有一个ip { hostInfo += hostIp + " : "; } hostInfo += hostData.port;//:+端口 if(GUILayout.Button("加入"+" "+hostInfo)) { Network.Connect(hostData); } GUILayout.EndHorizontal(); } }}
0 0
- UnityNetwork
- UnityNetwork简单demo
- UnityNetwork [Command]问题
- spring和Hibernate 整合
- CMAKE自动构建
- 从graphite中删除字段信息
- Linux deepin 15.1配置java环境
- HDU 1085 Holding Bin-Laden Captive!(母函数)
- UnityNetwork
- 121. Best Time to Buy and Sell Stock LeetCode
- 46. Permutations LeetCode
- USACO Milking Cows 解题日志
- K-近邻分类算法(监督式)
- HDFS详细讲解
- poj 2378 简单树形dp
- 24. Swap Nodes in Pairs LeetCode
- Git教程