Unity3D腳本中文系列教程(八)

◆ static var matrix : Matrix4x4web


描述:設置用於渲染全部gizmos的矩陣。spring


類方法c#


◆ Static function DrawCube(center:Vector3,size:Vector3):voidapi


描述:用center和size繪製一個立方體.
function OnDrawGizmosSelected()數組

{
        //在變換位置處繪製一個變透明的藍色立方體
        Gizmos.color=Color(1,0,0,5);
        Gizmos.DrawCube(transform.position,Vector3(1,1,1));
}安全


◆ Static function DrawGUITexture(screenRect:Rect,texture:Texture,mat:Material=null):void服務器


描述:在屏幕座標下繪製一個紋理。用於GUI背景。網絡


◆ Static function DrawGUITexture(screenRect:Rect,texture:Texture,leftBorder:int,rightBorder:int,topBorder:int,bottomBorder:int,mat:Material=null):void數據結構


描述:在屏幕座標下繪製一個紋理。用於GUI背景。app


◆ Static function Drawicon(center:Vector3,name:string):void
描述:在世界位置center處繪製一個圖標.
這個圖標被命名爲name並放置在Assets/Gizmos文件夾或Unity.app/Resoutces文件夾.DrawIcon容許你在遊戲中快速選擇重要的物體。
//在物體位置處繪製光源燈泡圖標.
//由於咱們在OnDrawGizmos函數內部調用它,在場景視圖中
//這個圖標老是可點選的.
function OnDrawGizmos()

{
     Gizmos DrawIcon(transform.position,」Light Gizmo.tiff」);
}


◆ Static function DrawLine(from:Vector3,to:Vector3):void


描述:繪製一條線從from到to.
Var Larget:Transform;
function OnDrawGizmosSelected()

{
        if(target != null)
        {
              //從transform到target繪製一條藍色的線
              Gizmos.color = Color.blue;
              Gizmos.DrawLine(transform.position,target.position);
        }
}


◆ static function DrawRay(r:Ray):void
static function DrawRay(from:Vector3,direction:Vector3):void
描述:繪製一個射線從from開始到from + direction.


 function OnDrawGizmosSelected()

{
    Gizmos.color = Color.red;
    Direction = transform.TransformDirection(Vector3.forward)*5;
    Gizmos.DrawRay(transform.positon,direction);
}


◆ Static function DrawSphere(center:Vector3,radius:flont):void


描述:用center和randins繪製一個球體.
Function OnDrawGizmosSelected()

{
      //在變換位置處繪製一個黃色的球體
      Gizmos.color = Color.yellow;
      Gizmos.DrawSphere(transtorm.position,1);
}


◆ Static function DrawWireCube(center:Vector3, size: Vector3):void


描述:用center和radius繪製一個線框立方體.
Function OnDrawGizmosSelected(){
     //在變換位置處繪製一個黃色立方體
     Gizmos.color = Color.yellow;
     Gizmos.DrawWireCube (transtorm.position, Vector3(1,1,1));
}


◆ Static function DrawWireSphere(center:Vector3,radius:float):void


描述:用center和radius繪製一個線框球體.
Var explosionRadius = 5.0;
Function OnDrawGizmosSelected()

{
     //選中的時候顯示爆炸路徑

     Gizmos.color = Color.white;
     Gizmos.DrawSphere(transtorm.position,explpsionRadius);
}


Graphics    類


  Unity繪製函數的原始接口。
  這個是高級快捷地進去Unity優化網格繪製的地方。只限於Unity Pro.


類方法


◆  static function DrawMesh(mesh:Mesh, position: Vector3, rotation: Quaternion, material: Material, layer: int, camera: Camera=null, submeshIndex: int, properties: MaterialPropertyBlock=null): void

◆  static function DrawMesh(mesh:Mesh,matrix:Matrix4x4,material:Material,layer:int,
camera:Camera = null,submeshIndex:int,properties:MaterialPropertyBlock=null):
void


參數


mesh                    用於繪製的Mesh.
position                 網格的位置。
rotation                 網格的旋轉。
matrix                   網格的變換矩陣(由位置,旋轉和變換x組合)
material                 使用的Material.
layer                      使用的Layer.
Camera                   若是是null(缺省),該網格將在全部相機中被繪製,不然它將只會在給定的相機中渲染。
submeshIndex                 那個子網格被渲染。這只是在網格使用了多個材質的時候使用。
Properties                        在網格繪製前應用到才子的額外材質屬性。參考MaterialPropertyBlock.


描述:繪製一個網格
DrawMesh     在一幀中繪製一個網格。這個網格將受到光照的影響,能夠投射接收陰影並被投射器影響。就像它是某個物體的一部分。他能夠繪製於全部相機,或者只是特定的一些相機
 在你想建立人景的網格,而又不想過多的建立和管理遊戲物體的時候使用DrawMesh.注意,DrawMesh不會當即繪製網格;它僅僅提交它用於渲染。網格將被做爲普通渲染過程的一部分。若是想當即繪製一個網格。使用Graphics.DrawMeshNow。
由於DrawMesh不會當即繪製網格,在調用這個函數之間修改材質屬性並會使材質使用它們。若是你想繪製一系列相同材質的網格,可是稍微有些不一樣的屬性(例如,改變每一個網格的顏色),那麼使用MaterialPropertyBlock參數。
參見:MateralPropertyBlock.


◆  Static  function DrawMeshNow(mesh:Mesh,position:Vector3,rotation:Quatemion):void


描述:在給定的position,用給定的rotation繪製一個mesh。
這個函數將設置模型視矩陣並繪製網絡。當前設置材質的pass能夠被使用(參考Setpass)


◆  Static function DrawMeshNow(mesh:Mesh,position:Vector3,rotation:Quatemion,materallndex:int):void
描述:在給定的position,用給定的rotation和一個materialIndex繪製一個mesh.


◆  Static function  DrawMeshNow(mesh:Mesh,matrx:Matrix4x4):void


描述:用給定的matrix繪製一個mesh.
若是這個矩陣有一個負的縮放這個函數將不會正確渲染物體。


◆  Static function DrawMeshNow(mesh:Mesh,matrx:Matrix4x4,materialIndex:int):void


描述:用給定的matrix和materialIndex繪製一個mesh.
若是這個矩陣有一個負的縮放這個函數將不會正確渲染物體。


◆  Static function DrawTexture(screenRect:Rect,texture:Texture,mat:Material = null):void


描述:在屏幕座標下繪製一個紋理。


◆  Static function DrawTexture(screenRect:Rect,texture:Texture,leftBorder:int,rughtBord:int,topBorder:int,bottomBorder:int,mat:Material=null):void
描述:在屏幕座標下繪製一個紋理。


◆  Static function DrawTexture(screenRect:Rect,texture:Texture,sourceRect:Rect,leftBorder:int,rughtBord:int,topBorder:int,bottomBorder:int,mat:Material=null):void
描述:在屏幕座標下繪製一個紋理


◆  static function DrawTexture(screenReet:Rect,texture:Texture,sourceRect:Rect,leftBordr:int.rightBrder:int.topBorder:int,bottomBorder:int,color:Bolor,mat:Material=null):void
描述:在屏幕座標下繪製一個紋理。


Hashtable  類


函數


◆  function Add(key:Object, value:Object):void


描述:添加指定的鍵和值到哈希表。


◆  function Clear():void


描述:數量被設置爲0,而且從該集合中元素到其餘對象的引用也將被釋放,容量沒有改變。///這個方法是O(n)操做,這裏n是元素數量。
◆  function Contains(key:object):bool
描述:決定該哈希表中是否包含指定的鍵。
◆  function ContainsKey (key:object):bool
描述:從哈希表中移除指定鍵的元素。
◆  function Remove(key:object):void
描述:從哈希表中移除指定鍵的元素。
HostData

這個是用來保存單個主機信息的數據結構。
從master服務器取回的主機列表,使用這個類表示單個主機。
變量
◆  var comment:string
描述:一個多用途的註釋(能夠保存數據)

◆  var conneetedfPlaycrs:int
描述:當前鏈接的玩家
◆  var gameName:stting
描述:遊戲的名稱(像John Doe's Game)
◆  var gameType:string
描述:遊戲類型(像MyUniqueGameType)
◆  var ip:string[]
描述:服務器IP地址
◆  var passwordProtected:bool
描述:服務器須要密碼嗎?
◆  var playerLimit:int
描述:最大玩家限制
◆  var port:int
描述:服務器端口
◆  var nseNat:bool
描述:這個服務器須要NAT穿透嗎?
input

到輸入系統的接口。
使用這個類讀取在Input Manager中設置的軸。
使用Input.GetAxis用下面的缺省軸讀取軸心:"Horizontal"和"Vertical"被映射到搖桿,A,W,S,D和方向鍵,"Mouse X"和"Mouse Y"被映射到鼠標添量,"Fire1","Fine2","Fine3"映射到Ctrl,Alt,Cmd鍵和鼠標的三鍵或腰桿按鈕。新的輸入軸能夠在Input Manager中添加。
若是你在爲任何一種運動行爲使用輸入,那麼使用Inpur.GetAxis。它給你一種平滑的可配置的輸入,這個輸入能夠被映射到鍵盤,搖桿或鼠標。
使用Input.GetButton用於像事件同樣的行爲,不要將它用於移動,Input.GetAxis將使腳本代碼更小更簡單。
類變量
◆  static var anyKey:bool
描述:當前按住了任何鍵或鼠標按鈕嗎?(讀取)
◆  static var anyKeyDown:bool
描述:用戶按下任何鍵或鼠標按鈕返回(Rend Only)。直到用戶釋放所用鍵/按鈕並再次接下任何鍵/按鈕時才返回真。
◆ static var input: String
描述:返回這一幀中鍵盤的輸入(只讀)。
只有ASCII能夠包含在inputString中。
該字符串能夠包含兩個能被處理的特殊字符:字符「\b」表明退格。
*符"\n"表示回車。
//顯示如何從鍵盤讀取輸入
//(例如,用戶輸入它的名字)。
//你須要附加這個腳本到一個GUTText物體。function Updarc(){
for (var c;char in Input inputString){
//退格,移除最後一個字符
if(c=="\b") {
iftguiText.Lcngth.text.Substring(0,guiText.text Length-1);
}
//結束
efse if (e=="\n"){
prinr("Uscr cntered his name:"+guiText,text);
}
//正常的文本輸入.附加到尾部
elsc
}
guiText.text+=c;
}
}
}
◆  static var mousePosition:Vcctor3
描述:當前鼠標在像素座標下的位置。
屏幕或窗體的左下爲(0,0),屏幕或窗體的左上爲(Screen.width,Screen.height).
var particle:GamcObject,
function Update() {
if (lnput,GctButtonDown{"Firel")){
//從當前鼠標座標處建立一個射線
var ray=Camera.main.ScreenPointToRay(Input mousePositicn);
if{Physics.Raycast(ray)) {
//若是碰到建立一個粒子
Instontiatc(particlc,transfonn.position,transfonn.rotation);
}
}
}
類方法
◆  static function CetAxis(axinName:string):float
描述:設置由axinName確實虛擬軸的值。
對於鍵盤和搖桿輸入,這個值將在-1...1。
一個很是簡單的行駛在x-z平面的汽車。
var spced=10.0;
var cotatinnSpeed=100.0;
function update()
}
//獲取水平和垂直軸,
//默認滴它們被映射到方向鍵
//這個值的範圍在-1到1
var transtation=loput.getaxis("vertical")*spccd;
var rotation=inpul getaxis ("horizontal"*rotarionspeed)
//使它以10米/秒速度移動而不是10米/幀
translation*=time delta time
//沿着物體的Z軸移動變換
transtorm.transtate(1010translation);
//繞着Y軸旋轉
transform.rotate(0.rotation.0);
}
//指定一個鼠標查看
var horizontalspccd=2.0;
var verticelspeed=2.0
function update()
{
獲取鼠標增量,這個沒有在範圍-1...1之間
var h=horizontalspeed*inpul.getaxis("mouse X");
var v=verticalspeed*input.getaxis("mouse Y");
transform.rotate(v.h.0);
}
◆static function getaxisraw(axisname:string):float
描述:設置由axisname肯定虛擬軸的值,而且沒有使用平滑過濾,
對於鍵盤和搖桿輸入,這個值將在-1...1的範圍內。由於輸入沒有被平滑,
老是-1,0或1.若是你想本身處理全部鍵盤輸入的平滑,這個是頗有用的。
function update(){
var speed=input.getaxisraw("horizoatal"*time deta time);
transform rotate(0.speed.0);
}
◆static function getbutton(button name:string):bool
描述:當時由button name 肯定的虛按鈕被按住時返回真。
考慮自動開火-這個將在按鈕被按住時一直返回真。
//若是每0.5秒實例化一個projcctile,
//若是firel按鈕(默認爲Ctrl)被按下
var projectile : GameObject;
var fireRate : float = 0.5;
private var nextFire : float = 0.0;


function Update ()

{
     if (Input.GetButton ("Fire1") &&  Time.time > nextFire)

     {
         nextFire = Time.time + fireRate;
         var clone : GameObject =
         Instantiate(projectile, transform.position, transform.rotation) as GameObject;
     }
}

只有使用這個實現事件行爲例如,射擊,使用input.getaxis 用於任意類型的移動行爲
◆static function getbuttondown(button name:steing):bool
描述:當由:button name 肯定的虛擬按鈕被按下時返回真。
知道用戶釋放並再次按下時返回真。
//當用戶按下firel按鈕時實黎化一個projcctile
var projectile:gameobject;
function update(){
if(input getbution down("firel")){
elone=instantiate(projectile,transforrn,position.transforn.rotinon);
}
}
只使用這個實現事件行爲例如,射擊,使用lnput.GetAxis用於任意類型的移動行爲。
◆  static function GetButton Up(buttonName:string):bool
描述:當由buttonName肯定的虛擬按鈕被釋放時返回真.
直到用戶按下按鈕並再次鬆開時返回真。
//當用戶按下Fire;按鈕時實例化一個projectile.
var projectile:GameObject;
function Update O;
if(lnput GetButtonUp("Firel")){
clcne=lnstantiate{projectile,transtorm.position,transform.rotation);
  }
}
只使用這個實現事件行爲例如,射擊。使用lnput.GetAXis用於任意類型的移動行爲,
◆  static funcrion GetKey(name:string):bool
描述:當用戶按住由name肯定的鍵時返回真,考慮自動開火。
鍵標識列表參考輸入管理器。在處理輸入時建議使用lnput.GetAxis和lnput.GetButton
由於它容許端用戶定義這些鍵.
funcrion Update(){
if(lnput.GetKey("up")){
   print("up arrow key is held down");
}
if(lnput.GetKey("down"))
}
   print("down arrow key is held down");
  }
}
◆  static junction GetKey(key:keyGode):bool
描述:當用戶按住由key KeyCode枚舉參數肯定的鍵時返回真.
funcrion Update(){
if(lnput.GetKey(KeyCode.UpArrow))}
   print("up arrow key is held down");
}
if(lnput.GetKey(KeyCode.DownArrow)){
   print("down arrow key is held down");
   }
}
◆  static function GetkeyDown(name:string):bool
描述:當用戶開始按下由name確的鍵時返回真.
直到用戶釋放按鈕並再次按下時返回真.
鍵標示列表參考lnput Manager.在處理輸入時建議使用lnput.GetAxis和Input.GetBUtton
function Update();
if(input GetkeyDown("space"))
   print("space key was pressed");
  }
}
static function GetKeyDown(Key:KeyCode):bool
描述:當用戶按下由Key KeyCode枚舉參數肯定的鍵時返回真.
function Update();
 if{lnput GetKeyDown(KeyCode.Space))
print("space key was pressed");
}
}
◆  static function GetKeyUp(name:sting):bool
描述:當用戶釋放由name肯定的鍵時返向真.
直到用戶按下按鈕並再次鬆開時返向真。
鍵標示列表參考lntpot Manager.在處理輸入時建議使用lnput.GetAxis和lnput.GetButton
由於它容許端用戶定義這些鍵.
function Update();{
if(lnput.GetKeyUp("space");
  }
}
◆  static function GetKeyUP(Key:KeyCode):bool
描述:當用戶釋放由Key KeyCde 校舉參數肯定的鍵時返回真.
function Update(){
if(lnput,GetKeyUp(KeyCode.Space));
  print("space key was feleased");
  }
}
◆  statie function GetMouseButton(button:int):bool
描述:返回給定的鼠標按鈕是否被按住。
/button/值爲0表示左鍵,1表示右鍵,2表示中鍵.
◆  statie function GetMouseButtonDown(button:int)bool
描述:用戶按下給定的鼠標按鈕時返回真.
直到用戶釋放按鈕並再次按下它時才返回真.button值爲0表示中鍵左鍵,1表示右鍵,2表示中鍵.
◆  statie function GetMouseButtonUp(button:int)bool
描述:用戶釋放給定的鼠標按鈕時返回真.
直到用戶釋放按鈕並再次釋放它時才返回真.button值爲0表示中鍵左鍵,1表示右鍵,2表示中鍵.
◆  statie function ResetlnputAxes();Void
描述:重置全部輸入。在ReaetlnputAxes以後全部軸將返回0而且全部按鈕返回0.
這可用於當重生玩家,而且當你不想任何來自鍵盤的輸入還處於按下時。
lnpu.ReaetlnputAxes();
jointDrive
結構
關節如何沿着本地X軸移動
變量
◆  var maximumForce:float
描述:用於向指定的方向推進物體的力的量。僅在Mode包含Velocity時使用。
◆  var mode:jointDriveMode
描述:驅動是否嘗試到這個位置和/或速度.
◆  var positionDamper:float
描述:位置彈簧的阻力強度,只用於mode包含位置的時候.
◆  var positionSpring:float
描述:朝着定義的方向推進的一個阻力強度。只用於mode包含位置的時候.
Jointlimits
結構
jointlimits被Hingejoint使用來限制關節角度.
參見:Hingejoint
變量
◆  var max:float
描述:關節的上限。當關節角度或位置的上限。
關節將使用力來約束它。
//設置最小連接角度爲20度
hingejoint.limits.max=40;
◆  var maxBounce:float
描述:當關節碰到關節的上限時關節的彈力。
//設置關節反彈時的上限
hingejoint.limits.maxBounce=1;
◆  var min:float
描述:關節的下限。當關節角度或位置的下限。
關節將使用力來約束它。
//設置最小連接角度爲20度
hingejoint.limits.min=20;
◆  var minBounce:float
描述:當關節碰到關節的下限時關節的彈力。
 //關節反彈時的下限
hingejoint.limits.minBounce=1;
jointMotor
結構
jointMotor用來旋轉一個關節
例如:Hingejoint能夠被告知以制定的速度和力旋轉。關節而後用給定的最大力試圖到達這個速度,參見:
變量
◆  var force:float
描述:動力將應用最大爲force的力以便取得targetvelocity
◆  var freeSpin:bool
描述:若是freeSpin被啓用動力將只加速而不會減速
◆  var targetvelocity:float
描述:動力將應用最大爲force的力以便取得targetvelocity
Jointspring
結構
變量
◆  var damper:float
描述:用語阻尼彈簧的阻尼力。
◆  var spring:float
描述:用於達到目標位置的彈力
◆  var targetposition:float
描述:關節試圖到達的目的位置
這裏一個hingehoint目標位置是目標角度
Keyframe
結構
一個關鍵幀它能夠插入動畫的曲線
變量
◆  var in tangent:float
描述:在曲線上從下一個點到這個點時描述切線。
參加:outtangent
◆  var outtangent:float
描述:在曲線上從這個點到下一個點時描述切線。
參見:intangent
◆  var time:float
描述:關鍵幀時間
在一個2D圖形中,你能夠把這當作x值
參見:value
◆  var value:float
描述:該動畫曲線在關鍵幀處的值
參見:time
構造函數
◆  static function keyframe(time:float,value:float):keyfranie
描述:建立一個關鍵幀
◆  static function keyframe(time:float,value:float,intangent:float,outangent:float):keyframe
描述:建立一個關鍵幀
layermask
結構
layermask容許你在檢視面板中顯示layermask彈出菜單
相似與camera,cullingmask。layermasks 能夠選擇性地過濾物體,例如當投射射線,
//使用層蒙板投射一個射線
//它能夠在檢視面板中修改
var mask larermask=
function Update(){
if(Physics.Raycast(transform.position, transform.forward, 100, mask.value))
{
Debug.Log(「Hit something」;
}
}
變量
◆  var valuc:vin
描述:轉化層蒙板的值爲一個整形值
//使用層蒙板投射一個射線
//它能夠在檢視面板中修改
var mask:lnyermask=-1
fonction update(){
if{physics.rayeast(transforn.position.transform.forwatd.100.mask.value))
{
Debug
}
}
類方法
◆  static function LayerToName(layer :in):string
描述:給定一個層的數字。返回內置的或在tag Maneger中定義的層名稱。
◆  static function NameToLayer(layerName :string):int
描述:給定一個層的名字。返回內置的或在tag Maneger中定義的層索引。
◆  static implicit function LayerMask(intva1:int):layermask
描述:隱式轉化一個整數位已個層蒙板
Lightmapdata

光照貼圖數據
一個場景能夠有多個光照貼圖儲存在這裏,renderer組建可使用這些光照貼圖,這就使得它可以在多個物體上使用相同的材質,而每一個物體可使用不一樣的光照貼圖或同一個光照貼圖的不一樣部分。
參見,linghrmapsettings類 renderer lightmapindex 屬性
變量
◆  var lightmap:texture2D
描述:光照貼圖的紋理
參見:lightmspsettings 類 renderer lighunaplndex屬性
linghtmapsettings

儲存這個場景的光照圖
一個場景能夠有多個光照貼圖儲存在這裏,renderer組件可使用這些光照貼圖,這就使得它可以在多個物體上使用相同的材質,而每一個物體可使用不一樣的光照貼圖或同一個光照貼圖的不一樣部分。
參見:lightmapdata類renderer.lightmaplndex屬性
類變量
◆  sartic var lightmaps:lightmapdata[]
描述:光照貼圖數組
參見:lightmapdata類renderer.lightmaplndex屬性。
Masterserver
類,主服務器用來使服務器和客服端匹配。
你能夠創建以個遊戲主機或爲你的遊戲類型取回主機列表。這裏的這個函數用來與主服務器通訊,主服務器位於不一樣的服務器上,若是必要這個服務器能夠被定製,主服務器的概覽和技術描述:參見master server manual page
類變量
◆  static var dedicatedserver:bool
描述:申明這臺機器爲專用服務器。
若是做爲一個服務器運行,鏈接數定義了玩家的數量,當在主服務器上註冊的時候這個被報告,默認狀況下主服務器假定這個實例不是專用服務器,所以玩家數會增長1(佔用服務器上的一個\「chent」\)若是不但願,這個變量能夠設置爲假,而後知有鏈接數被報告爲玩家數。
function startserver{}{
nerwork lnitializeserver(32.25002):
masrerserver.dedicatedserver=true;
masterserver.registerhost("myuniquegametype","johndoes game","133tgame for all");
}
◆static var ip address:string
描述:主服務器的IP地址。
默認地這個是由unity技術運行的服務器。
function
masterserver ip address="127.0.0.1";
master server.port=10002;
}
◆static var port:int
描述:主服務器的連接端口。
默認地這個是由unity技術雲頂的服務器,
masterserver.ipaddress="127.0.0.1";
master server.port=100021;
}
◆static var updaterate:int
描述:爲主服務器主機信息更新設置最小更新速率。
一般,主機更新只在主機信息被改變的時候發生(如鏈接的玩家)。更新率定義了主機更新之間的最小時間量,缺省值爲60秒(檢查更新)所以,若是以個主機更新唄發送而後一些域在10秒後改變,而後更新可能會在50秒以後發送(在下一次檢查到改變的時候)。若是這個被設置爲0,之後就沒有更新被髮送,只發送初始註冊信息。
function startserver()
{
network lnitialigeserver(32.25002);
//在初始化註冊以後沒有主機信息更新
Masterserver.updaterate=0;
masterserver,registerhost("myuniquegametype","johndoes game","133tgame forall");
}
類方法
◆static function clearhostlist():void
描述:清楚由masterserver.pollhostlist接收到的主機列表。
若是你想更新列表並想確保你不使用較舊的數據時,使用這個,
function awakc()
{
//確保類表是空的並請求一個新的列表
masterserver clearhostlist();
masterserver.requesthostlist("myuniquegametype");
}
function lpdate()
{
//若是任何主機被接收,顯示遊戲名稱,再次清理主機列表,}
if(masterserver.pollhostlist(),length!=0){
var hostdata;hostdata[]=masterserver.pollhostlist();
for(var i:int=0;i<hostdata.length;i++){
    debug,log("game name:"+hostdata[i]gamename);
}
masterserver,clearhostlist()
}
}
◆static function pollhostlist():hostdata[]
描述:使用master server.requeshostlist接收最新的主機列表
使用masterserver.clearhostlist清理當前主機列表。這樣你能夠肯定返回的列表時最新的。
  function awaket(){
//確保列表時空的並請求一個新的列表
masterserver .clearhostlist();
masterserver.requesrhostlist("larustest"):
;
function update()
;
//若是任何主機被接收,顯示遊戲名稱,再次清理主機列表;
if(masterserver.pollhostlist()length!=0){
varhostdata hostdata[]=masterserver.pollhostlist();
for(var i:int=0;i<hostdata.length;i++){
debug.log("game name"+hostdata[i].gamename);
}
masterserver.clearhostlist()
}
◆static function registerhost(gametypename:string,gamename:string.comment:string=""):void
描述:在主服務器註冊這個服務器。
若是主服務器地址信息還沒有改變,缺省的主服務器將被使用。
function ongui()
{
if(guilayout.button("stnrt server")){
//若是沒有公有IP地址,使用NAT穿透
network。usenat=!network.havepublicaddrss();
network.lnitializeserver(32.25002);
masterserver.registerhost("myuniquegametype","johndoes game","133tgame for all");
}
}
◆static function RequestHosList(gameTypeName:string):void
描述:從主服務器請求一個主機列表。
當它完成的時候,這個列表能夠經過MasterServer.PollHcstList使用。
function Awakc(){
//確保列表時空的並請求一個新的列表
MastcrScrver.RequestHostList();
MastcrScrver.RequestHostList("LarusTcst");
}
function Update()
}
//若是任何主機被接收,顯示遊戲名稱,再次清理主機列表。
if(MastcrScrvcr.PollHcstLisx().length!=0)}
var hostData:HostData[]=MasterSer.pollHostList();
for (var i:int=();i<hostData.length;i++){
Debug.Log("Game namc;"+hostData[i].gamceName);
}
MastcrScrvcr.ClearHostList();
}
}
static function UnregisterHost():void
描述:從主服務器註銷這個服務器。
若是服務器沒有被註銷或已經被註銷,不作任何事。
function OnGUt() {
if(GUILayout.Button("Disconnect")){
Nctwork,Disconnect();
NastcrServer.UnregisterHost();
}
}
MaterialPropertyBlock

應用的一塊材質值。
MateriaIPropcrtyBlock被Graphics.DrawMesh使用。當你想用相同的材質(但有稍微有些不一樣的屬性)繪製多個物體時,使用這個。例如,若是你想稍微改變每一個網絡的顏色時。
出於性能緣由,屬性塊只能包含有限數量的屬性值。兩個4x4矩陣,六個向量顏色或12個浮點數能夠存儲在這個塊中,存儲空間時共享,因此存儲一個矩陣留下兩倍少的空間來
 
存儲向量和浮點數。
Graphics。DrawMesh 拷貝傳遞的屬性塊,所以最有效的方法是使用它來建立一個快併爲全部DrawMesh 調用使用它。使用Clear來清除塊的值,AddFloat,AddVector,AddColot,AddMatrix來添加值。
參見:Graphics,DrawMesh,Matcrial。
函數
◆  function AddColor(name:string,value:Colo):void

◆  function AddColor(nameID:int,value:Colo):void

描述:添加一個顏色材質屬性。
出於性能緣由,屬性塊只能包含有限量的屬性值。兩個4x4矩陣,六個向量/顏色或12個浮點數能夠存儲在這個塊中。存儲空間時共享,使用存儲一個矩陣留下兩個倍少的空間來存儲向量和浮點數。當塊的存儲空間填滿後,額外的Add調用將被忽略。
使用nameID的函數變量體更快,若是你重複添加相同名稱的屬性,使用Shader.propertyToID來獲取不一樣的標示,並傳遞這個標示到AddColor。
◆  function AddFloat(name:string,value:float):void
◆  function AddFloat(nameID:int,value:float):void
描述:添加一個浮點材質屬性。
出於性能緣由,屬性塊只能包含有限數量的屬性值。兩個4x4矩形,六個向量/顏色或存12個浮點數能夠存儲在這個塊中,存儲空間是共享,因此存儲一個矩陣留下兩倍少的空間來存儲向量和浮點數。當塊的存儲空間填滿後,額外的Add調用將被忽略。
使用nameID的函數變體更快,若是你重複添加相同名稱的屬性,使用Shader.PropertyToID來獲取不一樣的標示,並傳遞這個標示到AddFloat。
◆  function AddMatrix(name:string,value:Matrix4x4):void
◆  function AddMatrix(nameID:int,value:Matrix4x4):void

描述:添加一個矩陣材質屬性。
處於性能緣由,屬性塊只能包含有限數量的屬性值。兩個4x4矩陣,六個向量/顏色或12個浮點數能夠存儲在這個塊中。存儲空間時共享,因此存儲一個矩陣留下兩倍少的空間來存儲向量和浮點數。當塊的存儲空間填滿後,額外的Add調用將被忽略。
使用nameID的函數變體更快,若是你重複添加相同名稱的屬性,使用Shader.PropertyToID來獲取不一樣的標示,並傳遞這個標示到AddMatrix。
◆  function AddVector(name:string,value:Vector4):void
◆  function AddVector(nameID:int,value:Vector4):void
描述:添加一個向量材質屬性。
出於性能緣由,屬性塊只能包含有限數量的屬性值。兩個4x4矩陣,六個向量/顏色或12個浮點數能夠存儲在這個塊中。存儲空間是共享,因此存儲一個矩陣留下兩倍少的空間來存儲向量和浮點數。當塊的存儲空間填滿後,額外的Add調用將被忽略。
使用nameID的函數變體更快,若是你重複添加相同名稱的屬性,使用
Shader.ProrertyToLD來獲取不一樣的標示,並傳遞這個標示到AddVector。
◆  function Clear():void
描述,清除材質屬性值。
GrawMesh 拷貝傳遞的屬性塊,所以最有效的方式是使用它來建立一個塊併爲
全部DrawMesh調用使用它。使用Clear來清除塊的值,ADDFloat,AddVector,AddColor,AddMatrix來添加值.
Mathf
結構
經常使用數學函數的集合。
類變量
 ◆  static var Deg2Rad:float
 描述:度到弧度的轉化常量(只讀)。
 這個等於(PI*2)/360.
//轉化30度爲弧度
var deg=30.0;
var od=dcg*Mathf.Deg2Rad;
參見:Rad2Deg常量。
◆  static varEpsilon:float
描述:一個小的浮點數值(只讀)
比較小於它的值沒有多人意見,由於浮點數是不精確的。
print(MathfEpsilon);
◆  static var Infinity:float
描述:表示正無窮(只讀).
◆  static var NegativeIntinity:float
描述:表示負無窮(只讀).
◆  staic var PI:float
描述:3.14159265358979...值(只讀).
◆  static var Rad2deg:float
描述:弧度到度的轉化常量(只讀).
這個等於360、(PI*2).
 轉化1弧度爲度
var rad=1.0;
var deg=rad*Mathf.Rad2Deg.
參見:Deg2Rad常量
類方法
◆  staric function Abs(f:float):float
描述:返回f的絕對值。
//打印10.5
print(Mathf.Abs(-10.5)).
◆  staric function Abs(value:int):int
描述:返回value的絕對值。
//打印10
print(Mathf.Abs(-10));
◆  staric function Acos(f:float):float
描述:返回f的反餘弦_一個弧度角它的餘弦是f.
print(Mathf.AcOS(0.5);
◆  staric function Approximately(a:float,b:float):bool
描述:比較兩個浮點數值看看它們是否近似。
因爲浮點數值不精確,不建議使用等操做來比較它們。例如,1.0==10.0/10.0也許不會返回真。
if(Mathf.Approximately(1.0,10.0/10.0))
print("same");
◆  static function Asin(f:float):float
描述:返回f的反正弦_一個弧度角它的正弦是f.
print(Matht.Asin(0.5));
◆  staric function Atan(f:float):float
描述:返回f的反切_一個弧度角它的正切是f.
print(Mathf.Atan(0.5));
◆  staic function Atan2(y:float,x:float):float
描述:返回一個弧度角它的Tan爲y/x。
返回的值是一個角度,該角表示x軸和開始於零並終結在(x,y)處的向量之間的角度。
//一般使用transform.lookAt.
//但這能夠給你更多的對角度的控制
vartatget:Transform;
function Update()
{
var relativ=transfom.lnverseTeansformPoint(target.position);
var angle=Mathf.Atan2(reative,reative.z)*Mathf.Rad2Deg;
transform.Rotate(0,angle,0);
}
◆  static function Ceil(f:fioat):float
描述:返回大於等於f的最小整數.
◆  static function CeilTolnt(f:fioat):int
描述:返回大於等於f的最小整數.
◆  static function Clamp(value:float,min:float,max:float):float
描述:在一個最小的浮點數和最大的浮點數之間截剪。
//隨着時間設置變換位置
//可是不會小於1或大於3
function Update()
{
transtorm,position.x=Mathf.Clamp(lime.time.1.0,3.0);
}
◆  staric function Clamp(value:int,min:int,max:int):int
描述:在min和max之間裁剪值並返回裁剪後的值。
//在1到3之間裁剪10,
//打印3到控制檯
prnt(Mathf.Clamp(10,1,3))
◆  static function Clamp01(value;float):float
描述:在0和1之間裁剪值並返回裁剪後的值。
//隨着時間設置變換位置
//可是不會小於0或大於1
function Update(){
transform.position.x=Mathf.Clamp01(Time.time);
}
◆  staic function ClosestPowerOflwo(value:int):int
描述:返回最直接的2的冪次值。
例如。7返回8或者19返回16
◆  staric function Cos(f:float):float
描述:返回弧度f的餘弦值.
print(Mathf.Cos(3));
◆  staic function EXP(power:float):float
描述:返回e的特定次冪。
print(Mathf.Cos(6));
◆  static function Floor(f:float):float
描述:返回小於f的最大整數.
◆  static function FloorTolnt(f:float):int
描述:返回小於f的最大整數.
◆  static function lnverseLerp(from:float,to:float,value:float):float
描述:在兩個值之間計算Lerp參數.
varwalkSpeed=5.0;
varunSpeed=10.0;
var speed=8.0;
//參數如今是3/5
vvar parameter=Mathf.laverseLerp(walkSpeed,runSpeed,speed);
◆  staic tunchon Lerp(a:float,b:float,t:float):float
描述:基本t在a到b之間插值。t本裁剪到0到1之間。
當t爲0時返回from . 當t爲1時返回to .當t=0.5時返回a和b的平均。
var minimum = 10.0;
var maximum = 20.0;
// 在一秒內從minimum漸變到maximum
Function Update()
{
transform.position.x = Mathf.lerp(minimum,maximum,Time.time);
}
◆ static function LerpAngle(a:float,b:float,t:float):float
描述:與Lerp相同,可是當它們可繞360度時確保插值正確,
變量a和b被認爲是度。
//以2爲底6的對數
//打印2.584963
print(Mathf.Log(6,2));
◆ static function Log(f:float):float
描述:返回一個數以天然(以e爲底)對數。
//10的天然對數
//打印4.60517
print(Mathf.Log(10));
◆ static function Log10(f:float):float
描述:返回一個數以10爲底的對數。
//以10爲底100的對數
//打印2
print(Mathf.Log10(100));
◆ static function Max(a:float,b:float):float
描述:返回兩個值中較大的一個。
//打印2
print(Mathf.Max(1,2));
◆ static function Max(a:int,b:int):int
描述:返回兩個值中較大的一個。
//打印2
print(Mathf.Max(1,2));
◆ static function Min(a:float,b:float):float
描述:返回兩個值中較小的一個。
//打印1
print(Mathf.Min(1,2));
◆ static function Min(a:int,b:int):int
描述:返回兩個值中較小的一個。
//打印1
print(Mathf.Min(1,2));
◆ static function PingPong(t:float,length:float):float 
描述:來回改變t值,t值不會超過length,也不會小於0,只會在length和0之間循環。
function Update()
{
//讓x位置在0到3之間循環
transform.position.x = Mahtf.PingPong(Time.time,3);
}
◆ static function Pow(f:float,p:float):float
描述:返回f的p次方。
print(Mahtf.Pow(6,1.8));
◆ static function Repeat(t:float,length:float):float
描述:使t值循環,不大於length不小於0。它與操做模板相似,但可使用浮點數。
function Update()
{
//讓x位置在0到3之間循環
transform.position.x = Mahtf.Repeat(Time.time,3);
}
◆ static function Sign(f:float):float
描述:返回f的符號。
當f爲正或爲0則返回1,爲負返回-1。
◆ static function Sin(f:float):float
描述:返回以f爲弧度的sin值。
print(Mahtf.Sin(3));
◆ static function SmoothDamp(current:float,target:float,ref currentVelocity:float,smoothTime:float,maxSpeed:float = Mahtf.Infinity,deltaTime:float =Time.deltaTime):float
描述:逐步的向指望值變化。
這個值就像被一個不會崩潰的彈簧防震器所影響。這個函數能夠用來平滑任何類型的值,位置,顏色,標量。最經常使用於讓一個跟隨攝像機的速度變的平滑。
current就是當前位置。target是咱們但願達到的位置。currentVelocity是當前速度,這個值在你訪問這個函數的時候會被隨時修改。smoothTime是要到達目標位置的近似時間,實際到達目標時要快一些。maxSpeed可讓你隨意的設定最大速度。deltaTime是上次訪問該函
數到如今的時間。缺省爲Time.deltaTime。
//平滑到目標高度
var target : Transform;
var smoothTime = 0.3;
private var yVelocity = 0.0;
function Update ()
{
var newPosition = Mathf.SmoothDamp(transform.position.y, target.position.y,yVelocity, smoothTime);
transform.position.y = newPosition;
}
◆ Static function SmoothDampAngle(current: float, target: float, ref currentVelocity): float, smoothTime: float, maxSpeed: float=Mathf.Infinity, deltaTime: float=Time.deltaTime): float
描述: 基於Game Programming Gems4章節1.10
隨着時間逐漸的改變一個角度爲目的的角度。這個值被像彈簧阻尼同樣的函數平滑。這個函數能夠用來平滑任何一種值,位置,顏色,標量。最多見的是平滑一個跟隨攝像機。
current是當前位置。target是咱們試圖到達的位置。currentVelocity是當前速度,這個值在每次你調用這個函數的時候都被修改。smoothTime是到達目的地近似時間,實際的時間將更短。maxSpeed爲容許的最大速度。deltaTime爲從上次調用該函數到如今的時間。缺省爲Time.deltaTime。
//一個簡單的平滑跟隨攝像機。
//跟隨目標的朝向
var target : Transform;
var smooth = 0.3;
var distance = 5.0;
private var yVelocity = 0.0;
function Update ()
{
//從目前的y角度變換到目標y角度
var yAngle = Mathf.SmoothDampAngle(transform.eulerAngles.y,target.eulerAngles.y, yVelocity, smooth);
//target的位置
var position = target.position;
//而後,新角度以後的距離便宜
position += Quaternion.Euler(0, angle, 0) * Vector3 (0, 0, -distance);
//應用位置
transform.position = position;
//看向目標
transform.LookAt(target);
}
◆ static function SmoothStep (from : float, to : float, t : float) : float
描述:在min與max中插值並在限定處漸入漸出
◆ static function Sqrt (f : float) : float 
描述:返回f的平方根  
print(Mathf.Sqrt(10));
◆ static function Tan (f : float) : float 
描述:返回弧度f的正切值 
print(Mathf.Tan(0.5));
Matrix4x4
一個標準的4x4變換矩陣。
一個變換矩陣能夠執行任意的線形3D變換(例如,評議,旋轉,縮放,切邊等等)而且偷師變化使用齊次座標。腳本中不多使用矩陣:最經常使用Vector3,Quaternion,並且Transform類的功能更簡單。單純的矩陣用於特殊狀況,如設置非標準相機投影。
 參考任何圖形學教程獲取關於變換矩陣的深刻揭示。
 在Unity中,Matrix4x4被Transform,Camera,Material和GL函數使用。
變量
◆ var inverse : Matrix4x4
描述:返回該矩陣的逆(只讀)
若是用原始矩陣誠意逆矩陣結果爲identity矩陣。
若是一些矩陣以一個特定的方式變換響亮,逆矩陣能夠將他們變換回去。例如worldToLoclaMatrix和localToWorldMatrix是互逆的。
◆ var this[row : int,column : int]:float
描述:訪問[row,column]處的元素。
row和column必須在0到3之間,矩陣是一個4x4的數組,你能夠經過使用這個函數訪問單個的元素。
注意標準數學符號-row是第一個索引。
◆ var this[index : int]:float
描述:按順序索引存取元素(包括在0..15)
矩陣是一個4x4的數組,因此它的總數爲16,。你可使用一維索引來存取單個元素。index是row+column*4
◆ var transpose : Matrix4x4
描述:返回這個矩陣的轉置(只讀)。
轉置矩陣是將原矩陣行列交換獲得的(沿主對角線翻轉)
函數
◆ function GetColumn(i : int):Vector4
描述:獲取矩陣的一列。
第i列做爲Vector4返回,i必須在0到3之間。
參見:SetColumn
◆ function GetRow(i : int):Vector4
描述:返回矩陣的一行。
第i行做爲Vector4返回,i必須在0到3之間。
參見:SetRow
◆ function MultiplyPoint (v : Vector3):Vector3
描述:經過這個矩陣變換位置。
返回由任意矩陣變化獲得的位置v。若是這個矩陣是一個正規的3D變換矩陣,使用MultiplyPoint3x4比它更快。MultiplyPoint是較慢的,可是能處理投影變換。
參見:MultiplyPoint,MultiplyVector。
◆ function MultiplyPoint3x4(v : Vector3):Vector3
描述:經過這個矩陣變換位置(快)。
返回由當前變換矩陣變換獲得的位置v。這個函數是MultiplyPoint的快速版,可是它只能處理常規的3D變化。Multiplypoint是較慢的,可是能處理投影變換。
參見:MultiplyPoint,MultiplyVector。
◆ function MultiplyVector(v : Vector3):Vector3
描述:經過這個矩陣變換方向。
這個函數相似於MultiplyPoint,但它是變換方向而不是位置。變換方向時,只考慮矩陣的旋轉部分。
參見:MultiplyPoint,MultiplyPoint3x4。
◆ function SectColumn(i : int,v:vector4):void
描述:設置矩陣的一列。
使用這個來構建一個變換矩陣,這個矩陣使用right,up和forward向量。
//從變換構建一個矩陣
var matrix = Matrix4x4();
//從變換構建一個矩陣
function Start ()
{
matrix.SetColumn (0, transform.right);
matrix.SetColumn (1, transform.up);
matrix.SetColumn (2, transform.forward);
var p = transform.position;
matrix.SetColumn (3, Vector4 (p.x, p.y, p.z, 1));
}
//設置第i列爲v。i必須在0到3之間。
參見:GetColumn
◆ function SetRow(i : int,v:Vector4):void
描述:設置矩陣的一行。
設置第i行爲v。i必須在0到3之間。
參見:GetRow
◆ function SetTRS(pos : Vector3, q:Quaternon, s:Vector3):void
描述:設置這個矩陣爲一個變換,旋轉和縮放矩陣。
當前的矩陣本修改一遍具備位置pos,旋轉q和縮放s。
◆ function ToString():string
描述:返回已格式化的該矩陣的字符串。
類變量
◆ static var identity : Matrix4x4
描述:返回單位矩陣(只讀)。
這個矩陣在使用的時候不會影響任何東西。它的主對角線上全是1,其餘位置全是0。
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
參見:zero變量。

◆ static var zero : Matrix4x4
描述:返回全部元素都爲零的矩陣(只讀)。
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
參見:identity變量。
類方法
◆ static operator * (lhs : Matrix4x4,rhs : Matrix4x4) : Matrix4x4
描述:兩個矩陣相乘。
返回lhs * rhs。
◆ static operator * (lhs : Matrix4x4,v:Vector4):Vector4
描述:由矩陣來變換一個Vector4。
◆ static function Ortho(left : float,right : float,bottom : float,top : float,zNear : float,zFar : float):Matirx4x4
描述:建立一個正交投影矩陣。
返回的矩陣是視口ledt到right,bottom到top的區域,zNear和zFar深度裁剪面板。
若是你想使用正交來作像素修正渲染,最好使用GL.LoadPixelMatrix,由於它會爲Direct3D渲染器運用適當的half-texel便宜。
參見:GL.LoadPixelMatrix,GL.LoadProjectionMatrix,GUI.matrix
◆ static function Perspective(fov : float,aspect : float,zNear : float,zFar : float):Matrix4x4
描述:建立一個透視投影矩陣。
fov爲透視矩陣的垂直視野,aspect爲寬高比,zNear和zFar設置爲深度裁剪面板。
參見:GL.LoadPixelMatrix,GL.LoadProjectionMatrix,GUI.matrix
◆ static function Scale(v:Vector3):Matrix4x4
 描述:穿件一個縮放矩陣。
 返回沿着座標軸被響亮v縮放的矩陣,該矩陣看起來像這樣:
v x 0 0 0
0 v y 0 0
0 0 v z 0
0 0 0 1
◆ static function TRS(pos:Vector3,q:Quaternion,s:Vector3):Matrix4x4
 描述:建立一個變換,旋轉和縮放矩陣。
返回的矩陣具備位置pos,旋轉q和縮放s。
NetworkMessageInfo
這個數據結構包含一個剛收到的來自網絡的消息。
它揭示了它從哪來,發送的時間和由什麼網絡視圖發送的。
變量
◆ var networkView : NetworkView
描述:發送這個消息的NetworkView
◆ var sender : NetworkPlayer
 描述:發送這個網絡信息(擁有者)的玩家。
◆ var TimeStamp : double
描述:當消息被髮送時的時間戳,以秒計。
時間郵戳能夠用於實現插值或者連續劉寶的預測,時間戳被做爲雙精度數傳遞,以免遊戲運行長一段時間後溢出。內置的時間戳被設置爲32位整數,以毫秒爲精度以便節省帶寬。時間戳現對於Network.time自動調整。所以Network.time-messageInfo.timeStamp是抱在傳輸時花費的時間。
var something : float;
var transitTime: double;
function OnSerializeNetworkView (stream : BitStream, info : NetworkMessageInfo) {
var horizontalInput : float = 0.0;
if (stream.isWriting) {
// 發送
horizontalInput = transform.position.x;stream.Serialize (horizontalInput);
} else {
// 接收
transitTime = Network.time - info.timestamp;
stream.Serialize (horizontalInput);
something = horizontalInput;
}
}
function OnGUI() {
GUILayout.Label("Last transmission time: "+ transitTime);
}
NetworkPlayer
 NetworkPlayer是一個數據結構,經過它你能夠經過網絡定位其餘玩家。
例如,你能夠直接發送一個消息給其餘玩家。
變量
◆ var externalIP : string
描述:返回網絡接口的外部IP地址。這個只能在創建了外接鏈接之後才能輸入。
◆ var externalPort : int
描述:返回網絡接口的外部接口。這個只能在創建了外接鏈接之後才能輸入。
◆ var ipAddress : string
描述:該玩家的IP地址。
◆ var port : int
描述:該玩家的端口號。
構造函數
◆ static function NetworkPlayer(ip : string , port : int) : NetworkPlayer
描述:
函數
◆ function ToString() : string
描述:返回該網絡玩家的指數。
類方法
◆ static operator != (lhs : NetworkPlayer,rhs : NetworkPlayer):bool
描述:若是兩個NetworkPlayers不是同一個玩家返回真
◆ static operator == (lhs : NetworkPlayer,rhs : NetworkPlayer):bool
描述:若是兩個NetworkPlayers是同一個玩家返回真
NetworkPlayer
 NetworkPlayer是一個數據結構,經過它你能夠經過網絡定位其餘玩家。
例如,你能夠直接發送一個消息給其餘玩家。
變量
◆ var externalIP : string
描述:返回網絡接口的外部IP地址。這個只能在創建了外接鏈接之後才能輸入。
◆ var externalPort : int
描述:返回網絡接口的外部接口。這個只能在創建了外接鏈接之後才能輸入。
◆ var ipAddress : string
描述:該玩家的IP地址。
◆ var port : int
描述:該玩家的端口號。
構造函數
◆ static function NetworkPlayer(ip : string , port : int) : NetworkPlayer
描述:
函數
◆ function ToString() : string
描述:返回該網絡玩家的指數。
類方法
◆ static operator != (lhs : NetworkPlayer,rhs : NetworkPlayer):bool
描述:若是兩個NetworkPlayers不是同一個玩家返回真
◆ static operator == (lhs : NetworkPlayer,rhs : NetworkPlayer):bool
描述:若是兩個NetworkPlayers是同一個玩家返回真
NetworkViewID
 在一個多玩家遊戲中,NetworkViewID是用於網絡視實例的惟一標識符。
這個是重要的,由於這個在全部客戶端是惟一的數字,而且客戶端本身能夠產生這些數字,不然網絡同步將被斷開。
變量
◆ var isMine : bool
描述:若是是被我實例化的,返回真。
◆ var owner : NetworkPlayer
描述:擁有NetworkView的NetworkPlayer。能夠是服務器。
函數
◆ function ToString() : string
描述:返回NetworkViewID中的格式化字符串細節。
類方法
◆ static operator != (lhs : NetworkViewID,rhs : NetworkViewID):bool
描述:若是兩個NetworkViewIDs不是同一個玩家返回真
◆ static operator == (lhs : NetworkViewID,rhs : NetworkViewID):bool
描述:若是兩個NetworkViewIDs是同一個玩家返回真
Network

網絡類是網絡實現的核心並提供核心函數。
這個類定義了網絡接口和全部網絡參數。你可使用它來設置一個服務器或連接到一個服務器並有一些列輔助函數來幫助你完成這些功能。獲取更多關於編輯器中的信息請參考Network Maner component reference。
消息傳遞
◆ function OnConnectedToServer() : void
描述:當成功連接到服務器上時,在客戶端調用這個函數。
function OnConnectedToServer() {
Debug.Log("Connected to server");
}//發送本地玩家名稱到服務器
◆ function OnDisconnectedFromServer(mode : NetworkDisconnection):void
描述:客戶端從服務器上斷開時在客戶端上調用,但當鏈接被斷開時在服務器上調用。
當連接丟失或被服務器斷開時,在客戶端調用這個函數。NetworkDisconnection枚舉將標示鏈接是否斷開或是否鏈接丟失。鏈接成功斷開時再服務器上調用這個函數(在Network.Disconnect以後)。
function OnDisconnectedFromServer(info : NetworkDisconnection) {
if (Network.isServer) {
Debug.Log("Local server connection disconnected");
}
else {
if (info == NetworkDisconnection.LostConnection)
Debug.Log("Lost connection to the server");
else
Debug.Log("Successfully diconnected from the server");
}
}
◆ function OnFailedToConnect(error : NetworkConnectionError):void
描述:當鏈接由於某些緣由失敗時,在客戶端上調用該函數。
失敗的緣由做爲NetworkConnectionError枚舉傳入。
function OnFailedToConnect(error: NetworkConnectionError){
Debug.Log("Could not connect to server: "+ error);
}
◆ function OnFailedToConnectToMasterServer(error : NetworkConnectionError):void
描述:當鏈接到主服務器出現問題時,在客戶端或服務器端調用該函數。
錯誤緣由做爲NetworkConnectionError枚舉傳入。
function OnFailedToConnectToMasterServer(info: NetworkConnectionError){
Debug.Log("Could not connect to master server: "+ info);
}
◆ function OnNetworkInstantiate(info : NetworkMessageInfo):void
描述:當一個物體使用NetworkInstantiate進行網絡初始化時在該物體上調用這個函數。這個對於禁用或啓用一個已經初始化的物體組件來講是很是有用的,它們的行爲取決於他們是本地仍是遠端。注意:在NetworkMessageInfo裏的networkView屬性不能在OnNetworkInstantiate裏使用。
function OnNetworkInstantiate (info : NetworkMessageInfo) {
Debug.Log("New object instantiated by " + info.sender);
}
 描述:當一個新的玩家成功鏈接時再服務器上調用這個函數。
private var playerCount: int = 0;
function OnPlayerConnected(player: NetworkPlayer) {
Debug.Log("Player " + playerCount++ + " connected from " + player.ipAddress + ":" + player.port);
}// 用玩家信息構建一個數據結構
◆ function OnPlayerDisconnected(player : NetworkPlayer) : void
描述:當玩家從服務器斷開時再服務器上調用這個函數。
function OnPlayerDisconnected(player: NetworkPlayer) {
Debug.Log("Clean up after player " + player);
Network.RemoveRPCs(player);
Network.DestroyPlayerObjects(player);
}
◆ function OnSerializeNetworkView(stream : BitStream, info : NetworkMessageInfo) : void
描述:用來在一個被網絡視架空的抄本中自定義變量同步。
它自動決定被序列化的變量是否應該發送或接收。這個依賴於誰擁有這個物體,例如,擁有者發送,而其餘全部的接收。
//該物體的生命值信息
var currentHealth : int;
function OnSerializeNetworkView(stream : BitStream, info : NetworkMessageInfo){
var health : int = 0;
if (stream.isWriting){
health = currentHealth;
stream.Serialize(health);
}
else{
stream.Serialize(health);
currentHealth = health;
}
}
◆ function OnServerInitialized() : void
描述:當Network . InitializeServer 被調用並完成時,在服務器上調用這個函數。
function OnServerInitialized() {
Debug.Log("Server initialized and ready");
}
類變量
◆ static var connections : NetworkPlayer[]
描述:全部鏈接上的玩家。在客戶端中,該變量只包含服務器。
function OnGUI() {
if (GUILayout.Button ("Disconnect first player")) {
if (Network.connections.length > 0) {
Debug.Log("Disconnecting: "+Network.connections[0].ipAddress+":"+Network.connections[0].port);
Network.CloseConnection(Network.connections[0], true);
}
}
}
◆ static var ConnectionTesterIP:string
描述:用在Network.TestConnection中的鏈接測試的IP地址。
function ResetIP() {
Network.connectionTesterIP = "127.0.0.1";
Network.connectionTesterPort = 10000;
}
◆ static var connectionTesterPort:int
描述:用在Network.TestConnection中的鏈接測試的IP端口。
function ResetIP() {
Network.connectionTesterIP = "127.0.0.1";
Network.connectionTesterPort = 10000;
}
◆ static var incomingPassword:string
描述:爲這個服務器設置密碼(對於進入的鏈接)。這個必須與客戶端上Network.Connect中的相同,傳遞」」表示沒有密碼(默認)。
function ConnectToServer () {
Network.Connect("127.0.0.1", 25000, "HolyMoly");
}
function LaunchServer () {
Network.incomingPassword = "HolyMoly";
Network.InitializeServer(32, 25000);
}
◆ static var isClinet:bool
描述:若是你的端類型是客戶端則返回真。
function OnGUI() {
if (Network.isServer)
GUILayout.Label("Running as a server");
else if (Network.isClient)
GUILayout.Label("Running as a client");
}
◆ static var isMessageQueueRunning:bool
描述:啓用或禁用網絡消息處理。若是這個被禁用,沒有RPC調用或網絡視同步會替代。Network level loading有如何使用這個函數的例子。
◆ static var isServer:bool
描述若是你的端類型是服務器端則返回真。
function OnGUI() {
if (Network.isServer)
GUILayout.Label("Running as a server");
else if (Network.isClient)
GUILayout.Label("Running as a client");
}
◆ static var maxConnections:int
描述:設置容許的鏈接/玩家的最大數量。設置0,覺得這沒有心的鏈接能夠被創建。但現有保持鏈接。設置爲-1表示最大鏈接數被設置爲與當前開發的鏈接數相同。在這種狀況下,若是一個玩家掉線,那麼這個空位仍是爲他開放的。這個不能設置爲高於Network.InitializeServer設置的鏈接數。
function StartGameNow() {
// 不容許更多玩家
Network.maxConnections = -1;
}
◆ static var minimumAllocatableViewIDs:int
描述:在ViewIDc池中獲取或設置服務器分配給客戶端ViewID的最小數。當玩家使用新的數字鏈接並被刷新時,ViewID池被分配給每一個玩家。服務器和客戶端應該同步這個值。在服務器上設置的更高,將會發送比它們真正須要的更多視ID數到客戶端。在客戶端上設置更高,意味着它們須要更多視ID。例如當池須要的ID數,服務器中並不包含足夠的數量,則會在一行中使用兩次。默認值爲100。若是一個遊戲經過網絡實例化大量新的物體,例如每秒超過100個的網絡實例,那麼這個值須要被設置的更高。
function Awake () {
// 使用更大的視ID池來分配
Network.minimumAllocatableViewIDs = 500;
}
◆ static var natFacilitatorIP:string 
描述:NAT穿透輔助的IP地址。一般這與服務器相同。
function ResetIP() {
Network.natFacilitatorIP = "127.0.0.1";
Network.natFacilitatorPort = 10001;
}
static var natFacilitatorPort:int 
描述:NAT穿透輔助的端口。
function ResetIP() {
Network.natFacilitatorIP = "127.0.0.1";
Network.natFacilitatorPort = 10001;
}
◆ static var peerType:NetworkPeerType
描述:端類型狀態。例如,斷開鏈接,鏈接,服務器或客戶端。
function OnGUI() {
if (Network.peerType == NetworkPeerType.Disconnected)
GUILayout.Label("Not Connected");
else if (Network.peerType == NetworkPeerType.Connecting)
GUILayout.Label("Connecting");
else
GUILayout.Label("Network started");
}
◆ static var player:NetworkPlayer 
描述:獲取本地NetworkPlayer實例。
◆ static var ProxyIP:string
描述:代理服務器的IP地址。
 
function Awake(){
Network.proxyIP = "1.1.1.1";
Network.proxyPort = 1111;
}
◆ static var proxyPassword:string
描述:設置代理服務器密碼。能夠製做你本身的代理服務器。在這種狀況下,你也許想用密碼保護它。而後Unity玩家必須正確的設置這個值。
function Awake(){
//設置自定義代理服務器地址和密碼
Network.proxyIP = "1.1.1.1";
Network.proxyPort = 1111;
Network.proxyPassword = "secret";
}
◆ static var proxyPort:int  描述:代理服務器的端口。
function Awake(){
Network.proxyIP = "1.1.1.1";
Network.proxyPort = 1111;
}
◆ static var sendRate:float  描述:用於全部網絡視的默認網絡更新發送速率。
function Awake () {
//增長默認的發送速率
Network.sendRate = 25;
}
◆ static var sendRate:float
描述:獲取當前網絡時間(秒)。這個能夠用來比較NetworkMessageInfo中返回的時間。這個實例腳本須要附加到一個帶有網絡視的物體上,並使網絡視監視這個腳本。它管理時間,發送這個物體的同步X位置消息。
var something : float;
var transitTime: double;
function OnSerializeNetworkView (stream : BitStream, info : NetworkMessageInfo) {
var horizontalInput : float = 0.0;
if (stream.isWriting) {//發送
horizontalInput = transform.position.x;
stream.Serialize (horizontalInput);
}
 else {//接收
transitTime = Network.time - info.timestamp;
stream.Serialize (horizontalInput);
something = horizontalInput;
}
}
function OnGUI() {
GUILayout.Label("Last transmission time: "+ transitTime);
}
◆ static var useNat:bool
 
描述:當鏈接(客戶端)或接收鏈接(服務器)時,咱們應該使用NAT穿透嗎?若是這個在在服務器上設置,只有具備NAT穿透的客戶端才能鏈接到它。可是若是服務器有一個NAT地址,這個須要打開以便鏈接。有些路由器不知道如何作NAT穿透。所以對於這些玩家惟一的方法就是修改路由器以便打開合適的轉發端口(遊戲端口)。參考Network.TestConnection和Network.TestConnectionNAT獲取如何自動檢測端用戶的方法。
function OnGUI() {
if (GUILayout.Button ("Start Server"))
{
//若是沒有共有IP地址,使用NAT穿透
Network.useNat = !Network.HavePublicAddress();
Network.InitializeServer(32, 25002);
MasterServer.RegisterHost("MyUniqueGameType", "JohnDoes game", "l33t game for all");
}
}
◆ static var useProxy:bool
描述:標示是否須要代理服務器支持,在這種狀況下流量經過代理服務器被延遲。代理伺服器是一種與服務器和客戶端鏈接性問題的解決方案。當機器有一個非NAT穿透能力的路由器,其鏈接的選擇很是優先。一個遊戲不能沒有外部鏈接(只有客戶端在本地網絡中)。經過使用代理服務器,該機器能夠具備徹底的鏈接性,可是額外的代價是全部的流量都會被延遲。一個沒有NAT穿透能力的客戶端經過代理可以鏈接到任何服務器,只要代理服務器正確的設置。官方並不提供代理服務器爲公衆使用。因此你須要本身創建代理服務器。固然,用共有IP地址設置代理服務器並保證有大量可用帶寬是明智的。看成爲客戶端運行時,只要啓用Network .useProxy就能夠。想往常昂使用Network . Connect鏈接到服務器。全部經過代理服務器的流量將被延遲。服務器的外部IP和內部IP還像往常同樣工做。這樣若是它們位於同一網絡中,客戶端能夠直接鏈接到它而不須要代理。做爲一個服務器運行時,OnServerInitialized(NetworkPlayer)返回一個NetworkPlayer結果代表遊戲服務器中轉的IP端口,代理服務器分配給遊戲服務器的端口是什麼。這個是其餘客戶端能夠鏈接到的IP端口。當鏈接到服務器時,客戶端不會將這個服務器與其餘服務器區別對待。嚴格的說,它們不須要知道這個服務器獲得代理服務器的幫助。當使用主服務器時,你不能只依賴於它在使用代理服務器時爲服務器註冊的IP端口。服務器使用的代理服務器的IP地址和端口,能夠防止在數據域的註釋中來發送給主服務器。從主服務器接收主機信息的客戶端能夠去除註釋域並查看它是否可以爲那個主機使用另外一個可選的IP端口。
重要:你不該該同時爲鏈接到它的服務器和客戶端啓用代理支持,會發生意想不到的事情。
var imaserver: boolean;
var serverIP: String;
var serverPort: int;
var serverUsesNAT: boolean;
function Awake(){
//設置自定義代理服務器地址
Network.proxyIP = "1.1.1.1";
Network.proxyPort = 1111;
if (imaserver)
StartServerWithProxy();
else
ConnectToServerWithProxy();
}
function StartServerWithProxy(){
Network.useProxy = true;
Network.InitializeServer(2,25000);
}
function OnServerInitialized(player: NetworkPlayer){
if (Network.useProxy)
Debug.Log ("Successfully started server with proxy support. We are connectable through "+ player.ipAddress + ":" + player.port);
}
function OnFailedToConnect(msg: NetworkConnectionError){
if (Network.useProxy && imaserver){
Debug.LogError("Failed to connect to proxy server: " + msg);
}
}
function ConnectToServerWithProxy(){
Network.useProxy = true;
Network.useNat = serverUsesNAT;
Network.Connect(serverIP, serverPort);
}
function OnConnectedToServer(){
Debug.Log("Connected successfully to server");
}
類方法
◆ static function AllocateViewID():NetworkViewID
描述:查詢下一個可用的網絡視ID數並分配它(保留)。這個數字又能夠被賦予一個實例化物體的網絡視。注意,爲了使其可正常工做,必須有一個NetworkView附加到這個物體,這個物體必須有這個腳本並必須使這個腳本做爲它的觀察屬性。必須有一個Cube預設,帶有一個NetworkView它監視某些東西(例如該Cube的Transform)。腳本中的cubePrefab變量必須設置爲立方體預設。使用智能的AllocateViewID是最簡單的方法。若是有超過一個NetworkView附加在初始化的Cube上着將變得更復雜。
var cubePrefab : Transform;
function OnGUI (){
if (GUILayout.Button("SpawnBox")){
var viewID = Network.AllocateViewID();
networkView.RPC("SpawnBox", RPCMode.AllBuffered, viewID, transform.position);
}
}
@RPC
function SpawnBox (viewID : NetworkViewID, location : Vector3) {
//實例化本地的prefab
var clone : Transform;
clone = Instantiate(cubePrefab, location, Quaternion.identity);
var nView : NetworkView;
nView = clone.GetComponent(NetworkView);
nView.viewID = viewID;
}
◆ static function CloseConnection (target : NetworkPlayer, sendDisconnectionNotification : bool) : void 
描述:關閉與其餘系統的鏈接。/target/定義鏈接到的那個系統將被關閉,若是咱們是客戶端,鏈接到服務器的鏈接將會關閉。若是咱們是服務器目標玩家,將會被踢出。sednDisconnectionNotification啓用或禁用通知將被髮送到另外一端。若是禁用鏈接被丟棄,若是沒有斷開鏈接通知被髮送到遠端,那麼以後的鏈接將被丟棄。
function OnGUI() {
if (GUILayout.Button ("Disconnect from server")) {
if (Network.connections.length == 1) {
Debug.Log("Disconnecting: "+Network.connections[0].ipAddress+":"+Network.connections[0].port);
Network.CloseConnection(Network.connections[0], true);
}
else if (Network.connections.length == 0)
Debug.Log("No one is connected");
else if (Network.connections.length > 1)
Debug.Log("Too many connections. Are we running a server?");
}
if (GUILayout.Button ("Disconnect first player")) {
if (Network.connections.length > 0) {
Debug.Log("Disconnecting: "+Network.connections[0].ipAddress+":"+Network.connections[0].port);
Network.CloseConnection(Network.connections[0], true);
}
}
}
◆ static function Connect (IP:string, remotePort:int, password:string = ""):NetworkConnectionError
描述:鏈接到特定的主機(IP或域名)和服務器端口。參數是主機的IP地址,點IP地址或一個域名。remotePort,指定鏈接到遠端機器的端口。password,它是一個可選的用於服務器的密碼。這個密碼必須設置爲與服務器的Network.incomingPassword相同。
function ConnectToServer () {
Network.Connect("127.0.0.1", 25000);
}
◆ static function Connect(IPs:string[], remotePort:int, password:string = ""):NetworkConnectionError
描述:該函數與Network.Connect相似,可是能夠接受一個IP地址數組。當從一個主服務器的主機信息返回多個內部IP地址時,IP數據結構能夠被直接傳入這個函數。它將實際的鏈接到相應ping的第一個IP(可鏈接)。
◆ static function Destroy (viewID : NetworkViewID) : void
描述:跨網絡銷燬與該視ID相關的物體。本地的於遠端的都會被銷燬。
var timer : float;
function Awake () {
timer = Time.time;
}
//經過網絡銷燬擁有該腳本的物體
//其必須具有NetworkView屬性
function Update() {
if (Time.time - timer >
2)
{
Network.Destroy(GetComponent(NetworkView).viewID);
}
}
function Update() {
if (Time.time - timer > 2){
Network.Destroy(GetComponent(NetworkView).viewID);
}
}
◆ static function Destroy (gameObject : GameObject) : void
描述:跨網絡銷燬該物體。本地的與遠端的都會被銷燬。
var timer : float;
function Awake () {
timer = Time.time;
}//經過網絡銷燬擁有該腳本的物體
function Update() {
if (Time.time - timer > 2){
Network.Destroy(gameObject);
}
}
◆ static function DestroyPlayerObjects (playerID : NetworkPlayer) : void
描述:基於視ID銷燬全部屬於這個玩家的全部物體。這個只能在服務器上調用。例如,清理一個已斷開的玩家留下的網絡物體。
function OnPlayerDisconnected(player: NetworkPlayer) {
Debug.Log("Clean up after player " + player);
Network.RemoveRPCs(player);
Network.DestroyPlayerObjects(player);
}
◆ static function Disconnect (timeout : int = 200) : void
描述:關閉全部開放的鏈接並關閉網絡接口。timeout參數表示網絡接口在未收到信號的狀況下,多長時間會關閉。網絡狀態,入安全和密碼,也會被重置。
function OnGUI() {
if (GUILayout.Button ("Disconnect")) {
Network.Disconnect();
MasterServer.UnregisterHost();
}
}
◆ static function GetAveragePing (player : NetworkPlayer) : int
描述:到給定player的最後平均ping時間,以毫秒計。若是沒有發現玩家,返回-1。Ping會每隔幾秒自動發出。
function OnGUI() {
var i: int;
GUILayout.Label("Player ping values");
for (i=0; i < Network.connections.length; i++) {
GUILayout.Label("Player " + Network.connections[i] + " - " + Network.GetAveragePing(Network.connections[i]) + " ms");
}
}、

◆ static function GetLastPing (player : NetworkPlayer) : int
描述:到給定player的最後平均ping時間,以毫秒計。
若是沒有發現玩家,返回-1。Ping會每隔幾秒自動發出。
function OnGUI() {
var i: int;
GUILayout.Label("Player ping values");
for (i=0; i < Network.connections.length; i++) {
GUILayout.Label("Player " + Network.connections[i] + " - " + Network.GetLastPing(Network.connections[i]) + " ms");
}
}
◆ static function HavePublicAddress () : bool
描述:檢查該機器是否有一個公共IP地址。檢查全部接口來獲取Ipv4公共地址。如發現返回真。
function OnGUI() {
if (GUILayout.Button ("Start Server")){
// 若是沒有公共IP地址,使用NAT穿透
Network.useNat = !Network.HavePublicAddress();
Network.InitializeServer(32, 25002);
MasterServer.RegisterHost("MyUniqueGameType", "JohnDoes game", "l33t game for all");
}
}
◆ static function InitializeSecurity () : void
描述:初始化安全層。你須要再Network.InitializeServer調用以後在服務器上調用這個函數。不要再客戶端調用該函數你的在線遊戲達到必定知名度時就有人試圖做弊。你講須要再遊戲層和網絡層處理這個。若是你但願使用它們,Unity能夠經過提供安全鏈接處理網絡層。
使用AES加密,阻止未受權讀取並阻止重複攻擊,添加CRC來檢測數據篡改,使用隨機的、加密的SYNCookies來組織未受權登陸,使用RSA加密保護這個AES密鑰
大多數遊戲將使用安全鏈接。而後,它們會向每一個數據包添加15本身並須要時間計算,因此你也許想限制使用此功能。
function Start (){
Network.InitializeSecurity();
Network.InitializeServer(32, 25000);
}
◆ static function InitializeServer (connections:int,listenPort:int) : NetworkConnectionError
描述:初始化安全層。connections是容許進入的鏈接或玩家的數量。listenPort是咱們要監聽的端口。
function LaunchServer () {
Network.incomingPassword = "HolyMoly";
Network.InitializeServer(32, 25000);
}
◆ static function Instantiate (prefab:Object, position:Vector3, rotation:Quaternion, group:int):Object
描述:網絡實例化預設。給定的預設將在全部的客戶端上初始化。同步被自動設置因此沒有額外的工做須要作。位置、旋轉和網絡組數值做爲給定的參數。這是一個RPC調用,所以
 
當Network.RemoveRPCs爲這個組調用的使用,這個物體將被移除。注意在編輯器中必須設置playerPrefab,你能在Object.Instantiate物體參考中獲取更多實例化信息。
//當成功鏈接到服務器上時
//當即實例化新鏈接的玩家角色
var playerPrefab : Transform;
function OnConnectedToServer (){
Network.Instantiate(playerPrefab, transform.position, transform.rotation, 0);
}
◆ static function RemoveRPCs (playerID : NetworkPlayer) : void
描述:移除全部屬於這個玩家ID的RPC函數。
function OnPlayerDisconnected(player: NetworkPlayer) {
Debug.Log("Clean up after player " + player);
Network.RemoveRPCs(player);
Network.DestroyPlayerObjects(player);
}
◆ static function RemoveRPCs (playerID : NetworkPlayer, group : int) : void
描述:移除全部屬於這個玩家ID並給予給定組的全部RPC函數。
◆ static function RemoveRPCs (viewID : NetworkViewID) : void
描述:移除全部與這個視ID數相關的RPC函數調用。
◆ static function RemoveRPCsInGroup (group : int) : void
描述:移除全部屬於給定組數值的RPC函數。
◆ static function SetLevelPrefix (prefix : int) : void
描述:設置關卡前綴,而後全部網絡視ID都會使用該前綴。此處提供了一些保護,能夠防止來自前一個關卡的舊的網絡更新影響新的關卡。此處能夠設置爲任何數字並隨着新關卡的加載而增長。這不會帶來額外的網絡負擔,只會稍微減少網絡視ID池。Network level loading有如何使用該函數的例子。
◆ static function SetReceivingEnabled (player : NetworkPlayer, group : int, enabled : bool) : void
描述:啓用或禁用特定組中來自特定玩家的信息接收。在你不但願任何網絡消息進入的時候可使用這個函數,而後在你準備好的時候啓用。例如,可用於中止網絡消息,知道關卡被加載。
//中止接收來自全部玩家(客戶端)的組0的信息
for (var player : NetworkPlayer in Network.connections)
Network.SetReceivingEnabled(player, 0, false);
◆ static function SetSendingEnabled (group : int, enabled : bool) : void
描述:啓用或禁用特定網絡組上的信息傳輸和RPC調用。當你知道你不發送任何有用的信息到其餘客戶端時,能夠設置這個。例如在你徹底你家在關卡以前。Network level loading中有例子。
static function SetSendingEnabled (player : NetworkPlayer, group : int, enabled : bool) : void
描述:基於目標玩家和網絡組啓用或禁用消息傳說和RPC調用。當在客戶端使用時,惟一可能的NetworkPlayer就是服務器。
◆ static function TestConnection (forceTest : bool = false) : ConnectionTesterStatus
描述:測試這個機器的網絡鏈接。執行兩種測試,這取決機器有公用IP仍是隻有一個私有IP。公用IP測試主要用於服務器,不須要測試具備公用地址的客戶端。爲了公用IP測試成功,必須開啓一個服務器實例。一個測試服務器將嘗試鏈接到本地服務器的IP地址和端口,所以它被顯示在服務器中位可鏈接狀態。若是不是,那麼防火牆是最有可能阻斷服務端口的。服務器實例須要運行以便測試服務器能鏈接到它。另外一個試驗檢測NAT穿透能力。服務器和客戶端均可以進行,無需任何事先設定。若是用於服務器NAT測試失敗,那麼不設置端口轉發是一個壞主意。本地LAN網絡以外的客戶端將不能鏈接。若是測試失敗,客戶端就不能使用NAT鏈接到服務器,這些服務器將不會提供給用戶做爲主機。這個函數是異步的,並可能不會返回有效結果。由於這個測試須要一些時間來完成(1-2秒)。測試完成後,測試的結果只在函數被再次調用時返回。這樣,頻繁訪問該函數是安全的。若是須要其餘的測試,入網絡鏈接已改變,那麼forcTest參數應該爲真。該函數返回一個ConnectionTesterStatus枚舉。
//是否應該在主機列表上隱藏NAT主機?
private var filterNATHosts = false;
private var doneProbingPublicIP = false;
function OnGUI (){
//開始/輪詢鏈接測試
//在標籤上顯示結果並按照結果作出相應的反應
natCapable = Network.TestConnection();
if (natCapable == -2)
GUILayout.Label("Problem determining NAT capabilities");
else if (natCapable == -1)
GUILayout.Label("Undetermined NAT capabilities");
else if (natCapable == 0){
GUILayout.Label("Cannot do NAT punchthrough, " +"filtering NAT enabled hosts for client connections, " +"impossible to run a server.");
filterNATHosts = true;
Network.useNat = false;
}
else if (natCapable == 1){
if (doneProbingPublicIP)
GUILayout.Label("Non-connectable public IP address (port "+ serverPort +" blocked), NAT unchthrough can circumvent the firewall.");
else
GUILayout.Label("NAT punchthrough capable. " +"Enabling NAT punchthrough functionality.");
//一旦服務器開始NAT功能被啓用
//客戶端是否開啓這個基於主機是否須要
Network.useNat = true;
}
else if (natCapable == 2){
GUILayout.Label("Directly connectable public IP address.");
Network.useNat = false;
}
else if (natCapable == 3){
GUILayout.Label("Non-connectble public IP address (port " + serverPort +" blocked), running a 
server is impossible.");
Network.useNat = false;
if (!doneProbingPublicIP){
natCapable = Network.TestConnectionNAT();
doneProbingPublicIP = true;
}
}
else if (natCapable == 4){
GUILayout.Label("Public IP address but server not initialized, "+"it must be started to check server accessibility.");
Network.useNat = false;
}
if (GUILayout.Button ("Retest connection")){
Debug.Log("Redoing connection test");
doneProbingPublicIP = false;
natCapable = Network.TestConnection(true);
}
}
◆ static function TestConnectionNAT () : ConnectionTesterStatus
描述:測試NAT穿透的鏈接性。這個就像Network.TestConnection,只不過NAT穿透是強制的,即便該機器有一個公用地址。請參考Network.TestConnection。
Object

Unity所涉及的全部物體的基類。任何從Object繼承的公有變量將做爲一個目標顯示在監視面板中,容許你從GUI中設置。
變量
◆ var hideFlags : HideFlags 描述:該物體是否被隱藏,保存在場景中或被用戶修改。
◆ var name : string
描述:對象的名稱。組件與遊戲物體和全部附加的組件共享相同名稱。
//改變物體的名稱爲Hello
name = "Hello";
函數
◆ function GetInstanceID () : int 描述:返回該物體的實例id。一個物體的實例ID老是惟一。
描述:返回該物體的實例id。
一個物體的實例id老是惟一的。
print(GetInstanceID());
類方法
◆ static function Destroy (obj : Object, t : float = 0.0F) : void
描述:移除一個遊戲物體,組件或資源。物體obj將被小火或者t秒後被銷燬。若是obj是一個Component它將被從GameObject中移除。若是obj是一個GameObject它將銷燬這個GameObject,以及它的組件和所子對象。實際的銷燬老是推遲到下個Update來臨時,但總在渲染前完成。
//銷燬這個遊戲物體
Destroy (gameObject);
//從物體上移除該腳本
Destroy (this);
//從遊戲物體上移除剛體組件
Destroy (rigidbody);
//加載該遊戲物體後5秒刪除
Destroy (gameObject, 5);
//當玩家按下Ctrl時移除名爲FoooScript的腳本
function Update () {
if (Input.GetButton ("Fire1") && GetComponent (FooScript))
Destroy (GetComponent (FooScript));
}
◆ static function DestroyImmediate (obj : Object, allowDestroyingAssets : bool = false) : void

描述:當即銷燬物體。強烈建議使用Destroy代替它。該函數應該只在編寫編輯器代碼時使用,由於延遲的銷燬將不會再編輯器模式調用。遊戲代碼中建議使用Destroy。Destroy老是延遲的(可是在同一幀執行)。當心使用該函數,由於它能永久的銷燬資源。
◆ static function DontDestroyOnLoad (target : Object) : void
描述:加載新場景時確保物體target不被自動銷燬。當加載一個新的關卡時,場景中的全部物體都會被銷燬,而後心關卡中的物體將被加載。爲了在關卡加載的時候保持物體在上面調用DontDestroyOnLoad。若是物體是一個組件或遊戲物體,那麼它的整個變換層次將不會被銷燬。
//保證該遊戲物體及其變化子物體在載入新場景時不會被銷燬。
function Awake () {
DontDestroyOnLoad (this);
}
◆ static function FindObjectOfType (type : Type) : Object
描述:返回第一個類型爲Type的已激活加載的物體。參見Object.FindObjectsOfType 。
◆ static function FindObjectsOfType (type : Type) : Object[]
描述:返回全部類型爲Type的已激活加載的物體。
參見Object.FindObjectsOfType 。
它將返回任何資源(網格、紋理、預設等)或已激活加載的物體。
//當點擊該物體,它將禁用場景中全部鉸鏈中的彈簧。
function OnMouseDown () {
hinges = FindObjectsOfType (HingeJoint);
for (var hinge : HingeJoint in hinges) {
hinge.useSpring = false;
}
}
c#版
public class Something : MonoBehaviour{
void OnMouseDown(){
HingeJoint[] hinges = FindObjectsOfType<HingeJoint>();
for (HingeJoint hinge in hinges) {
hinge.useSpring = false;
}
}
}
◆ static function Instantiate (original : Object, position : Vector3, rotation : Quaternion) : Object
描述:克隆original物體並返回該克隆。防護position兵設置旋轉爲rotation,而後返回該克隆。本職上與cmd-d相同,並移動到給定位置。若是一個遊戲物體、組件或腳本實例被傳入,Instantiate將克隆整個遊戲物體層次,全部的子對象也被克隆。全部遊戲物體被激活。參加:預設實例化的深刻討論。
//實例化預設的10個拷貝,間隔爲2單位。
var prefab : Transform;
for (var i=0;i<10;i++) {
Instantiate (prefab, Vector3(i * 2.0, 0, 0), Quaternion.identity);
}
Instantiate更多經常使用於實例化投射物、AI敵人,粒子爆炸或b破損的物體。
//實例化一個剛體,而後設置速度。
var projectile : Rigidbody;
function Update () {
//按下ctrl時,發射一個物體
if (Input.GetButtonDown("Fire1")) {
//以該變化位置與旋轉實例化投射物
var clone : Rigidbody;
clone = Instantiate(projectile, transform.position, transform.rotation);
//沿當前物體Z軸,給克隆體一個初始速度
clone.velocity = transform.TransformDirection (Vector3.forward * 10);
}
}
實例化也能直接克隆腳本實例。整個遊戲物體層級將被克隆,而且克隆腳本的實例將被返回。
//初始化一個附加了Missile腳本的預設
var projectile : Missile;
function Update () {
//按下ctrl時,發射一個物體
if (Input.GetButtonDown("Fire1")) {
//以該變化位置與傳轉實例化投射物
var clone : Missile;
clone = Instantiate(projectile, transform.position, transform.rotation);
//設置火箭超市銷燬爲5秒
clone.timeoutDestructor = 5;
}
}
克隆一個物體以後可使用GetComponet來設置附加到克隆物體上的特定組件的屬性。
◆ static function Instantiate (original : Object) : Object
描述:克隆original物體並返回該克隆。這個函數保留克隆物體的位置與賦值命令相同(cmd-d)。
//當任何剛體進入這個觸發器時實例化預設。
//它保留預設的原始位置與旋轉。
var prefab : Transform;
function OnTriggerEnter () {
Instantiate (prefab);
}
◆ static operator != (x : Object, y : Object) : bool 
描述:比較兩個物體是否不一樣。
var target : Transform;
function Update (){
//若是target不一樣於咱們的變換。
if (target != transform){
print("Another object");
}
}
◆ static operator == (x : Object, y : Object) : bool 
描述:比較兩個物體是否相同。
var target : Collider;
function OnTriggerEnter (trigger : Collider){
if (trigger == target)
print("We hit the target trigger");
}
var target : Transform;
function Update (){
//該物體已被銷燬。
if (target == null)
return;
}
◆ static implicit function bool (exists : Object) : bool 
描述:這個物體是否存在?
if(rigidbody)
等同於
if(rigidbody != null)
AnimationClip
類,繼承自Object。
存貯基於動畫的關鍵幀。
AnimationClip被Animation使用來播放動畫。
變量
◆ var frameRate : float
描述:關鍵幀被殘陽的幀率。這個與用來製做動畫/模型的動畫程序相同。
//打印動畫剪輯的幀率到控制檯。
print(animation["walk"].clip.frameRate);
◆ var length : float 
描述:動畫播放的描述。
animation.Play(animation.clip);
//等待動畫完成。
yield WaitForSeconds (animation.clip.length);
◆ var wrapMode : WrapMode 
描述:在動畫狀態中設定默認的卷模式。
構造函數
◆ static function AnimationClip () : AnimationClip 
描述:建立一個新的動畫剪輯。
函數
◆ function AddEvent (evt : AnimationEvent) : void
描述:建立一個新的動畫剪輯。這將添加這個時間直到退出播放模式或玩家退出。若是你想從編輯器添加一個固定的剪輯到AnimationEvent,使用UnityEditorAnimationUtility.SetAnimationEvents。
◆ function ClearCurves () : void 
描述:從剪輯中清理全部曲線。
◆ function SetCurve (relativePath : string, type : Type, propertyName : string, curve : AnimationCurve) : void
參數
relativePath  應用這個曲線的遊戲物體的路徑。relativePath被格式化爲一個路徑名。入:「root/spine/leftArm」若是relativePath爲空,表示該動畫剪輯所附加的遊戲物體。
type  被進行動畫處理的組件的類類型。
propertyName 被動畫處理的屬性的名稱或路徑。
curve 動畫曲線。
描述:給動畫指定一個特定的曲線屬性。若是曲線爲null該曲線將被移除。若是曲線爲null該曲線將被移除。若是曲線屬性已經存在,則會被替換。一般的名稱是:「localPostion.x」,「localPostion.y」,「localPostion.z」,「localRotation.x」,「localRotation.y」,「localRotation.z」,「localRotation.w」,「localScale.x」,「localScale.y」,「localScale.z」。出於性能考慮Transform的位置、旋轉和縮放只能被所謂一個動畫屬性。
 
//對x座標的位置進行動畫處理
function Start (){
//建立曲線
var curve = AnimationCurve.Linear(0, 1, 2, 3);
//用曲線建立剪輯
var clip = new AnimationClip();
clip.SetCurve("", Transform, "localPosition.x", curve);
//添加並播放剪輯
animation.AddClip(clip, "test");
animation.Play("test");
}
@script RequireComponent(Animation)
Material屬性可使用shader處處的名稱制做動畫屬性。一般的屬性名稱是:「_MainTex」,「_BumpMap」,「_LightMap」,「_Color」,「_SpecColor」,「_Emmission」。
Float屬性「PropertyName」
Vector4屬性「PropertyName.x」「PropertyName.x」 「PropertyName.x」 「PropertyName.x」 Color屬性「PropertyName.r」「PropertyName.g」「PropertyName.b」「PropertyName.a」
UV旋轉屬性「PropertyName.rotation」;UB便宜和縮放「PropertyName.offset.x」「PropertyName.offset.y」「PropertyName.scale.x」「PropertyName.scale.y」
對於在同一個Renderer上的多個索引材質,你能夠像這樣加前綴「[1]._MainTex.offset.y」。
//對alpha值和主要材質地平線補償進行動畫處理
function Start () {
var clip = new AnimationClip ();
clip.SetCurve ("", typeof(Material), "_Color.a",AnimationCurve (Keyframe(0, 0, 0, 0), Keyframe(1, 1, 0, 0)));
clip.SetCurve ("", typeof(Material), "_MainTex.offset.x",AnimationCurve.Linear(0, 1, 2, 3));
animation.AddClip (clip, clip.name);
animation.Play(clip.name);
}
@script RequireComponent(Animation)
繼承的成員
繼承的變量 
name 對象名稱
hideFlags 該物體是否被隱藏,保存在場景中或被用戶修改
繼承的函數 
GetInstanceID 返回該物體的實例id
繼承的類函數 
operator bool 這個物體存在嗎?
Instantiate 克隆original物體並返回這個克隆。
Destroy 移除一個遊戲物體、組件或資源。
DestroyImmediate 當即銷燬物體obj。強烈建議使用Destroy代理。
FindObjectsOfType 返回全部類型爲type的激活物體。
FindObjectsOfType 返回第一個類型爲type的激活物體。
operator== 比較兩個物體是否相同。
operator!= 比較兩個物體是否不一樣。
DontDestroyOnLoad 加載新場景時確保目標物體不被自動銷燬。
AssetBundle

類,繼承自Object。AssetBundles讓你經過WWW類流式加載額外的資源並在運行時實例化它們。AssetBundles經過BuildPipeline.BuildAssetBundle建立。參見:WWW.assetBundle ,Loading Resources at Runtime ,BuildPipeline.BuildPlayer
function Start () {
var www = new WWW ("http://myserver/myBundle.unity3d");
yield www;
//獲取指定的主資源並實例化
Instantiate(www.assetBundle.mainAsset);
}
變量
◆ var mainAsset : Object
描述:竹資源在構建資源boundle時指定(只讀)。該功能能夠方便的找到bundle內的主資源。例如,你也許想將預設一個角色幷包括全部紋理、材質、網格和動畫文件。可是徹底操縱角色的預設應該是你的mainAsset而且能夠被容易的訪問。
function Start () {
var www = new WWW ("http://myserver/myBundle.unity3d");
yield www;
//獲取指定的主資源並實例化
Instantiate(www.assetBundle.mainAsset);}函數◆ function Contains (name : string) : bool 描述:若是AssetBundle的名稱中包含特定的對象則進行檢索。若是包含則返回真。◆ function Load (name : string) : Object 描述:從bundle中加載名爲name的物體。◆ function Load (name : string, type : Type) : Object描述:從bundle中加載名爲name的type類物體。◆ function LoadAll (type : Type) : Object[ ]描述:加載全部包含在資源bundle中且繼承自type的物體。◆ function LoadAll () : Object[ ]描述:加載包含在資源bundle中的全部物體。◆ function Unload (unloadAllLoadedObjects : bool) : void描述:寫在bundle中的全部資源。Unload釋放bundle中全部序列化數據。當unloadAllLoaderObjects爲假,bundle內的序列化數據將被寫在,可是任何從這個bundle中實例化的物體都將無缺。固然,你不能從這個bundle中加載更多物體。當unloadAllLoaderObjects爲真,全部從該bundle中加載的物體也將被銷燬。若是場景中有遊戲物體引用該資源,那麼引用也會丟失。繼承的成員繼承的變量 name 對象名稱hideFlags 該物體是否被隱藏,保存在場景中或被用戶修改繼承的函數 GetInstanceID 返回該物體的實例id繼承的類函數 operator bool 這個物體存在嗎?Instantiate 克隆original物體並返回這個克隆。Destroy 移除一個遊戲物體、組件或資源。DestroyImmediate 當即銷燬物體obj。強烈建議使用Destroy代理。FindObjectsOfType 返回全部類型爲type的激活物體。FindObjectsOfType 返回第一個類型爲type的激活物體。operator== 比較兩個物體是否相同。operator!= 比較兩個物體是否不一樣。DontDestroyOnLoad 加載新場景時確保目標物體不被自動銷燬。AudioClip類,繼承自Object。音頻數據的容器。一個AudioClip以壓縮或未壓縮的格式存儲音頻文件。AudioClips被AudioSources參考或引用來播放聲音。參見組件參考的AudioClip.component。變量◆ var isReadyToPlay : bool描述:有沒流式音頻剪輯準備播放?(只讀)若是AudioClip是從網站上下載的,此變量用來判斷下載到的數據是否足夠不間斷的播放。對於不是來自web的流的AudioClips,該值老是真。function Start (){www=new WWW(url);audio.clip=www.audioClip;}function Update (){if(!audio.isPlaying && audio.clip.isReadyToPlay)audio.Play();}◆ var length : float 描述:音頻剪輯的長度,以秒計(只讀)。audio.Play();//等待音頻播放完成yield.WaitForSeconds(audio.clip.length);繼承的成員繼承的變量

相關文章
相關標籤/搜索