n.height*0.5));
} }
}
8、Unity3D的物种坐标系:
1)World Space(世界坐标):
我们在场景中添加物体(如:cube),它们都是以世界坐标显示在场景中。
transform.position可以获得该位置坐标,也可以设置transform.position(Vector3())。注意:C#不可以单独设置如:transform.position.x=100;不可以单独设置一个轴的值
2)Screen Space(屏幕坐标—程序屏幕):
以像素来定义的,以屏幕的左下角(0,0)点,右上角为(Screen.width,Screen.height),Z
的位置是以相机的世界单位来衡量的。
注:鼠标位置坐标属于屏幕坐标,Input.mousePosition可以获得该位置坐标,手指触摸屏幕也为屏幕坐标,Input.GetTouch(0).position可以获得单个手指触摸屏幕坐标
If(Input.GetMouseButtonDown(0)){wenzi.text=”鼠标X:”+Input.mousePosition.x;}//如果鼠标左键按下
3)ViewPort Space(视口坐标):视口坐标是标准的和相对于相机的。相机的左下角为(0,0)点,右上角为(1,1)点,Z的位置是以相机的世界单位来衡量的—显示GUITexture 4)绘制GUI界面的坐标系: 这个坐标与屏幕坐标系相似,不同的是该标系以(屏幕)窗口的左上角为(0,0),右下角为(Screen.width,Screen.height);
5)桌面坐标系(系统坐标系) 这个坐标系与屏幕坐标系相似,不同的是该坐标系以(屏幕)桌面的左上角为(0,0)点,右下角为(Screen.width,Screen.height,Screen.currentResolution)。用SetCursorPos设置鼠标坐标。获取鼠标坐标:GetCursorPos()。
C#中:
命名空间 using System.Runtime.InteropServices;
导入库[DllImport(“user32.dll”,EntryPoin = “GetCursorPos”)] 函数原型 public static extern bool GetCursorPos(ref LPPOINT lpPoint);
参数说明 ref LPPOINT lpPoint,LPPOINT为结构体类型,该结构体接收光标的屏幕坐标
返回值:布尔值
9、 相机视口 Var r:Rect=camera.pixelRect;//相机像素矩形
第十一章 多人网络游戏基础
1. 网络可以理解为是两台或多台计算机之间的通信,通常的表现是客户端(发送请求的计算机)与服务器(响应请求的计算机)之间的交互。服务器可以是一个独立的主机用于响应所有的客户端请求;也可以是某个玩家在作为客户端的同时,还提供了服务器的功能来响应其他玩家的请求。只要服务器和客户端之间建立了连接,就可以相互传递游戏数据
2. 授权服务器与非授权服务器
授权服务器承担着对整个游戏世界的模拟运算、所有游戏的规则运用,以及处理客户端用户的输入,将每—台客户端的输入信息(包括键盘键值码或是函数调用等)发送到服务器端,
并旦持续从服务器接收游戏当前的状态。
非授权服务器并不控制客户端各个用户的输入与输出。客户端本身来处理玩家的输入和本地客户端的游戏逻辑,然后发送确定的行为结果给服务器端,服务器同步这些操作的状态到游戏世界中。服务器端只是给客户端转发了状态消息 , 并不对客户端做更多的处理 非授权服务器案例:
1)客户端
using UnityEngine;
using System.Collections;
public class client : MonoBehaviour {
private string roip = \请输入要连接的服务器IP\private int lport = 10000; private bool usenat = false; void OnGUI(){ switch(Network.peerType){ }
case NetworkPeerType.Disconnected: Startconnect(); break; case NetworkPeerType.Client: Clientto(); break;
case NetworkPeerType.Connecting: Debug.Log(\连接中。。。\ break; }
void Startconnect(){ //获得输入框里的内容 roip = GUILayout.TextField(roip);
if(GUILayout.Button(\连接服务器\ NetworkConnectionError
error
=
Network.Connect(roip,lport,\
Debug.Log(error);
}
}
void Clientto(){
//提示信息连接成功
GUILayout.Label(\成功连接到服务器!\
}
//连接成功后系统自动调用函数---是否连接成功是系统自动判断的
void OnConnectedToServer(){ //通过循环形式遍历对象内的所有子对象,找到游戏物体的函数。go是游戏类型的变量存放寻找GamObject的类型
foreach(GameObject go in FindObjectsOfType(typeof(GameObject))){
//调用找到游戏物体上的函数OnNetworkLoaded,参数1:在游戏对象中创建脚本此函数。函数完成的功能是自己定义
//参数2:如果没有找到参数1的函数就不执行
go.SendMessage(\ } }
2)服务器 using UnityEngine; using System.Collections;
public class server : MonoBehaviour {
//定义远程连接IP地址
private string roip = \//定义远程端口号
private int rport=10000;
//设置服务器最多可以连接多少个客户端---限制连接数量为15个用户 private int concount=15;
//控制使用usenat?Usenat:网络地址转换器 private bool usenat = false;
void OnGUI(){
//标识网络状态信息的值 switch(Network.peerType){
//服务器未开启时,开启服务器 case NetworkPeerType.Disconnected: StartServer(); break;
//成功连接服务器
case NetworkPeerType.Server: Onserver(); break; //尝试连接
case NetworkPeerType.Connecting: }
break;
}
}
void StartServer(){
//在哪个电脑上创建服务器,服务器的网址就是那个电脑的 roip = GUI.TextField(new Rect(10,50,100,30),roip);
if(GUI.Button (new Rect(10,90,100,30),\创建服务器\
//当点击创建服务器时创建服务器密码
Network.incomingPassword=\ //NetworkConnectionError:数据类型,启动服务器代码 //Network.InitializeServer(); //参数1:服务器允许最大客户端,参数2:服务器监听本地端口号
error
=
NetworkConnectionError Network.InitializeServer(concount,rport,usenat);
}
void Onserver(){ }
}
Debug.Log(error);
//显示一个标签
GUILayout.Label(\创建服务器成功!等待连接!!!\//获得服务器的ip地址
string ip = Network.player.ipAddress; //服务器监听的端口号
int port = Network.player.port; //显示服务器的ip和端口号
GUILayout.Label(\地址:\端口号:\//连接的数组
int connectlength = Network.connections.Length; for(int i = 0;i < connectlength;i++){ GUILayout.Label(\连接的IP:\ GUILayout.Label(\连接的端口:\}
if(GUI.Button(new Rect(10,340,100,30),\断开连接\ }
//200秒内服务器无反应则关闭服务器 Network.Disconnect(200);
}
代码中用Network.peerType判断服务器与客户端的状态,该状态包括了是否开启服务器、客户端与服务器是否完成连接等。当服务器处于未开启状态时,使用Network调用incoimgPassword设置服务器密码,客户端要连接服务器,必须设置此值,调用InitializeServer函数进行开启。该函数存在3个参数:参数1:限制连接的客户端数量,参数2:创建的端口号,参数3:是否开启网络地址转换器
3)客户端:
using UnityEngine;
using System.Collections;
public class client : MonoBehaviour { private string roip = \请输入要连接的服务器IP\