Unity笔记- 狗刨学习网 - 图文 下载本文

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\