Unity 3D 腳本教學 (五)

上一篇主題 下一篇主題 向下

Unity 3D 腳本教學 (五)

發表  aaa1218bbb 于 周五 11月 25, 2011 2:10 pm

Array

數組允許你將多個對象存儲在一個變量中。
Array類只能用於JavaScript 。更多關於C#或JavaScript中ArrayLists ,字典或哈希表的信息參考MSDN 。
這是一個基本的例子,說明可以使用一個數組類做什麼
function Start( )
{
var arr = new Array ( ) ;
arr.Push ("Hello"); //添加一個元素
Print(arr[ 0]); //打印第一個元素
arr length = 2 ; //調整數組大小
arr [ 1] = "World"; //將“World”賦給第二個元素
for (var value : String in arr) //遍歷這個數組
{
Print ( value );
}
}
Unity中有兩種類型的數組,內置數組和普通的JavaScript數組。
內置的數組(原始的.NET數組),是非常快速和有效的但是它們不能被調整大小。
它們是靜態類型的,這允許它們在檢視面板中被編輯。這是如何使用內置數組的簡單例子。
//在檢視面板中公開一個浮點數組,你可以在那裡編輯它
var value : float[ ];
Function Start ( )
{
//遍歷數組
for ( var value in values​​){
Print ( value );
}
//因為我們不能調整內置數組的大小
//我們必須重新創建一個數組來調整它的大小
value = new float[ 10 ];
value[ 1 ] = 5.0;//給第二個元素賦值
}
內置數組在性能相關的代碼中非常有用的(使用Unity的JavaScript和內置數組可以非常容易使用mesh interface在一秒內處理兩萬個頂點。) 另一方面,普通的JavaScript數組可以調整大小,排序並可以做所有你期望的數組類的操作。 JavaScript數組不顯示在檢視面板中。你可以容易地在JavaScript數組和內置數組之間轉換。
function Start ( )
{
var array = new Array ( Vector3(0,0,0),Vec​​tor3(0,0,1));
array .Push (Vector3 (0,0,2));
array .Push (Vector3 (0,0,3));
//拷貝js數組到內置數組
var builtinArray : Vector3[ ] = array . ToBuiltin ( Vector3 );
//將內置數組賦給js數組
var newarr = new Array ( builtinArray );
//newarr與array 包含相同的元素
print ( newarr );
}
注意按照Unity的命名規則下面所有函數均大寫開頭。為方便JavaScript用戶, Unity數組類也接受小寫函數。
變量
◆ var length : int
描述:數組的長度屬性,返回或設置數組中元素的數量。
function Start ( )
{
var arr = Array ( "Hello" , "World" ) ;
print (arr . length ) ; //打印兩個
arr . Length = 5 ; //調整數組的大小為5
}
函數
◆ function Add ( value : object ) : void
描述:添加 value 到數組末端。
var arr = new Array ("Hello");
arr.Add (" World ");
Print ( arr ); //打印"Hello ","World"
◆ function Clear ( ) : void
描述: 清空數組。數組的長度將為零。
var hello = new Array ("Hello ","World ");
hello.Clear ( ) ; //現在hello包含零個元素
◆ function Concat ( array :Array , optionalArray0: Array, optionalArray1 : Array):Array
描述:連接兩個或多個數組。這個方法不會改變已有的數字並返回連接後的數組拷貝
function Start ( ) {
var arr = new Array ("Hello","World"):
var arr2 = new Array ("!");
var joined = arr.Concat ( arr2 ); //現在jointed包含所有3個字符串
Print ( joined ); //打印"Hello","World","!"
}
◆ function Join ( seperator :string ) : String
描述:鏈接數組內容為一個字符串。元素將被seperator字符串分割,並返回數組的拷貝
function Start ( ){
var arr = new Array ("Hello" , "World");
print ( arr . join (" , "));//打印"Hello,World"
}
◆ function Pop ( ) : object
描述:移除數組最後一個元素並返回它。
var arr = new Array ("Hello ","World");
arr . Pop ( );
print ( arr );//只打印"Hello"
◆ function Push (value : object) : int
描述: 添加value到數組末端。並返回新數組長度。
var arr = new Array ("Hello");
arr.Push ("World");
print ( arr );//打印"Hello","World"
◆ function RemoveAt (index : int ) : void
描述:從數組中移除索引為index的元素。
var arr = new Array ("Hello" , " and good morning" , "World ");
arr.Remove ( 1 ) ; //移除 "and good morning"
print ( arr );//打印 " Hello World "
◆ function Reverse () : Array
描述:顛倒數組中所有元素順序。
var hello = new Array (" Hello " ," World ") ;
hello Reverse( ) ;
print (hello);//打印World,Hello
◆ function Shift ( ) :object
描述:移除數組的第一個元素並返回它。
var arr = new Array ( " Hello " , " World ");
arr . Shift ( ) ;
print ( " World " ) ; //現在arr只包含" World "
◆ function Sort( ) : Array
描述:排序所有數組元素
var hello = new Array ( " e " ," a " ," b ");
hello . Sort ( ) ;
print ( hello ) ;// 打印 a ,b ,c
◆ function Unshift ( newElement : object , optionalElement : object ) : int
描述: Unshift 添加一個或多個元素到數組的開始位置並返回新的數組長度。
var arr = new Array (" Hello "," World ");
arr . Unshift (" This "," is ");
print ( arr ) ;//打印 This,is,Hello,World
BitStream

BitStream 類表示序列化的變量,打包到一個流中。
數據可以被序列化,傳輸,然後遠端使用這個類接受。參考 Network View component reference
獲取關於網絡同步的信息和Network. OnSerializeNetworkView函數獲取更多信息。
變量
◆ var isReading : bool
描述:這個BitStream現在在被讀嗎?
參考Network. OnSerializeNetworkView
◆ var isWriting : bool
描述:這個BitStream現在在被寫嗎?
參考Network. OnSerializeNetworkView
函數
◆ function Serialize (ref value : bool ) : void
◆ function Serialize (ref value : char ) : void
◆ function Serialize (ref value : short) : void
◆ function Serialize (ref value : int ) : void
◆ function Serialize (ref value : float , maxDelta : float = 0.00001F) : void
◆ function Serialize (ref value : Quaternion, maxDelta : float = 0.00001F) : void
◆ function Serialize (ref value : Vector3, maxDelta : float = 0.00001F) : void
◆ function Serialize (ref value : NetworkPlayer ) : void
◆ function Serialize (ref viewID: NetworkViewID ) : void
描述:BitStream類可以序列化幾個不同類型的變量。
包含:bool , char , short , int , float , Quaternion , Vector3 和NetworkPlayer
注意serialize ( char )系列化一個字節,因此,它只能用於0......255之間的字符。
BoneWeight
結構
網格上一個頂點的蒙皮骨骼權值
每個被蒙皮的點至多有四個骨頭。所有權值的和應該為1。權值和骨骼索引應該被以權值遞減的順序定義。如果一個頂點被少於四個骨骼影響,剩下的權值應該為0。
參見:Mesh.boneWeights變量。
變量
◆ var boneIndex0 : int
描述:第一個骨骼的索引。
參見:weight0 .
◆ var boneIndex1 : int
描述:第二個骨骼的索引。
參見:weight1.
◆ var boneIndex2 : int
描述:第三個骨骼的索引。
參見:weight2 .
◆ var boneIndex3 : int
描述:第四個骨骼的索引。
參見:weight3 .
◆ var weight0 : float
描述:第一個骨骼的蒙皮權值。
參見:boneIndex0.
◆ var weight1 : float
描述:第二個骨骼的蒙皮權值。
參見:boneIndex1.
◆ var weight2 : float
描述:第三個骨骼的蒙皮權值。
參見:boneIndex2.
◆ var weight3 : float
描述:第四個骨骼的蒙皮權值。
參見:boneIndex3.
Bounds
結構
代表一個軸對齊包圍盒。
一個軸對齊包圍盒,簡稱為AABB,是與坐標軸對齊的box並且完全包圍一些物體。因為這個box不會繞著軸旋轉,所以它可以只用center和extents定義,或者用min和max點定義。
Bounds被Collider.bounds,Mesh.bounds,Renderer.bounds使用。
變量
◆var center : Vector3
描述:包圍盒子的中心
◆var extents : Vector3
描述:box的寬度。這個總是size的一半
◆var max : Vector3
描述:box的最大點。這個總是等於center + extents。
◆var min : Vector3
描述:box的最小點。這個總是等於center - extents。
◆var size : Vector3
描述:box的總大小。這個總是extents的二倍。
size.x是寬度, size.y 是高度, size.z 是長度。
構造函數
◆static function Bounds ( center : Vector3 , size : Vector3 ) : Bounds
描述:用給定的center和總size創建新的Bounds。 Bounds extents將是給定size的一半。
var bounds = Bounds ( Vector3.zero , Vector3(1,2,1));//在原點常見柱狀包圍盒
函數
◆function Contains ( point : Vector3 ) : bool
描述:point 包含在這個包圍盒中嗎 ?
◆function Encapsulate ( point : Vector3 ) : void
描述:增大Bounds以包含這個point.
◆function Encapsulate ( bounds : Bounds ) : void
描述:增大bounds來封裝另一個bounds。
◆function Expand ( amount : float ) : void
描述:沿著每個面按照amount增加它的size來擴展這個bounds。
◆function Expand ( amount : Vector3 ) : void
描述:沿著每個面按照amount增加它的size來擴展這個bounds。
◆function IntersectRay ( ray : Ray ) : bool
描述:ray與這個包圍盒相交嗎?
◆function IntersectRay ( ray : Ray , out distance : float ) : bool
描述:ray與這個包圍盒相交嗎?
當IntersectRay返回真,distance將是到射線源點的距離。
◆function SetMinMax ( min : Vector3, max : Vector3 ) : void
描述:設定邊界為盒子的min和max值。
使用這個函數要比分別指定min和max更快。
◆function SqrDistance ( point : Vector3 ) : float
描述: 點到這個包圍盒的最小平方距離。
◆function ToString ( ) : string
描述:返回一個格式化好的字符串
collision

描述碰撞
Collision 信息被傳遞到Collider . OnCollisionEnter , Collider . OnCollisionStay和Collider.OnCollisionExit事件。參見: ContactPoint.
變量
◆var collider : Collider
描述:碰撞到的Collider ( 只讀 ).
為了得到所有被碰撞到的碰撞器的細節,你需要迭代接觸點( contacts屬性)。
◆var contacts : ContactPoint [ ]
描述:接觸點由物理引擎產生。
每個contact包含一個接觸點,法線和兩個發生碰撞的碰撞器(參考ContactPoint)。在OnCollisionStay或者OnCollisionEnter內可以確保contacts有至少一個元素。
function OnCollisionStay ( collision : Collision ){
//檢查碰到碰撞器是否有剛體
//然後使用一個力
for ( var contact : ContactPoint in collision . contacts ) {
print ( contact.thisCollider . name + "hit" + contact . otherCollider .name );
//可視化接觸點
Debug.DrawRay ( contact . point , contact . normal, Color .white ) ;
}
}
//一枚手榴彈,在擊中一個表面時初始化一個爆炸預設,然後銷毀它
var explosionPrefab : Transform;
function OnCollisionEnter( collision : Collision ){
//旋轉這個物體使y軸面沿著表面法線的方向
var contact = collision . contact [ 0 ];
var rot = Quaternion . FromToRotation ( Vector3.up , contact . normal ) ;
var pos = contact . point ;
Instantiate ( explosionPrefab , pos , rot ) ;
Destory ( gameObject );//銷毀這個投射物
}
◆var gameObject : GameObject
描述:/ gameObject / 是與之碰撞的物體(只讀)
◆var relativeVelocity : Vector3
描述: 兩個碰撞物體的相對線形速度(只讀)。
//當以較大的速度碰到一個物體時播放聲音
function OnCllisionEnter ( collision : Collision ) {
if ( collision . relativeVelocity . magnitude > 2 )
audio .Play ( );
}
◆var rigibody : Rigidbody
描述:碰撞到的Rigidbody(只讀),如果碰到的物體是一個沒有附加剛體的碰撞器,返回null
//讓所有碰到的剛體向上飛
function OnCollisionStay ( collision : Collision ) {
//檢查碰到的碰撞器是否有一個剛體,然後使用力
if ( collision . rigidbody ){
collision . rigidbody .AddForce ( Vector3 . up * 15 ) ;
}
}
◆var transform : Transform
描述:碰撞到的物體的Transform(只讀)。
如果碰到一個帶有Rigidbody的碰撞器,transform將是所有附加剛體的變換。如果碰到了一個沒有剛體的碰撞器,transform將是所有附加碰撞器的變換。
color
結構
表示RGBA顏色。
這個結構被用在整個Unity中傳遞顏色。每個顏色組件是一個0到1之間的浮點數。
組件(r ,g ,b )在RGB顏色空間內定義一個顏色。 Alpha組件(a)透明性- alpha為0是完全不透明,alpha為1是完全透明。
變量
◆var a : float
描述:顏色的Alpha組件。
var color = Color . white ;
color . a = 0 ;
◆var b : float
描述:顏色的藍色組件。
var color = Color .white;
color .b = 0 ;
◆var g : float
描述:顏色的綠色組件
var color = Color . white ;
color . g = 0 ;
◆var grayscale : float
描述:顏色的灰度值(只讀)
var color = Color ( 3 , 4 ,6 ) ;
print ( color . grayscale ) ;
◆var r : float
描述:顏色的紅色組件。
var color = Color . white ;
color . r = 0
◆var this [ index : int ] : float
描述:分別使用[ 0 ] ,[ 1 ] ,[ 2 ] ,[ 3 ]訪問r ,g , b ,a組件。
Color p ;
p [ 1 ] = 5 ;//與p .g = 5相同
構造函數
◆static function Color ( r : float , g : float , b : float, a: float ) : Color
描述:用給定的r , g , b , a ,組件構建一個新的顏色。
var color = Color ( 0.2 , 0.3 , 0.4 , 0.5 ) ;
◆static function Color ( r : float , g : float , b : float ) : Color
描述:用給定的r , g , b 組件構建一個新的顏色並設置a 為1
var color = Color (0.2 , 0.3 , 0.4 ) ;
函數
◆function ToString ( ):string
描述:返回格式化好的這個顏色的字符串。
print ( Color .white ) ;
類變量
◆static var black : Color
描述:黑色。 RGBA為( 0 , 0 , 0 , 1 ).
◆static var blue : Color
描述:藍色。 RGBA為( 0 , 0 , 1 , 1 ).
◆static var clear : Color
描述:完全透明。 RGBA為( 0 ,0, 0, 0 ).
◆static var eyan : Color
描述:青色。 RGBA為( 0 , 1 , 1 , 1 ).
◆static var gray : Color
描述:灰色。 RGBA為 ( 5 , 5 , 5 , 1 ).
◆static var green : Color
描述:綠色。 RGBA為(0, 1 , 0, 1 ).
◆static var grey : Color
描述:英式拼法為gray。 RGBA為(0.5 , 0.5 , 0.5 , 1 ).
◆static var magenta : Color
描述:紫紅色。 RGBA為(1 , 0 , 1 , 1 ).
◆static var red : Color
描述:全紅。 RGBA為(1 , 0 , 0, 1 ).
◆static var white : Color
描述:全白。 RGBA為(1 , 1 , 1 , 1 ).
◆static var yellow : Color
描述:黃色。 RGBA是怪異的(1 , 235/255 , 4/255 , 1 ),但是這個顏色看起來非常好!
類方法
◆static function Lerp ( a : Color , b : Color , t : float ) : Color
描述:在顏色a和顏色b之間按照t插值。
/ t /被限定到0 和1之間,當t為0時返回a . 當t為1時返回b
◆static operator * ( a : Color , b : Color) : Color
描述:乘兩個顏色,每個組件被分別乘。
◆static operator * ( a : Color , b : float) : Color
描述:用浮點數b乘以顏色a。每個組件被分別乘。
◆static operator * ( a : float , b : Color) : Color
描述:用浮點數b乘以顏色a。每個組件被分別乘。
◆static operator + ( a : Color , b : Color) : Color
描述:加兩個顏色,每個組件被分別加。
◆static operator - ( a : Color , b : Color) : Color
描述:從顏色a中減去顏色b。每個組件被分別減。
◆static operator / ( a : Color , b : float) : Color
描述:乘用浮點數b除以a。每個組件被分別除。
◆static implicit function Color ( v : Vectro4 ) : Color
描述:Colors可以被隱式轉化為Vector4,或由它轉化而來。
◆static implicit function Vector4 ( c : Color ) : Vector4
描述:Colors以被隱式的轉化為Vector4,或由它轉化而來。
ContactPoint
結構
描述:碰撞發生的接觸點。
接觸點被存儲在collision結構中,參見collision , collision . OnCollisionEnter, Collision . OnCollisionStay , Collision . OnCollisionExit.
變量
◆var normal : Vector3
描述:接觸點的法線
◆var otherCollider : Collider
描述:碰撞中的另一個碰撞器
◆var point : Vector3
描述:接觸點
◆var thisCollider : Collider
描述:碰撞中的第一個碰撞器
ControllerColliderHit

ControllerColliderHit被CharacterController . OnControllerColliderHit使用來給出詳細的關於碰撞和如何處理它們的信息。

_________________
歡迎大家多多交流~

avatar
aaa1218bbb
社員
社員

文章數 : 65
積分 : 2180
注冊日期 : 2011-11-22

檢視會員個人資料 http://design.gugebb.com

回頂端 向下

上一篇主題 下一篇主題 回頂端


 
這個論壇的權限:
無法 在這個版面回復文章