日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Unity3D脚本学习1

發布時間:2023/12/10 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Unity3D脚本学习1 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Unity3D腳本參考1

一、 腳本概覽

這是一個關于Unity內部腳本如何工作的簡單概覽。
Unity內部的腳本,是通過附加自定義腳本對象到游戲物體組成的。在腳本對象內部不同志的函數被特定的事件調用。最常用的列在下面:
Update:
這個函數在渲染一幀之前被調用,這里是大部分游戲行為代碼被執行的地方,除了物理代碼。
FixedUpdate:
這個函數在每個物理時間步被調用一次,這是處理基于物理游戲的地方。
在任何函數之外的代碼:
在任何函數之外的代碼在物體被加載的時候運行,這個可以用來初始化腳本狀態。
注意:文檔的這個部份假設你是用Javascript,參考用C#編寫獲取如何使用C#和Boo編寫腳本的信息。
你也能定義事件句柄,它們的名稱都以On開始,(例如OnCollisionEnter),為了查看完整的預定義事件的列表,參考MonoBehaviour 文檔。

概覽:常用操作
大多數游戲物體的操作是通過游戲物體的Transform或Rigidbody來做的,在行為腳本內部它們可以分別通過transform和rigidbody訪問,因此如果你想繞著Y軸每幀旋轉5度,你可以如下寫:
void Update(){
transform.Rotate(0,5,0);
}
如果你想向前移動一個物體,你應該如下寫:
void Update(){
transform.Translate(0,0,2);
}
概覽:跟蹤時間
Time類包含了一個非常重要的類變量,稱為deltaTime,這個變量包含從上一次調用Update或FixedUpdate(根據你是在Update函數還是在FixedUpdate函數中)到現在的時間量。
所以對于上面的例子,修改它使這個物體以一個恒定的速度旋轉而不依賴于幀率:
void Update(){
transform.Rotate(0,5Time.deltaTime,0);
}
移動物體:
void Update(){
transform. Translate (0, ,0,2Time.deltaTime);
}
如果你加或是減一個每幀改變的值,你應該將它與Time.deltaTime相乘。當你乘以Time.deltaTime時,你實際的表達:我想以10米/秒移動這個物體不是10米/幀。這不僅僅是因為你的游戲將獨立于幀而運行,同時也是因為運動的單位容易理解。( 米/秒)
另一個例子,如果你想隨著時間增加光照的范圍。下面的表達式,以2單位/秒改變半
徑。
void Update (){
light.range += 2.0 * Time.deltaTime;
}
當通過力處理剛體的時候,你通常不必用Time.deltaTime,因為引擎已經為你考慮到了這一點。
概覽:訪問其他組件

組件被附加到游戲物體,附加Renderer到游戲物體使它在場景中渲染,附加一個Camera使它變為相機物體,所有的腳本都是組件,因為它們能被附加到游戲物體。
最常用的組件可以作為簡單成員變量訪問:
Component 可如下訪問
Transform transform
Rigidbody rigidbody
Renderer renderer
Camera camera (only on camera objects)
Light light (only on light objects)
Animation animation [動畫播放]
Collider collider
…等等。
對于完整的預定義成員變量的列表。查看Component,Behaviour和MonnoBehaviour類文檔。如果游戲物體沒有你想取的相同類型的組件,上面的變量將被設置為null。
任何附加到一個游戲物體的組件或腳本都可以通過GetComponent訪問。
transform.Translate(0,3,0);
//等同于
GetComponent(Transform).Translate(0, 1, 0);
注意transfom和Transform之間大小寫的區別,前者是變量(小寫),后者是類或腳本名稱(大寫)。大小寫不同使你能夠從類和腳本名中區分變量。

應用我們所學,你可以使用GetComponent找到任何附加在同一游戲物體上的腳本和組件,請注意要使用下面的例子能夠工作,你需要有一個名為OtherScript的腳本,其中包含一個DoSomething函數。OtherScript腳本必須與下面的腳本附加到相同的物體上。
//這個在同一游戲物體桑找到名為OtherScript的腳本
//并調用它上加的DoSomething
void Update(){
otherScript = GetComponent(OtherScript);
otherScript.DoSomething();
}
/

概覽:訪問其它游戲物體
大多數高級的代碼不僅需要操作一個物體,Unity腳本接口有各種方法來找到并訪問其他游戲物體和組件。在下面,我們假定有個一名為OtherScript,js的腳本附加到場景的游戲物體上。
var foo = 5;
void DoSomething ( param : String) {
print(param + " with foo: " + foo);
}
1.通過檢視面板賦值引用
你可以通過檢視面板賦值變量到任何物體
//變換拖動到target的物體
var target : Transform;
void Update ()
{
target.Translate(0, 1, 0);
}
你也可以在檢視面板中公開到其他物體的引用,下面你可以拖動一個包含的游戲物體到檢視面板中的target槽。
//設置在檢視面板中賦值的target變量上的foo,調用DoSomething
var target : OtherScript;
void Update ()
{
//設置target物體的foo變量
target.foo = 2;
// 調用target上的DoSomething
target.DoSomething(“Hello”);
}
2.通過物體層次定位
對于一個已經存在的物體,可以通過游戲物體的Transform組件來找到子和父物體;
//找到腳本所附加的
//游戲物體的子“Hand”
transform.Find(“Hand”).Translate(0, 1, 0);
一旦在層次視圖中找到這個變換,你可以使用GetComponent來獲取其他腳本,
//找到名為“Hand”的子
//在附加到它上面的OtherScript中,設置foo為2;
transform.Find(“Hand”).Translate(0, 1, 0);
//找到名為“Hand”的子
//然后應用一個力到附加在hand上的剛體
transform.Find(“Hand”).GetComponent(OtherScript).DoSomething(“Hello”);
// 找到名為“Hand”的了
// 然后應用一個力到附加在hand上的剛體
transform.Find(“Hand”).rigidbody.AddForce(0, 10, 0);
你可以循環所有的子,
//變換的所有子向上移動10個單位
for (var child : Transform in transform)
{
child.Translate(0, 1, 0);
}
參考Transform類文檔獲取更多信息。
3.根據名稱或標簽定位.
你可以使用GameObject.FindWithTag和GameObject.FindGameObjectsWithTag搜索具有特定標簽的游戲物體,使用GameObject.Find根據名稱查找物體。
void Start ()
{
// 按照名稱
var go = GameObject.Find(“SomeGuy”);
go.transform.Translate(0, 1, 0);
// 按照標簽

var player = GameObject.FindWithTag(“Player”);
player.transform.Translate(0, 1, 0);
}
你可以在結果上使用GetComponent,在找到的游戲物體上得到任何腳本或組件。
void Start ()
{
// 按名稱
var go = GameObject.Find(“SomeGuy”);
go.GetComponent(OtherScript).DoSomething();

// 按標簽
var player = GameObject.FindWithTag(“Player”);
player.GetComponent(OtherScript).DoSomething();
}
一些特殊的物體有快捷方式,如主相機使用Camera.main。
4.作為參數傳遞
一些事件消息在事件包含詳細信息。例如,觸發器事件傳遞碰撞物體的Collider組件到處理函數。
OnTriggerStay給我們一個到碰撞器的引用。從這個碰撞器我們可以獲取附加到其上的剛體。
void OnTriggerStay( other : Collider ) {
// 如果另一個碰撞器也有一個剛體
// 應用一個力到它上面
if (other.rigidbody) {
other.rigidbody.AddForce(0, 2, 0);
}
}
或者我們可以通過碰撞器獲取附加在同一個物體上的任何組件。
void OnTriggerStay( other : Collider ) {
// 如果另一個碰撞器附加了OtherScript
// 調用它上面的DoSomething
// 大多數時候碰撞器不會附加腳本
// 所以我們需要首先檢查以避免null引用異常
if (other.GetComponent(OtherScript)) {
other.GetComponent(OtherScript).DoSomething();
}
}
注意通過上述例子中的other變量,你可以訪問碰撞物體中的任何組件。
5.一種類型的所有腳本
使用Object.FindObjectsOfType找到所有具有相同類或腳本名稱的物體,或者使用Object.FindObjectOfType.找到這個類型的第一個物體。
void Start ()
{
// 找到場景中附加了OtherScript的任意一個游戲物體
var other : OtherScript = FindObjectOfType(OtherScript);
other.DoSomething();
}
概覽:向量
Unity使用Vector3類同一表示全體3D向量,3D向量的不同組件可以通過想x,y和z成員變量訪問。
var aPosition : Vector3;
aPosition.x = 1;
aPosition.y = 1;
aPosition.z = 1;
你也能夠使用Vector3構造函數來同時初始化所有組件。
var aPosition = Vector3(1, 1, 1);
Vector3也定義了一些常用的變量值。
var direction = Vector3.up; // 與 Vector3(0, 1, 0);相同
單個向量上的操作可以使用下面的方式訪問:
someVector.Normalize();
使用多個向量的操作可以使用Vector3類的數;
theDistance = Vector3.Distance(oneVector, otherVector);
(注意你必須在函數名之前寫Vector3來告訴JavaScript在哪里找到這個函數,這適用于所有類函數)
你也可以使用普通數學操作來操縱向量。
combined = vector1 + vector2;
查看Vector3類文檔獲取完整操縱和可用屬性的列表。

概覽:成員變量 & 全局變量
定義在任何函數之外的變量是一個成員變量。在Unity中這個變量可以通過檢視面板來訪問,任何保存在成員變量中的值也可以自動隨工程保存。
var memberVariable = 0.0;
上面的變量將在檢視面板中顯示為名為"Member Variable"的數值屬性。
如果你設置變量的類型為一個組件類型(例如Transform, Rigidbody, Collider,任何腳本名稱,等等)然后你可以在檢視面板中通過拖動一個游戲物體來設置它們。
var enemy : Transform;
void Update()
{
if ( Vector3.Distance( enemy.position, transform.position ) < 10 );
print(“I sense the enemy is near!”);
}
}
你也可以創建私有成員變量。私有成員變量可以用來存儲那些在該腳本之外不可見的狀態。私有成員變量不會被保存到磁盤并且在檢視面板中不能編輯。當它被設置為調試模式時,它們在檢視面板中可見。這允許你就像一個實時更新的調試器一樣使用私有變量。
private var lastCollider : Collider;
void OnCollisionEnter( collisionInfo : Collision ) {
lastCollider = collisionInfo.other;
}
全局變量
你也可以使用static關鍵字創建全局變量
這創造了一個全局變量,名為someGlobal
// 'TheScriptName.js’中的一個靜態變量
static var someGlobal = 5;
// 你可以在腳本內部像普通變量一樣訪問它
print(someGlobal);
someGlobal = 1;
為了從另一個腳本訪問它,你需要使用這個腳本的名稱加上一個點和全局變量名。
print(TheScriptName.someGlobal);
TheScriptName.someGlobal = 10;

概覽:實例化
實例化,復制一個物體。包含所有附加的腳本和整個層次。它以你期望的方式保持引用。到外部物體引用的克隆層次將保持完好,在克隆層次上到物體的引用映射到克隆物體。
實例化是難以置信的快和非常有用的。因為最大化地使用它是必要的。
例如, 這里是一個小的腳本,當附加到一個帶有碰撞器的剛體上時將銷毀它自己并實例化一個爆炸物體。
var explosion : Transform;
// 當碰撞發生時銷毀我們自己
// 并生成給一個爆炸預設
void OnCollisionEnter (){
Destroy (gameObject);
var theClonedExplosion : Transform;
theClonedExplosion = Instantiate(explosion, transform.position, transform.rotation);
}
實例化通常與預設一起使用

概覽:Coroutines & Yield
在編寫游戲代碼的時候,常常需要處理一系列事件。這可能導致像下面的代碼。
private var state = 0;
void Update()
{
if (state == 0) {
// 做步驟0
state = 1;
return;
}
if (state == 1) {
// 做步驟1
state = 2;
return;
}
// …
}
更方便的是使用yield語句。yield語句是一個特殊類型的返回,這個確保在下次調用時該函數繼續從該yield語句之后執行。
while(true) {
// 做步驟0
yield; //等待一幀
// 做步驟1
yield; //等待一幀
// …
}
你也可以傳遞特定值給yield語句來延遲Update函數的執行,直到一個特定的事件發生。
// 做一些事情
yield WaitForSeconds(5.0); //等待5秒
//做更多事情…
可以疊加和連接coroutines。
這個例子執行Do,在調用之后立即繼續。
Do ();
print (“This is printed immediately”);
void Do ()
{
print(“Do now”);
yield WaitForSeconds (2);
print(“Do 2 seconds later”);
}
這個例子將執行Do并等待直到它完成,才繼續執行自己。
//鏈接coroutine
yield StartCoroutine(“Do”);
print(“Also after 2 seconds”);
print (“This is after the Do coroutine has finished execution”);
void Do ()
{
print(“Do now”);
yield WaitForSeconds (2);
print(“Do 2 seconds later”);
}
任何事件處理句柄都可以是一個coroutine
注意你不能在Update或FixedUpdate內使用yield,但是你可以使用StartCoroutine來開始一個函數。
參考YieldInstruction, WaitForSeconds, WaitForFixedUpdate, Coroutine and MonoBehaviour.StartCoroutine獲取更多使用yield的信息。

概覽:用C#編寫腳本
除了語法,使用C#或者Boo編寫腳本還有一些不同。最需要注意的是:
1.從MonoBehaviour繼承
所有的行為腳本必須從MonoBehaviour繼承(直接或間接)。在Javascript中這自動完成,但是必須在C#或Boo腳本中顯示申明。如果你在Unity內部使用Asset -> Create -> C Sharp/Boo Script菜單創建腳本,創建模板已經包含了必需的定義。
public class NewBehaviourScript : MonoBehaviour {…} // C#
class NewBehaviourScript (MonoBehaviour): … # Boo
2.使用Awake或Start函數來初始化
Javascript中放置在函數之外的代碼,在C#或Boo中要放置在Awake或Start中。
Awake和Start的不同是Awake在場景被加載時候運行,而Start在第一次調用Update或FixedUpdate函數之前被調用,所有Awake函數在任何Start函數調用之前被調用。
3.類名必須與文件名相同
Javascript中,類名被隱式地設置為腳本的文件名(不包含文件擴展名)。在c#和Boo中必須手工做。
4.在C#中Coroutines有不同語法。
Coroutines必有一個IEnumerator返回類型,并且yield使用yield return… 而不是yield…
using System.Collections;
using UnityEngine;
public class NewBehaviourScript : MonoBehaviour {
// C# coroutine
IEnumerator SomeCoroutine ()
{
// 等一幀
yield return 0;
//等兩秒
yield return new WaitForSeconds (2);
}
}
5.不要使用命名空間
目前Unity還不支持將代碼放置在一個命名空間中,這個需要將會出在未來的版本中。
6.只有序列化的成員變量會顯示在檢視面板中
私有和保護成員變量只在專家模式中顯示,屬性不被序列化或顯示在檢視面板中。
7.避免使用構造函數
不要在構造函數中初始化任何變量,使用Awake或Start實現這個目的。即使是在編輯模式中Unity也自動調用構造函數,這通常發生在一個腳本被編譯之后,因為需要調用構造函數來取向一個腳本的默認值。構造函數不僅會在無法預料的時刻被調用,它也會為預設或未激活的游戲物體調用。
單件模式使用構造函數可能會導致嚴重的后果,帶來類似隨機null引用異常。
因此如果你想實現,如,一個單件模式,不要使用構造函數,而是使用Awake。其實上,沒有理由一定要在繼續自MononBehaviour類的構造函數中寫任何代碼。

概覽:最重要的類
Javascript中可訪問的全局函數或C#中的基類
移動/旋轉物體
動畫系統
剛體
FPS或第二人稱角色控制器
概覽:性能優化
1.使用靜態類型
在使用Javascript時最重要的優化是使用靜態類型而不是動態類型,Unity使用一種叫做類型推理的技術來自自動轉換Javascript為靜態類型編碼而不需要你做任何工作。
var foo=5;
在上面的例子里foo會自動被推斷為一個整型值。因此,Unity可能使用大量的編譯時間來優化。而不使用耗時的動態名稱變量查找等。這就是為什么Unity比其他在JavaScript的實現平均快20倍的原因之一。
唯一的問題是,有時并非一切都可以做類型推斷。Unity將會為這些變量重新使用動態類型。通過回到動態類型,編寫JavaScript代碼很簡單。但是這也使得代碼運行速度較慢。
讓我們看一些例子:
void Start ()
{
var foo = GetComponent(MyScript);
foo.DoSomething();
}
這里foo將是動態類型,因此調用DoSomething函數將使用較長時間,因為foo的類型是未知的,它必須找出它是否支持DoSomething函數,如果支持,調用它。
void Start ()
{
var foo : MyScript = GetComponent(MyScript);
foo.DoSomething();
}
這里我們強制foo為指定類型,你將獲得更好的性能。
2.使用#pragma strict
當然現在問題是,你通常沒有意識到你在使用動態類型。#pragma strict解決了這個!簡單的在腳本頂部添加#pragma strict。然后,unity將在腳本中禁用動態類型,強制使用靜態類型,如果一個類型未知。Unity將報告編譯錯誤。那么在這種情況下foo將在編譯時產生一個錯誤:
#pragma strict
void Start ()
{
var foo = GetComponent(MyScript);
foo.DoSomething();
}
3.緩存組件查找
另一個優化是組件緩存。不幸的是該優化需要一點編碼,并且不一定是值得的,但是如
果你的腳本是真的用了很長時間了,你需要把最后一點表現出來,這是一個很好的優化。
當你訪問一個組件通過GetComponent或訪問變量,Unity會通過游戲對象找到正確的組件。這一次可以很容易地通過緩存保存在一個私有變量里引用該組件。
簡單地把這個:
void Update ()
{
transform.Translate(0, 0, 5);
}
變成:
private var myTransform : Transform;
void Awake ()
{
myTransform = transform;
}
void Update ()
{
myTransform.Translate(0, 0, 5);
}
后者的代碼將運行快得多,因為Unity沒有找到變換在每一幀游戲組件中的對象。這同樣適用于腳本組件,在你使用GetComponent代替變換或者其它的東西。
4.使用內置數組
內置數組的速度非常快,所以請使用它們。
而整列或者數組類更容易使用,因為你可以很容易地添加元素,他們幾乎沒有相同的速度。內置數組有一個固定的尺寸,但大多數時候你事先知道了最大的大小在可以只填寫了以后。關于內置數組最好的事情是,他們直接嵌入在一個結構緊湊的緩沖區的數據類型沒有任何額外的類型信息或其他開銷。因此,遍歷是非常容易的,作為一切緩存在內存中的線性關系。
private var positions : Vector3[];
void Awake ()
{
positions = new Vector3[100];
for (var i=0;i<100;i++)
positions[i] = Vector3.zero;
}
5.如果你不需要就不要調用函數
最簡單的和所有優化最好的是少工作量的執行。例如,當一個敵人很遠最完美的時間就是敵人入睡時可以接受。直到玩家靠近時什么都沒有做。這是種緩慢的處理方式的情況:
void Update ()
{
// 早期進行如果玩家實在是太遙遠。
if (Vector3.Distance(transform.position, target.position) > 100)
return;
perform real work work…
}
這不是一個好主意,因為Unity必須調用更新功能,而你正在執行工作的每一個幀。一個比較好的解決辦法是禁用行為直到玩家靠近。有3種方法來做到這一點:
1.使用OnBecameVisible和OnBecameInvisible。這些回調都是綁到渲染系統的。只要任何相機可以看到物體,OnBecameVisible將被調用,當沒有相機看到任何一個,OnBecameInvisible將被調用。這種方法在很多情況下非常有用,但通常在AI中并不是特別有用,因為只要你把相機離開他們敵人將不 可用。
void OnBecameVisible () {
enabled = true;
}
void OnBecameInvisible ()
{enabled = false;
}
2.使用觸發器。一個簡單的球形觸發器會工作的非常好。一旦你離開這個影響球你將得到OnTriggerEnter/Exit調用。
void OnTriggerEnter (c : Collider)
{
if (c.CompareTag(“Player”))
enabled = true;
}
void OnTriggerExit (c : Collider)
{
if (c.CompareTag(“Player”))
enabled = false;
}
3.使用協同程序。Update調用的問題是它們每幀中都發生。很可能會只需要每5秒檢檢查一次到玩家的距離。這應該會節省大量的處理周期。
概覽:腳本編譯(高級)
Unity編譯所有的腳本為.NET dll文件,.dll將在運行時編譯執行。
這允許腳本以驚人的速度執行。這比傳統的javascript快約20倍。比原始的C++代碼慢大約50%。在保存的時候,Unity將花費一點時間來編譯所有腳本,如果Unity還在編譯。你可以在Unity主窗口的右下角看到一個小的旋轉進度圖標。
腳本編譯在4個步驟中執行:
1.所有在"Standard Assets", “Pro Standard Assets” 或 “Plugins"的腳本被首先編譯。
在這些文件夾之內的腳本不能直接訪問這些文件夾之外腳本。
不能直接引用或它的 變量,但是可以使用GameObject.SentMessage與它們通信。
2.所有在"Standard Assets/Editor”, “Pro Standard Assets/Editor” 或 "Plugins/Editor"的腳本被首先編譯。
如果你想使用UnityEditor命名空間你必須放置你的腳本在這些文件夾中,例如添加菜單項或自定義的向導,你都需要放置腳本到這些文件夾。
這些腳本可以訪問前一組中的腳本。
3.然后所有在"Editor"中的腳本被編譯。
如果你想使用UnityEditor命名空間你必須放置你的腳本在這些文件夾中。例如添加菜單單項或自定義的向導,你都需要放置腳本到這些文件夾。
這些腳本可以訪問所有前面組中的腳本,然而它們不能訪問后面組中的腳本。
這可能會是一個問題,當編寫編輯器代碼編輯那些在后面組中的腳本時。有兩個解決方法:1、移動其他腳本到"Plugins"文件夾 2、利用JavaScript的動態類型,在javascript中你不需要知道類的類型。在使用GetComponent時你可以使用字符串而不是類型。你也可以使用SendMessage,它使用一個字符串。
4.所有其他的腳本被最后編譯
所有那些沒有在上面文件夾中的腳本被最后編譯。
所有在這里編譯的腳本可以訪問第一個組中的所有腳本(“Standard Assets”,“Pro
Standard Assets” or “Plugins”)。這允許你讓不同的腳本語言互操作。例如,如果你想創建一個JavaScript。它使用一個C#腳本;放置C#腳本到"Standard Assets"文件夾并且JavaScript放置在"Standard Assets"文件夾之外。現在JavaScript可以直接引用c#腳本。
放置在第一個組中的腳本,將需要較長的編譯時間,因為當他們被編譯后,第三組需要被重新編譯。因此如果你想減少編譯時間,移動那些不常改變 的到第一組。經常改變的到第四組。/

二、 運行時類
AnimationCurve

動畫曲線,在給定的時間添加關鍵幀并確定曲線。
變量
◆ var keys : Keyframe[]
描述:定義在動畫曲線中的所有鍵。這讓你從數組中清理,添加或移除鍵。
如果鍵沒有按照時間順序,它們會在賦值的時候自動排序。
◆ var length : int
描述:曲線中鍵的數量(只讀)。
◆ var preWrapMode : WrapMode
描述:第一幀之前動畫的行為。
◆ var this[index : int] : Keyframe
描述:取向索引為index的鍵(只讀)。
構造函數
◆ static void AnimationCurve(params keys : Keyframe[]) : AnimationCurve
描述:從任意數量的關鍵幀創建一個動畫曲線。
該函數從可變數量的Keyframe參數創建一個曲線,如果你想從一個關鍵幀數組中創建一個曲線,創建一個空的曲線并指定keys屬性。
//一個慢退慢出的動畫曲線(切線都是平的)。
var curve = new AnimationCurve(Keyframe(0, 0), Keyframe(1, 1);
void Update ()
{
transform.position.x = Time.time;
transform.position.y = curve.Evaluate(Time.time);
}
◆ static void AnimationCurve () : AnimationCurve
描述:創建一個空的動畫曲線
函數
◆ void AddKey (time : float, value : float) : int
描述:添加一個新的鍵到曲線。
平滑切線將被自動為該鍵的計算,返回該鍵的索引,如果因為在同一時間上已經有另一個關鍵幀而不能添加鍵,將返回-1。
◆ void AddKey (key : Keyframe) : int
描述:添加一個新的鍵到曲線。
返回該鍵的索引,如果因為在同一時間上已經有另一個關鍵幀而不能添加鍵,將返回-1。
◆ void Evaluate (time : float) : float
描述:該動畫曲線在time的值。
◆ void MoveKey (index : int, key : Keyframe) : int
描述:移除index處的關鍵幀并插入鍵。
如果一個關鍵幀已經存在于key-time,老的關鍵幀位置時間key[index].time/將被用來替換,這對于在一個曲線編輯器中拖動關鍵幀是一個理想的行為,移動它后返回關鍵幀的索引。
◆ void RemoveKey (index : int) : void
描述:移除一個鍵
◆ void SmoothTangents (index : int, weight : float) : void
描述:平滑位于index處的關鍵幀的進出切線。
權值為0時平均切線。
類方法
◆ static void EaseInOut (timeStart : float, valueStart : float, timeEnd : float, valueEnd : float) : AnimationCurve
描述:一個漸進漸出的曲線,開始于timeStart,valueStart并結束于timeEnd, valueEnd.
◆ static void Linear (timeStart : float, valueStart : float, timeEnd : float, valueEnd : float) : AnimationCurve
描述:一個直線,開始于timeStart,valueStart并結束于timeEnd, valueEnd.
AnimationEvent

AnimationEvent類似于SendMessage讓你調用一個腳本函數,這個腳本是動畫播放的一部分。
變量
◆ var animationState : AnimationState
描述:引發這個事件的動畫狀態。
當這個方法在動畫事件回調之外被調用用時返回null。
◆ var date:string
描述:存儲在動畫剪輯中的字符串數據并將被發送到動畫事件。
◆ var voidName : string
描述:被調用的函數的名稱
這與調用gameObject.SendMessage(animationEvent.voidName,animationEvent)相同;
◆ var messageOptions :SendMessageOptions
描述:如果選項被設置為SendMessageOptions.RequireReceiver(缺省),當消息沒有被任何組件接收時將打印一個錯誤消息。
◆ var time:float
描述:該事件被引發的時間。
構造函數
◆ static void AnimationEvent () : AnimationEvent
描述:創建一個新的動畫事件

AnimationState

AnimationState完全控制動畫混合。
在大多數情況下Animation接口就足夠了,并且更容易使用。如果你需要完全控制動畫播放過程中的混合時,使用AnimationState。
當動畫播放時,AnimationState允許你修改速度,權值。時間和層。也可以設置動畫合成和wrapMode
動畫
變量
◆ var blendMode : AnimationBlendMode
描述:使用哪個混合模式?
// 設置leanLeft動畫為附加混合
animation[“leanLeft”].blendMode = AnimationBlendMode.Additive;
◆ var clip :AnimationClip
描述:該動畫狀態播放的剪輯。
// 打印動畫剪輯的幀頻到控制臺
print(animation[“walk”]clio.frameRate);
◆ var enabled : bool
描述:啟用/禁用動畫
對于需要考慮任何影響的動畫,權值需要設置成為一個大于零的值。如果動畫被禁用,時間將暫停直到動畫再次啟用。
// 啟用walk循環
animation[“Walk”].enabled = true;
animation[“Walk”].weight = 1.0;
◆ var layer : int
描述:動畫的層。在計算混合權值時,位于較高層的動畫將首先獲得它們的權值。
只有較高層的動畫沒有使用完全全部權值時,較低層的動畫才能接收混合權值。
// 放置walk和run動畫在層1
animation[“Walk”].layer = 1;
animation[“Run”].layer = 1;
◆ var length : float
描述:動畫剪輯的長度,以秒計。
// 打印Walk動畫的長度
print (animation[“Walk”].length);
◆ var name :string
描述:動畫的名稱。
◆ var normalizedSpeed : float
描述:歸一化播放速度。
這最常用于混合兩個動畫時同步播放速度。在多數情況下使用animation.SyncLayer是更容易也更好
// 同步run和walk速度
animation[“Run”].normalizedSpeed = animation[“Walk”].speed;
◆ var normalizedTime : float
描述:動畫的當前歸一化時間。
1為動畫的末端。 0.5為動畫的中部。
// 快進到動畫的中部
animation[“Walk”].normalizedTime = 0.5;
◆ var speed : float
描述:動畫的播放速度。1為正常播放速度。
負的播放速度將回放動畫。
// 向后走
animation[“Walk”].speed = -1.0;
// 以雙倍速度行走
animation[“Walk”].speed = 2;
◆ var time :float
描述:動畫的當前時間
如果時間大于長度它將按照wrapMode回繞。該值可以大于動畫的長度。看這種情況下播放模式將在采樣前重映射時間。這個值從0到無窮。
// 回退walk動畫
animation[“Walk”].time = 0.0;
◆ var weight : float
描述:動畫的權值
// 設置walk動畫的混合權值為0.5
animation[“Walk”].weight = 0.5;
◆ var wrapMode : WrapMode
描述:動畫的回繞模式
默認的wrapMode被初始化為在Animation組件中設置的回繞模式值。
// 設置walk動畫回繞模式為循環
animation[“Walk”].wrapMode = WrapMode.Loop;
函數
◆ void AddMixingTransform (mix : Transform, recursive : bool = true) : void
描述:添加應該被動畫的變換。這允許你縮減需要創建的動畫數量。
例如你可能有一個揮手的動畫。你可能想在一個空閑角色或行走的角色上播放揮手動畫。那么你需要為空閑和行走分別創建揮手動畫。運用合成揮手動畫,它將由肩膀完全控制。但是下半身不會受它的影響,繼續播放空閑或行走動畫。因此你只需要一個揮手動畫。
如果recursive為真,所有mix變換的子也都將被動畫。如果你不調用AddMixingTransform,所有動畫曲線將被使用。
// 使用路徑添加混合
var shoulder : Transform;
animation[“wave_hand”].AddMixingTransform(shoulder);
void Start ()
{
//使用路徑添加混合變換
var mixTransform = transform.Find(“root/upper_body/left_shoulder”);
animation[“wave_hand”].AddMixingTransform(mixTransform);
}
Application

訪問應用程序的運行時數據。
這個類包含靜態的方法來查找相關的信息并控制運行時數據。
類變量
◆ static var absoluteURL : string
描述:到web播放器數據文件夾的絕對路徑(只讀)。
Application.absoluteURL 和Application.srcValue允許你檢測unityWeb數據文件是否被移動或鏈接接到其他位置。你也許想保護這兩者來防止盜用數據文件的行為。
// 檢測你的數據文件是否被移動到其他的服務器
// 或是被鏈接到其他地方
void Start ()
{
var isPirated = false;
if (Application.platform == RuntimePlatform.WindowsWebPlayer ||Application.platform == RuntimePlatform.OSXWebPlayer)
{
if (Application.srcValue != “game.unity3d”)
isPirated = true;
if (String.Compare (Application.absoluteURL,http://www.website.com/Game/game.unity3d,true)!=0)
isPirated = true;
if (isPirated)
print(“Pirated web player”);
}
}
◆ static var dataPath : string
描述:包含游戲數據文件夾的路徑(只讀)。
這個值依賴于運行的平臺:
Unity 編輯器: <工程文件夾的路徑>/Assets
Mac播放器: <到播發器應用的路徑>/Contents
Win播放器: < 包含可執行播發器的文件夾的路徑>\Data
Dasboard窗口: < dashboard widget bundle的路徑>
Web播放器: 到播放器數據文件夾的絕對路徑(沒有實際的數據文件名稱)
// 打印到數據文件夾的路徑
Print(Application.dataPath);
◆ static var isEditor : bool
描述:是在Unity編輯器內運行?(只讀)
如果游戲從Unity編輯器中運行,返回真;如果從其他部署目標運行返回假。
if (Application.isEditor)
{
print(“We are running this from inside of the editor!”);
}
◆ static var isLoadingLevel : bool
描述:正在加載某些關卡?(只讀)
LoadLevel 和 LoadLevelAdditive不會立即發生 一個新的關卡在當前游戲幀之后被加載。如果關卡加載所請求的幀已經完成isLoadingLevel返回true。
參見:LoadLevel,LoadLevelAdditive
◆ static var isPlaying : bool
描述:在任何類型的播放器中時返回真(只讀)。
在Unity編輯器中,如果處于播放模式時返回真。
if (Application.isPlaying)
{
print(“In player or playmode”);
}
◆ static var levelCount : int
描述:可用的總關卡數(只讀)。
// 加載一個隨機的關卡
Application.LoadLevel (Random.Range(0, Application.levelCount-1));
◆ static var loadedLevel : int
描述:最后一個被加載的關卡的索引(只讀)。
print (Application.loadedLevel);
◆ static var loadedLevelName : string
描述:最后一個被加載的關卡的名稱(只讀)。
print (Application.loadedLevelName);
◆ static var platform : RuntimePlatform
描述:返回游戲運行的平臺(只讀)。
如果你要做一些平臺相關的操作使用這個屬性。參見:RuntimePlatform
void Start ()
{
if (Application.platform == RuntimePlatform.WindowsPlayer)
print (“Do something special here!”);
}
◆ static var runInBackground : bool
描述:應用程序在后太時是否應該被運行?
默認為假(當程序在后臺時暫停)。
// 讓游戲運行,即使是在后臺
Application.runInBackground = true;
◆ static var srcValue : string
描述:相對于html文件的web播放器數據文件的路徑(只讀)。
這是被寫到html文件中的路徑,它是作為object的src參數和cmbed標簽。因此如果它是絕對url,srcvalue將含有絕對路徑。
Application.absoluteURL 和 Application.srcValue允許你檢測你的unityWeb數據文件是否被移動或鏈接到其他位置。你也許想保護這兩者來阻止盜用數據文件的行為。
// 檢測你的數據文件是否被移到其他的服務器
// 或是被鏈接到其他地方
void Start ()
{
Var isPirated = false;
if (Application.platform == RuntimePlatform.WindowsWebPlayer ||Application.platform == RuntimePlatform.OSXWebPlayer)
{
if (Application.srcValue != “game.unity3d”)
isPirated = true;
if (String.Compare (Application.absoluteURL,“http://www.website.com/Game/game.unity3d”,true)!= 0)
isPirated = true;
if (isPirated)
print(“Pirated web player”);
}
}
◆ static var streamedBytes : int
描述:我們從主Unityweb流中下載了多少字節(只讀)。
在web播放器中這將返回到目前為止已經下載的壓縮字節數。在獨立模式或編輯器中
這個總是返回零。
參見:GetStreamProgressForLevel函數
◆ static var targetFrameRate : int
描述:命令游戲嘗試以一個特定的幀率渲染。
設置targetFrameRate為-1(默認)使獨立版游戲盡可能快的渲染,并且web播放器游戲以50-60幀/秒渲染,取決于平臺。
注意設置targetFrameRate不會保證幀率,會因為平臺的不同而波動,或者因為計算機太慢而不能取得這個幀率。
在編輯器中targetFrameRate被忽略。
◆ static var unityVersion : string
描述:用于播放內容的Unity運行時版本。
類方法
◆ static void CancelQuit () : void
描述:取消退出。這可以用來在退出游戲的時候顯示一個退出畫面。
這個函數只工作在播發器中,在web播放器或編輯器中不做任何事。
// 延遲2秒退出。
// 在這段時間內加載退出畫面
var showSplashTimeout = 2.0;
private var allowQuitting = false;
void Awake () {
// 需要在多個關卡中使用的游戲物體
DontDestroyOnLoad (this);
}
void OnApplicationQuit () {
// 如果我們還沒有加載到最后的退出畫面
if (Application.loadedLevelName.ToLower()!= “finalsplash”)
StartCoroutine(“DelayedQuit”);
// Don’t allow the user to exit until we got permission in
if (!allowQuitting)
Application.CancelQuit();
}
void DelayedQuit ()
{
Application.LoadLevel(“finalsplash”);
// 等待showSplashTimecout
yield WaitForSeconds(showSplashTimeout);
// 然后退出
allowQuitting = true;
Application.Quit();
}
◆ static void CanStreamedLevelBeLoaded(levelIndex : int) : bool
描述:可以加載流式關卡了嗎?
參見:GetStreamProgressForLevel函數。

◆ static void CanStreamedLevelBeLoaded(levelName : string) : bool
描述:可以加載流式關卡了嗎?
參見:GetStreamProgressForLevel函數。
◆ static void CaptureScreenshot(filename : string) : void
描述:截取屏幕為PNG文件放置在路徑filename。
如果文件已經存在,它將被覆蓋。如果在web播放器或者Dashboard窗口中使用該函數,它將不做任何事情。
void OnMouseDown () {
Application.CaptureScreenshot(“Screenshot.png”);
}
◆ static void ExternalCall(voidName:string,params args:object[]):void
描述:調用一個包含中網頁中的函數(只用于Web Player)。
調用包含在網頁中名為voidNameJavaScript函數,并傳遞給定的參數。支持原始的數據類型(string, int, float, char)和這些類型的數字。如何其他的對象被轉化為字符串(使用ToString方法)并作為字符串傳遞。
傳遞的參數數量是可變的。
// 調用網頁上的MyVoid1并不使用參數。
Application.ExternalCall (“MyVoid1”);
//調用網頁上的MyVoid2并使用字符串參數。
Application.ExternalCall (“MyVoid2”, “Hello from Unity!”);
//調用網頁上的MyVoid3并使用幾個不同類型的參數。
Application.ExternalCall (“MyVoid3”, “one”, 2, 3.0);
被調用的在HTML中的函數只需要使用標準的語法即可,例如:

See Also: Browser to Unity communication, Application.ExternalEval.
◆ static void ExternalEval (script : string) : void
//描述:調用包含在網頁中的片段腳本函數(只用于Web Player)。
這將執行包含在網頁中JavaScript片段script
// 導航到前一個頁面
Application.ExternalEval (“history.back()”);
See Also: Browser to Unity communication, Application.ExternalCall.
◆ static void GetStreamProgressForLevel(levelIndex : int) : float
描述:下載了多少?
在web播放器中這將返回這個關卡的進度。
參見:CanStreamedLevelBeLoaded
◆ static void GetStreamProgressForLevel (levelName : string) : float
描述:下載了多少?[ 0…1]
在web播放器中這將返回關卡的進度。
參見:CanStreamedLeverlBeLoaded 函數。
◆ static void LoadLevel(index : int) : void
描述:加載關卡。
這個函數按照索引加載關卡。在Unity中使用File->Build Settings…菜單可以看到所有 關卡的索引列表。在你能過加載關卡之前你必須將它添加到游戲使用關卡列表中。在 Unity中使用File->Build Settings…并添加你需要的關卡到關卡列表中。
//加載索引為 0 的關卡
Application . LoadLevel(0);
當加載嶄新的關卡時,所有已經加載的游戲物體都將被銷毀。 如果你想讓物體在被加 載新關卡時不被銷毀,使用Object.DontDestroyOnLoad 。
◆ Static void LoadLevel( name : string) : void
描述:按照它的名稱加載關卡。
在你能夠加載關卡之前你必須將它添加到游戲使用的關卡列表中。在Unity中使用
File->Build Settings… 并添加你需要的關卡到關卡列表中。關卡被加載所有激活物體上 的MonoBehaviour . OnLevelWasLoaded都被調用。
// 加載名為“HighScore”的關卡。
Application . LoadLevel(“HighScore”);
當加載新的關卡時,所有已經加載的游戲物體都將被銷毀。 如果你想讓物體在加載新
關卡時不被銷毀,使用Object. DontDestroyOnLoad。
◆ static void LoadLevelAdditive ( index : int ) : void
◆ static void LoadLevelAdditive (name : string ) : void
描述:額外地加載一個關卡。
不同于LoadLevel,LoadLeavelAdditive 不會銷毀當前關卡中的物體。新關卡中的物體
將被添加到當前關卡。這對于創建連續的虛擬世界時非常有用的,當你走過時更多的內
榮被加載。
◆ static void OpenURL( url : string ) : void
描述:在瀏覽器中打開url 。
在編輯器或者獨立播放器模式下,這將在缺省的瀏覽器中使用新頁打開url 。這將是瀏
覽器位于前端。
但在網頁中執行時,包含插件的頁將被重定向到 url 。
Void Start ( ) {
Application . OpenURL (“http://unity3d.com”);
}
◆ Static void Quit ( ) : void
描述:退出應用程序。在編輯器或者web播放器中退出被忽略。
//當用戶點擊escape時退出播放器
Void Update ( ){
If ( Input GetKey ( “escape” )){
Application . Quit ( ) ;
}
}

collision

描述碰撞
Collision 信息被傳遞到Collider . OnCollisionEnter , Collider . OnCollisionStay和Collider.OnCollisionExit事件。參見: ContactPoint.
變量
◆var collider : Collider
描述:碰撞到的Collider ( 只讀 ).
為了得到所有被碰撞到的碰撞器的細節,你需要迭代接觸點( contacts屬性)。
◆var contacts : ContactPoint [ ]
描述:接觸點由物理引擎產生。
每個contact包含一個接觸點,法線和兩個發生碰撞的碰撞器(參考ContactPoint)。在OnCollisionStay或者OnCollisionEnter內可以確保contacts有至少一個元素。
void 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;
void 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
描述: 兩個碰撞物體的相對線形速度(只讀)。
//當以較大的速度碰到一個物體時播放聲音
void OnCllisionEnter ( collision : Collision ) {
if ( collision . relativeVelocity . magnitude > 2 )
audio .Play ( );
}
◆var rigibody : Rigidbody
描述:碰撞到的Rigidbody(只讀),如果碰到的物體是一個沒有附加剛體的碰撞器,返回null
//讓所有碰到的剛體向上飛
void 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 void 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 void Color ( r : float , g : float , b : float ) : Color
描述:用給定的 r , g , b 組件構建一個新的顏色并設置 a 為1
var color = Color (0.2 , 0.3 , 0.4 ) ;
函數
◆void 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 void 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 void Color ( v : Vectro4 ) : Color
描述:Colors可以被隱式轉化為Vector4,或由它轉化而來。
◆static implicit void 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使用來給出詳細的關于碰撞和如何處理它們的信息。
變量
◆var collider : Collider
描述:被控制器碰到的碰撞器。
◆var controller : CharacterController
描述:碰到該碰撞器的控制器。
◆var gameObject : GameObject
描述:被控制器碰到的游戲物體。
◆var moveDirection : Vector3
描述:從膠囊的中心到接觸點的大致方向。
這可以用來找到一個合理的方向將力應用到接觸的剛體。
◆var moveLength : float
描述:角色碰到這個碰撞器時已經行走了多遠。
注意這可能不同于你傳遞到CharacterController . Move的。因為所有的移動都是被碰撞器制約的。
◆var normal : Vector3
描述:在世界空間中碰撞表面的法線。
◆var point : Vector3
描述:世界空間中的碰撞點。
◆var rigidbody : Rigidbody
描述:被控制器碰到的剛體。
如果沒有接觸一個剛體而是一個靜態碰撞器時為null。
◆var transform : Transform
描述:被控制器碰到的變換。
Debug

一個類,包含用于開發游戲時的調試方法。
類變量
◆static var isDebugBuild : bool
描述:在Build Settings…對話框中,有一個被稱為"strip debug symbols"的復選框。
如果它被選擇isDebugBuild將為關。在編輯器中isDebugBuild總是返回真,建議在發布游戲的時候移除所有對Debug .Log的調用,這樣你就能夠容易的發布帶有調試輸出的測試版,而最終版沒有調試輸出。
//只有這是調試版時,記錄調試信息
if ( Debug .isDebugBuild ) {
Debug . Log ( " Something bad happened ! " ) ;
}
類方法
◆static void Break ( ) : void
描述:暫停編輯器
Debug . Break ( ) ;
◆static void DrawLine ( start:Vector3, end: Vector3, color : Color = Color . white ) : void
描述:從point開始到end用顏色繪制一條線。
這個線將被繪制在編輯器的場景視圖中。如果在游戲視圖中啟用了gizmo繪制,這個線也將被繪制在這里。
//從世界坐標的原點到點( 1 , 0 , 0 )繪制一條紅色的線
void Update ( ) {
Debug . DrawLine ( Vector3 . Zero , new Vector3 ( 1 , 0 , 0 ), Color . red ) ;
}
◆static void DrawRay ( start:Vector3, dir : Vector3, color : Color = Color . white ) : void
描述:從start 到start+dir 用顏色繪制一條線。
//繪制一條10米長的線從position,沿著變換的z軸向前。
void Update ( ) {
var forward = transform . TransformDirection ( Vector3 . forward ) * 10 ;
Debug . DrawRay ( transform . position .Vector3 . forward * 10 , Color . green );
}
◆static void Log ( message : object ) : void
描述:記錄message到Unity控制臺。
Debug . Log ( “Hello”);
◆static void Log ( message : object . context : Object ) : void
描述:記錄message到Unity控制臺。
當你在控制臺中選擇消息的時候一個到上下文物體的鏈接將被繪制。這是非常有用的。如果你想知道那個物體發生了錯誤。
Debug . Log ( “Hello” , gameObject ) ;
◆static void LogError ( message : object ) : void
描述:Debug . Log 的一個變體,用來記錄錯誤信息到控制臺。
var memberVariable : Transform ;
if ( memberVariable == null )
Debug . LogError ( " memberVariable must be set to point to a Transform. ") ;
◆static void LogError ( message : object , context : Object ) : void
描述:Debug . Log的一個變體,用來記錄錯誤信息到控制臺。
等你在控制臺中選擇消息的時候一個到上下文物體的鏈接將被繪制。這是非常有用的, 如果你想知道那個發生了錯誤。
var memberVariable : Transform ;
if ( memberVariable == null )
Debug . LogError ( “memberVariable must be set to point to a Transform " , this ) ;
◆static void LogWarning ( message : object ) : void
描述:Debug . Log 的一個變體,用來記錄警告信息到控制臺。
◆static void LogWarning ( message : object , context : Object ) : void
描述:Debug . Log的一個變體,用來記錄警告信息到控制臺。
當你選擇控制臺中的一個消息時,一個到上下文物體的連接將被繪制。這是非常有用的, 如果你想知道那個物體發生了錯誤
Event

一個UnityGUI事件。
對應于用戶的輸入事件(按鍵,鼠標事件),或者是UnityGUI布局或渲染事件。
對于每個事件OnGUI在腳本中被調用;因此OnGUI在每幀中被潛在調用多次。
Event . current對應于OnGUI調用“當前”事件。
參見:GUIScripting Guide
變量
◆var alt : bool
描述:Alt/Option鍵被按住?(只讀)
在windows下,如果Alt鍵被按下返回真。在Mac下,如果Option鍵被按下返回真。
◆var button : int
描述:哪個鼠標鍵被按下
0表示左鍵,1表示右鍵。2表示中鍵。在EventType . MouseDown ,EventType .MouseUp
事件中使用。
◆var capsLock : bool
描述:Caps Lock 處于打開狀態?(只讀)
如果Caps Lock為打開返回真
◆var character : char
描述:輸入的字符
在EventType . KeyDown 事件中使用,注意EventType . KeyUp事件不包含字符,只包含Event . keyCode .
參見:Event . keyCode.
◆var command : bool
描述:Command/Windows鍵被按住?(只讀)
在Windows下,如果Windows鍵被按下返回真。在Mac下,如果Command鍵被按下返回真。
◆var control : bool
描述:Control被按下?(只讀)
如果Control被按下返回真。
◆var delta : Vector2
描述:與上次事件相比,鼠標的相對移動。
在EventType .MouseMove,EventType .MouseDrag,,EventType .ScrollWheel時間中使用。
參見:Event . mousePosition
◆var voidKey : bool
描述:當前按下的鍵是功能鍵?(只讀)
如果當前按下的鍵是方向鍵,翻頁鍵,退格鍵等等時返回真,如果這個鍵需要特殊處理才能用與文本編輯時,voidKey為打開。
◆var isKey : bool
描述:這個事件是鍵盤事件?(只讀)
◆var isMouse : bool
描述:這個事件是鼠標事件?(只讀)
◆var keyCode : KeyCode
描述:用于鍵盤事件的原始鍵代碼
在EventType . KeyDown 和 EventType . KeyUp事件中使用;返回匹配物理鍵盤的KeyCode值,使用這個來處理光標,功能鍵等等。
參見:Event . character 。
◆var mousePosition : Vector2
描述:鼠標位置
在EventType . MouseMove 和EventType . MouseDrag事件中使用。
參見:Event . delta
◆var numeric : bool
描述:當前按下的數字的鍵?(只讀)
使用這個表示區分主&數字鍵。
◆var shift : bool
描述:Shift被按下?(只讀)
如果Shift被按下返回真。
函數
◆void GetTypeForControl ( controlID : int ) : EventType
參數
controlID 查詢的控件ID。從GUIUtilty . GetControlID ( ) 獲取。參考 EventType獲取可能值的列表。
描述:為給定的控件ID獲取一個過濾的事件類型。
這個函數可以用來實現鼠標鎖和鍵盤焦點。
◆void Use ( ) : void
描述:使用這個事件。
當已經使用了一個事件時調用這個方法。事件類型將被設置為EventType . Used。使其 他GUI元素忽略它。
類變量
◆static var current : Event
描述:現在被處理的當前事件。
類方法
◆static void KeyboardEvent ( key : string ) : Event
描述:創建一個鍵盤事件。
這可用于檢查某個鍵是否被按下。可能帶有調整器。key字符串是鍵的名稱(與輸入管理器中的相同),可以使用任意數量的調整器前綴:& = Alternate , ^ = Controler, % = Command , # = Shift 例如:&f12 = Alternate +F12., " 1 " = Control +keypad0
void OnGUI ( ) {
GUILayout . Lable ( " Press Enter To Start Game “) ;
if ( Event . current . Equals ( Event . KeyboardEvent (”[enter]”)))
Application . LoadLevel ( 1 )
if(Event current Equals(Event KeybordEvent(“return”) ))
Print( “I said enter ,not return – try the keypad” );
}

GL

底層圖像庫。
使用這個類操作激活的變換矩陣,發送與OpengGL立即模式相同的渲染命令并做一些其他的底層圖像操作。注意,在所有情況下使用Graphics.DrawMesh比任何使用立即模式繪制更有效。
這個類只限于Unity Pro.
類變量
◆ static var LINES: int
描述:用于Begin的模式:繪制直線。
參見:GL . Begin, GL . End.
◆ static var modelview:Matrix4x4
描述:當前模型視矩陣。
給這個變量賦值等同于OpenGL中的glLoadMatrix(mat);在其他圖形API中對應的功能被模擬。
改變模型視矩陣覆蓋當前相機的視參數,因此最常用的是使用GL.PushMatrix和GL.PopMatrix來保存和恢復矩陣。
讀取這個變量返回當前模型視矩陣。
◆ static var QUADS:int
描述:用于Begin的模式:繪制四邊形
參見:GL.Begin,GL.End.
◆ static var TRIANGLE_STRIP:int
描述:用于Begin的模式:繪制三角面
參見:GL.Begin,GL.End.
◆ static var TRIANGLES:int
描述:用于Begin的模式:繪制三角形
參見:GL.Begin,GL.End.
類方法
◆ static void Begin(mode:int) : void
參數
mode 繪制的幾何體:可以是TRIANGLES,TRIANGLE_STRIP,QUADS或
LINES.
描述:開始繪制3D幾何體
這個對應OpenGL中的glBegin,在其他圖形API中相同的功能被模擬 ,在GL.Begin 和 GL.End之間,可以調用GL .Veriex,GL.Color,GL.TexCoord和其他立即模式繪制函數。
在繪制你自己的幾何體時,你應該注意它們的裁剪。裁剪規則可能會因為不同的圖形 API而不同。在大多數情況下在shader中使用Cull Off命令是安全的。
參見:GL.End.
◆ static void Clear(clearDepth:bool,clearColor:bool,backgroudColor):void
參數
clearDepth 應該清除深度緩存?
clearColor 應該清除顏色緩存?
backgroudColor 顏色被清理為什么,只有當clearColor為true時使用.
描述:清除當前渲染緩存
這將清除屏幕或激活的RenderTexture.
◆ static void Color(c : Color) : void
描述:設置當前頂點顏色
這個對應OpenGL中的glColor4f(c. r,c.g,c.b,c.a):在其他圖形中API中相同的功能被模擬,
為了使逐頂點顏色可以在不同的硬件上工作,你需要使用綁定了顏色通道的shader。參考BindChannels文檔.
這個函數只在GL.Begin和GL.End函數之間調用.
◆ static void End( ) : void
描述:結束繪制3D幾何體
這個對應OpenGL中的glEnd;在其他圖形API中相同的功能被模擬.
參見:GL.Begin.
◆ static void LoadIdentity( ) : void
描述:加載單位矩陣到當前模型視矩陣。
這個函數覆蓋當前相機的視參數,因此最常用的是使用GL.PushMatrix和GL.PopMatrix
來保存和恢復矩陣。
◆ static void LoadOrtho( ) : void
描述:輔助函數用來設置一個正交透視變換
調用LoadOrtho知道,視錐從 (0,0,-1) 變化到(1,1,100).
◆ static void LoadPixelMatrix( ) : void
描述:設置一個用于像素修正渲染的矩陣。
這個設置模型視和投影矩陣,因此X,Y坐標直接映射到像素。(0,0)位于當前相機
視口的左下角。Z坐標從-1到+100
這個函數覆蓋當前相機的參數,因此最常用的是使用GL.PushMatrix和GL.PopMatrix
來保存和恢復矩陣。
◆ static void LoadPixelMatrix(left:float,right:float,bottom:float,top:float):void
描述:設置一個矩陣的像素正確渲染。
這樣設置投影矩陣點以便X、Y坐標圖直接像素化。(0,0)在底部左側當前攝像機的視角。Z坐標是從-1到+100。
這個函數覆蓋了相機的參數,所以通常你要保存和恢復矩陣就使用GLPushMatrix和GL.PopMatrix。
◆ static void LoadProjectionMatrix (mat : Matrix4x4) : void
描述:加載到當前任意矩陣投影矩陣。
這個函數重寫當前攝像機的投影參數,所以通常你要保存和恢復投影矩陣就使用GLPushMatrix和GL.PopMatrix。
◆ static void MultiTexCoord (unit : int, v : Vector3) : void
描述:設置當前紋理坐標(v.x,v.y,v.z)實際的紋理單元。
在OpenGL中glMultiTexCoord為特定的紋理單元如果多紋理是可用的。在其他圖形的API中相同的功能進行了仿真。
這個函數只能被稱為介于GL.Begin和GL.End功能之間。
◆ static void MultiTexCoord2 (unit : int, x : float, y : float) : void
描述:設置當前紋理坐標(x,y)的為實際紋理單元。
在OpenGL中glMultiTexCoord為特定的紋理單元如果多紋理是可用的。在其他圖形的API中相同的功能進行了仿真。
這個函數只能被稱為介于GL.Begin和GL.End功能之間。
◆ static void MultiTexCoord3(unit : int, x : float, y : float, z : float) :void
描述:設置當前紋理坐標(x,y,z)的為實際紋理單元。
在OpenGL中glMultiTexCoord為特定的紋理單元如果多紋理是可用的。在其他圖形的API中相同的功能進行了仿真。
這個函數只能被稱為介于GL.Begin和GL.End功能之間。
◆ static void MultMatrix (mat : Matrix4x4) : void
描述:復制當前的點矩陣和其中的一個說明。
相當于glMultMatrix(墊在)OpenGL; 在其他圖形API的相應功能是相仿的。
換點矩陣覆蓋當前相機視圖的參數,所以通常你要保存和恢復投影矩陣就使用GLPushMatrix和GL.PopMatrix。
◆ static void PopMatrix () : void
描述:恢復了投影和點矩陣的矩陣堆棧的頂部。
換投影矩陣點覆蓋當前相機視圖的參數。這些矩陣可以用GLPushMatrix和GL.PopMatrix來保存和恢復。
參見:PushMatrix函數。
◆ static void PushMatrix () : void
描述:節約雙方投影矩陣對點和矩陣堆棧。
換投影矩陣點覆蓋當前相機視圖的參數。這些矩陣可以用GLPushMatrix和
GL.PopMatrix來保存和恢復。
參見:PopMatrix函數
◆ static void SetRevertBackfacing(revertBackFaces : bool) : void
描述:選擇是否翻轉隱面剔除,是(真)或者不是(假)
◆ static void TextCoord (v : Vector3) : void
描述:為所有紋理單元設置當前紋理坐標(v.x, v.y, v.z)
這個對應于OpengGL中用于所有紋理單元的glMultiTexCoord或者多紋理不可用時的glTexCoord,在其他的圖形API中仿真了相同的功能。
這個函數只在GL.Begin和GL.End函數之間調用。
◆ static void TexCoord2(x : float, y : float) : void
描述:為所有紋理單元設置當前紋理坐標(x, y)
這個對應于OpengGL中用于所有紋理單元的glMultiTexCoord或者多紋理不可用時的glTexCoord,在其他的圖形API中仿真了相同的功能。
, 這個函數只在GL.Begin和GL.End函數之間調用。
◆ static void TexCoord3(x : float, y : float, z : float) : void
描述:為所有紋理單元設置當前紋理坐標(x, y, z)
這個對應于OpengGL中用于所有紋理單元的glMultiTexCoord或者多紋理不可用時的glTexCoord,在其他的圖形API中仿真了相同的功能。
這個函數只在GL.Begin和GL.End函數之間調用。
◆ static void Vertex(v : Vector3) : void
描述:提交頂點
這個對應OpenGL中的glVertex3f(v.x, v.y.v.z); 在其他圖形API中相同的功能被模擬。
這個函數只在GL.Begin和GL.End函數之間調用。
◆ static void Vertex3(x : float, y : float, z : float) : void
描述:提交頂點
這個對應OpenGL中的glVertex3f(x, y, z); 在其他圖形API中相同的功能被模擬。
這個函數只在GL.Begin和GL.End函數之間調用。
◆ static void Viewport(pixelRect : Rect) : void
描述:設置渲染視口
所有的渲染都被限制在pixelRect之內。

GUIContent

GUI元素的內容
這個與GUIStyle緊密相關,GUIContent定義渲染什么而GUIStyle定義如何渲染。
參見:GUIStyle
變量
◆ var image : Texture
描述:包含圖標的圖像
◆ var text : string
描述:包含的文本
◆ var tooltip : string
描述:這個元素的提示
與這個內容相關的提示。讀取GUItooltip來獲取當前用戶指向的GUI元素的提示。
構造函數
◆ static void GUIContent() : GUIContent
描述:用于所有形狀和尺寸的GUIContent的構造函數
構建一個空的GUIContent。
◆ static void GUIContent(text : string) : GUIContent
描述:構建一個只包含文本的GUIContent物體。
使用GUI是,你不需要為一個簡單的文本字符創建GUIContents – 這兩行代碼功能等效:
void OnGUI()
{
GUI.Button(Rect(0, 0, 100, 20), “Click Me”);
GUI.Button(Rect(0, 30, 100, 20), GUIContent(“Click Me”));
}
◆ static void GUIContent(image : Texture) : GUIContent
描述:構建一個只包含圖片的GUIContent對象。
var icon : Texture;
void OnGUI()
{
GUI.Button(Rect(0, 0, 100, 20), GUIContent(icon));
}
◆ static void GUIContent(text : string, image : Texture) : GUIContent
描述:構建一個包含text和圖片的GUIContent對象
var icon : Texture;
void OnGUI()
{
GUI.Button(Rect(0, 0, 100, 20), GUIContent(“Click me”, icon));
}
◆ static void GUIContent(text : string, tooltip : string) : GUIContent
描述:構建一個包含text的GUIContent,當用戶鼠標懸停在它上面的時候,全局GUI.tooltip被設置為tooltip。
void OnGUI()
{
GUI.Button(Rect(0, 0, 100, 20), GUIContent(“Click me”, “This is a tooltip.”));
//如果用戶指向這個按鈕,全局提示被設置
GUI.Label(Rect(0, 40, 100, 40), GUI.tooltip);
}
◆ static functioin Height(height : float) : GUILayoutOption
描述:傳遞給空間的選項以便給它一個絕對高度。
◆ static functioin HorizontalScrollbar(value : float, size : float, leftValue : float, rightValue : float, params options : GUILayoutOption[]) : float
◆ static functioin HorizontalScrollbar(value : float, size : float, leftValue : float, rightValue : float, style : GUIStyle, params options : GUILayoutOption[]) : float
參數
value在min和max之間的位置
size 能看見多大?
leftValue滾動條左端的值
rightValue 滾動條右端的值
style 用于滾動條背景的風格。如果不設置,將使用當前GUISkin的horizontalScrollbar
options 一個可選的布局選項的列表。它用來指定額外的布局屬性。任何在這里設置的值將覆蓋由style定義的設置。
參見:GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight
返回floar – 修改后的值。這可以通過拖動這個滾動條,或者單擊兩端的箭頭來改變。
描述:一個水平滾動條。滾動條可以用來滾動文檔。大多數情況下,你會使用滾動視代替。
找到額外的元素:
在滾動條兩端的按鈕將在當前皮膚中搜索“leftButton”和“rightButton”作為風格,滾動條的滑塊(你拖動的東西)將搜索并使用名為“thumb”的風格。
//這將使用下面的風格名來決定該按鈕的尺寸/位置
//MyScrollbarleftButton - 用于左側按鈕的風格位置
//MyScrollbarrightButton - 用于右側按鈕的風格位置
//MyScrollbarthumb - 用于滑塊的風格名稱
scrollPos = GUILayout.HorizontalScrollbar(scrollPos, 1, 0, 100, “MyScrollbar”);
◆ static functioin HorizontalSlider(value : float, leftValue : float, rightValue : float, params options : GUILayoutOption[]) : float
◆ static functioin HorizontalSlider(value : float, leftValue : float, rightValue : float, slider : GUIStyle, thumb : GUIStyle, params options : GUILayoutOption[]) : float
參數
value滑塊顯示的值。這個決定可拖動滑塊的位置。
leftValue滑桿左端的值。
rightValue 滑桿右邊的值。
slider用于顯示拖動區域的GUIStyle。如果不設置,將使用當前GUISkin的horizontalSlider。

thumb 用于顯示拖動塊的GUISkin。如果不設置,將使用當前的GUISkin的horizontalSliderThumb
options 一個可選的布局選項的列表。它用來指定額外的布局屬性。任何在這里設置的值將覆蓋由style定義的設置。
參見:GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight.
返回float – 被用戶設置的值。
描述:一個用戶可以拖動的滑桿。可以在min和max之間取一個值。
◆ static void Label(image : Texture, params options : GUILayoutOption[]) : void
◆ static void Label(text : string, params options : GUILayoutOption[]) : void
◆ static void Label(content : GUIContent, params options : GUILayoutOption[]) : void
◆ static void Label(image : Texture, style : GUIStyle, params options : GUILayoutOption[]) : void
◆ static void Label(text : string, style : GUIStyle, params options : GUILayoutOption[]) : void
◆ static void Label(content: GUIContent, style : GUIStyle, params options : GUILayoutOption[]) : void
參數
text 顯示在該標簽上的文本。
image顯示在標簽上的Texture。
content用于這個標簽的文本,圖形和提示。
style 使用的風格。如果不設置。將使用當前GUISkin的label。
options 一個可選的布局選項的列表。它用來指定額外的布局屬性。任何在這里設置的值將覆蓋由style定義的設置。
參見:GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight.
描述:制作一個自動布局label
標簽沒有用戶交互。不會獲取鼠標點擊并總是以普通風格渲染。如果你想制作一個可視化響應用戶輸出的控件,使用一個Box控件。
◆ static void MaxHeight(maxHeight : float) : GUILayoutOption
描述:傳遞給控件的選項來指定一個最大高度。
◆ static void MaxWidth(maxWidth : float) : GUILayoutOption
描述:傳遞給控件的選項來指定一個最大寬度。
◆ static void MinHeight(minHeight : float) : GUILayoutOption
描述:傳遞給控件的選項來指定一個最小高度。
◆ static void MinWidth(minWidth : float) : GUILayoutOption
描述:傳遞給控件的選項,來指定一個最小寬度
◆ static void PasswordField(password : string, maskChar : char, params options : GUILayoutOption[]) : string
◆ static void PasswordField(password : string, maskChar : char, maxLength : int, params options : GUILayoutOption[]) : string
◆ static void PasswordField(password : string, maskChar : char, style : GUIStyle, params options : GUILayoutOption[]) : string
◆ static void PasswordField(password : string, maskChar : char, maxLength : int, style : GUIStyle, params options : GUILayoutOption[]) : string
參數
password 用于編輯的密碼。這個函數返回值應該被賦回這個字符串。如下的例子。
maskChar 用來隱藏密碼的字符。
maxLength 字符串的最大長度。如果不設置,用戶可以一直輸入。
style 使用的風格。如果不設置,將使用當前GUISkin的textField風格。
返回string – 編輯過的密碼。
描述:制作一個用戶可以輸入密碼的文本域。
var passwordToEdit = “My Password”;
void OnGUI()
{// 制作一個密碼與來調整stringToEdit。
passwordToEdit = GUILayout.PasswordField(passwordToEdit, “*”, 25);
}
◆ static void RepeatButton(image : Texture, params options : GUILayoutOption[]) : bool
◆ static void RepeatButton(text : string, params options : GUILayoutOption[]) : bool
◆ static void RepeatButton(content : GUIContent, params options : GUILayoutOption[]) : bool
◆ static void RepeatButton(image : Texture, style : GUIStyle, params options : GUILayoutOption[]) : bool
◆ static void RepeatButton(text : string, style : GUIStyle, params options : GUILayoutOption[]) : bool
◆ static void RepeatButton(content : GUIContent, style : GUIStyle, params options : GUILayoutOption[]) : bool
參數
text顯示在該按鈕上的文本。
image 顯示在該按鈕上的Texture。
content 用于這個按鈕的文本,圖形和提示。
style使用的風格,如果不設置,將使用當前GUISkin的button風格。

options 一個可選的布局選項的列表。它用來指定額外的布局屬性。任何在這里設置的值將覆蓋由style定義的設置。
參見:GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight.
返回bool - /true/當用戶按住按鈕時
描述:制作一個重復按鈕,只要用戶按住鼠標這個按鈕一直返回真。
◆ static void SeletionGrid(selected : int, texts : string[], xCount : int, params options : GUILayoutOption[]) : int
◆ static void SeletionGrid(selected : int, images : Texture[], xCount : int, params options : GUILayoutOption[]) : int
◆ static void SeletionGrid(selected : int, contents : GUIContent[], xCount : int, params options : GUILayoutOption[]) : int
◆ static void SeletionGrid(selected : int, texts : string[], xCount : int, style : GUIStyle, params options : GUILayoutOption[]) : int
◆ static void SeletionGrid(selected : int, images : Texture[], xCount : int, style : GUIStyle, params options : GUILayoutOption[]) : int
◆ static void SeletionGrid(selected : int, contents : GUIContent[], xCount : int, style : GUIStyle, params options : GUILayoutOption[]) : int
參數
selected選擇按鈕的索引
texts 顯示在按鈕的字符串數組。
images在按鈕上紋理數組
contents用于按鈕的文本,圖形和提示。
xCount 在水平方向多少個元素,元素將被縮放來適應,除非風格定義了一個fixedWidth,空間高度將由元素的數量決定。
style 使用的風格。如果不設置,將使用當前GUISkin的button風格。
options 一個可選的布局選項的列表,它用來指定額外的布局屬性。任何在這里設置的值將覆蓋由style定義的設置。
參見:GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight.
返回int – 選擇按鈕的索引
描述:制作一個選擇網格
◆ static void Space(pixel : float) : void
描述:在當前布局組中插入一個空格
空格的方向依賴與使用這個命令時當前所在布局組。如果在垂直組,空格是垂直的。
void OnGUI()
{
GUILayout.Button(“I’m the first button”);
//在兩個按鈕間插入20像素
GUILayout.Space(20);

}
GUILayout.Button(“I’m a bit futher down”);
}
在水平組,pixels將是水平的;
void OnGUI()
{
//開始水平組以便顯示水平空格
GUILayout.BeginHorizontal(“box”);
GUILayout.Button(“I’m the first button”);
//在兩個按鈕間插入20像素
GUILayout.Space(20);
GUILayout.Button(“I’m to the right”);
//結束上面開始的水平組
GUILayout.EndHorizontal();
}
◆ static void TextArea(text : string, params options : GUILayoutOption[]) : string
◆ static void TextArea(text : string, maxLength : int, params options : GUILayoutOption[]) : string
◆ static void TextArea(text : string, style : GUIStyle, params options : GUILayoutOption[]) : string
◆ static void TextArea(text : string, maxLength : int, style : GUIStyle, params options : GUILayoutOption[]) : string
參數
text 用于編輯的文本。這個函數返回值應該被賦回這個字符串。如下的例子。
maxLength 字符串的最大長度。如果不設置,用戶可以一直輸入。
style 使用的風格。如果不設置,則使用當前GUISkin的textField風格。
options 一個可選的布局選項的列表。它用來指定額外的布局屬性。任何在這里設置的值將覆蓋由style定義的設置。
參見:GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight.
返回string – 編輯過的字符串。
描述:制作一個多行文本域。這里用戶可以編輯這個字符串。
◆ static void TextField(text : string, params options : GUILayoutOption[]) : string
◆ static void TextField (text : string, maxLength : int, params options : GUILayoutOption[]) : string
◆ static void TextField (text : string, style:GUIStyle, params options : GUILayoutOption[]) : string
◆ static void TextField (text : string, maxLength : int, style : GUIStyle, params options : GUILayoutOption[]) : string
參數
text 用于編輯的文本。這個函數返回值應該被賦回這個字符串,如下的例子。

maxLength 字符串的最大長度。如果不設置,用戶可以一直輸入。
style 使用的風格。如果不設置,將使用當前的GUISkin的textArea
options 一個可選的布局選項的列表,它用來指定額外的布局屬性。任何在這里設置的值將覆蓋由style定義的設置。
參見:GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight.
返回string – 編輯過的字符串。
描述:制作一個單行文本域。這里用戶可以編輯這個字符串。
var stringToEdit = “Hello, world”;
void OnGUI()
{
//制作一個文本域來調整stringToEdit
stringToEdit = GUILayout.TextField(stringToEdit, 25);
}
◆ static void Toogle(value : bool, image : Texture, params options : GUILayoutOption[]) : bool
◆ static void Toogle(value : bool, text : string, params options : GUILayoutOption[]) : bool
◆ static void Toogle(value : bool, content : GUIContent, params options : GUILayoutOption[]) : bool
◆ static void Toogle(value : bool, image : Texture, style : GUIStyle, params options : GUILayoutOption[]) : bool
◆ static void Toogle(value : bool, text : string, style : GUIStyle, params options : GUILayoutOption[]) : bool
◆ static void Toogle(value : bool, content : GUIContent, style : GUIStyle, params options : GUILayoutOption[]) : bool

參數
value按鈕是打開或關閉
text 顯示在該按鈕上的文本
image顯示在該按鈕上的Texture
content用于這個按鈕的文本,圖形和提示
style 使用的風格。如果不設置,將使用當前GUISkin的button風格。
options 一個可選的布局選項的列表,它用來指定額外的布局屬性。任何在這里設置的值將覆蓋由style定義的設置。
參見:GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight.
返回bool – 按鈕的新值
描述:制作一個on/off開關按鈕。

◆ static void Toolbar(selected: int, texts : string[], params options : GUILayoutOption[]) : int
◆ static void Toolbar(selected: int, images : Texture[], params options : GUILayoutOption[]) : int
◆ static void Toolbar(selected: int, contents: GUIContent[], params options : GUILayoutOption[]) : int
◆ static void Toolbar(selected: int, texts : string[], style : GUIStyle, params options : GUILayoutOption[]) : int
◆ static void Toolbar(selected: int, image : Texture[],style : GUIStyle, params options : GUILayoutOption[]) : int
◆ static void Toolbar(selected: int, content : GUIContent[],style : GUIStyle, params options : GUILayoutOption[]) : int
參數
selected選擇按鈕的索引
texts 顯示在按鈕上的字符串數組
images在按鈕上的紋理數組
contents用于按鈕的文本,圖形和提示數組
style 使用的風格。如果不設置,將使用當前GUISkin的button風格。
options 一個可選的布局選項的列表。它用來指定額外的布局屬性。任何在這里設置的值將覆蓋由style定義的設置。
參見:GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight.
返回int – 選擇按鈕的索引
描述:制作一個工具欄
◆ static void VerticalScrollbar(value: float, size : float, topValue : float, buttomValue : float, params options : GUILayoutOption[]) : float
◆ static void VerticalScrollbar(value: float, size : float, topValue : float, buttomValue : float, style : GUIStyle, params options : GUILayoutOption[]) : float
參數
value在min和max之間的位置
size 能看見多大?
topValue滾動條頂端的值
bottomValue 滾動條底端的值
style 用于滾動條背景的風格。如果不設置,將使用當前GUISkin的horizontalScrollbar。
options 一個可選的布局選項的列表。它用來指定額外的布局屬性。任何在這里設置的值將覆蓋由style定義的設置。
參見:GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight.
返回float – 修改后的值。這可以通過拖動這個滾動條,或者單擊兩端的箭頭來改變。
描述:制作一個垂直滾動條。滾動條可以用來滾動文檔。大多數情況下,你會使用scollView代替。
找到額外的元素:
在滾動條兩端的按鈕將在當前皮膚中搜索“upbutton”和“downbutton”作為風格。滾動條的滑塊(你拖動的東西)將搜索并使用名為thumb的風格。
//這將使用下面的風格名來決定該按鈕的尺寸/位置
//MyVerticalScrollbarupbutton – 用于頂端按鈕的風格名稱
//MyVerticalScrollbardownbutton – 用于底端按鈕的風格名稱
//MyScrollbarthumb – 用于滑塊的風格名稱
scrollPos = GUILayout.HorizontalScrollbar(scrollPos, 1, 0, 100, “MyVerticalScrollbar”);
◆ static void VerticalSlider(value : floar, leftValue : float, rightValue : float, params options : GUILayoutOption[]) : float
◆ static void VerticalSlider(value : floar, leftValue : float, rightValue : float, slider : GUIStyle, thumb : GUIStyle, params options : GUILayoutOption[]) : float
參數
value滑桿顯示的值。這個決定可拖動滑塊的位置。
topValue滑桿頂端的值。
downValue 滑桿底端的值。
slider 用于顯示拖動區域的GUIStyle。如果不設置,將使用當前GUISkin的horizontalSlider。
thumb 用于顯示拖動塊的GUIStyle。如果不設置,將使用當前的GUISkin的horizontalSliderThumb。
options 一個可選的布局選項的列表,它用來指定額外的布局屬性。任何在這里設置的值將覆蓋由style定義的設置。
參見:GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight.
◆ static void Width(width : float) : GUILayoutOption
描述:傳遞給控件的選項以便給它一個絕對寬度
◆ static void Window(id : int, screenRect : Rect, func : GUIWindowVoid, text : string) : Rect
◆ static void Window(id : int, screenRect : Rect, func : GUIWindowVoid, image : Texture) : Rect
◆ static void Window(id : int, screenRect : Rect, func : GUIWindowVoid, content : GUIContent) : Rect
◆ static void Window(id : int, screenRect : Rect, func : GUIWindowVoid, text : string, style : GUIStyle) : Rect
◆ static void Window(id : int, screenRect : Rect, func : GUIWindowVoid, image : Texture, style : GUIStyle) : Rect

◆ static void Window(id : int, screenRect : Rect, func : GUIWindowVoid, content : GUIContent, style : GUIStyle) : Rect
參數
id 用于每個窗口唯一的ID。這是用于接口的ID。
clientRect 屏幕上用于窗口的矩形區域。布局系統將試圖使窗體在他內部。如果不能,它將調整矩形去適應它
func 在窗體內部創建GUI的函數。這個函數必須使用一個函數 – 當前創建GUI的窗體id。
image 用于在標題欄上顯示圖片的Texture。
content 用于這個窗口的文本,圖形和提示。
style 使用的風格。如果不設置,將使用當前GUISkin的button風格。
options 一個可選的布局選項的列表,它用來指定額外的布局屬性。任何在這里設置的值將覆蓋由style定義的設置。
參見:GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight.
返回Rect – 窗口位于舉行位置。這個可能與你傳入的一個具有不同位置和尺寸。
描述:制作一個彈出窗口。它的內容是自動布局的。
窗口浮動在普通GUI控件之上。具有單擊激活的特點并可以有選擇的隨意被用戶拖動。不像其他的控件,你需要傳遞給他們一個獨立的功能并放置在窗口中這兒是一個小例子來幫助你開始:
var windowRect = Rect(20, 20, 120, 50);

void OnGUI()
{
//注冊窗口,注意第三個參數
windowRect = GUILayout.Window(0, windowsRect, DoMyWindow, “My Window”);
}

//制作窗口內容
void DoMyWindow(windowed : int)
{
//這個按鈕將調整以適應物體
if(GUILayout.Button(“Hello World”))
print(“Get a click”);
}
你傳入的客戶區域只是作為一個參考,為了對窗口使用額外的限制。闖入一些額外的布局選項。用在這里的一個將覆蓋尺寸的計算。這是一個簡單的例子。
var windowRect = Rect(20, 20, 120, 50);

void OnGUI()
{
//注冊窗口,這里我們指示布局系統必須使窗體為100像素寬。
windowRect = GUILayout.Window(0, windowRect, DoMyWindow, “My Window”, GUILayout.width(100));
}

//制作窗體內容
void DoMyWindow(windowID : int)
{
//這個按鈕大小不能適應這個窗體
//通常,這個窗體將被擴展以便適應這個按鈕。但是由于GUILayout.Width將只允//許窗體為100像素寬
if(GUILayout.Button(“Please click me a lot”))
print(“Get a click”);

}
GUISettings

用于GUI如何表現的通用設置。
這些被所有在GUISkin中的元素共享。
變量
◆ var cursorColor : Color
描述:文本域中光標的顏色。
◆ var cursorFlashSpeed : float
描述:文本域指示的閃動速度。
這個是閃動/秒。如果設置為0,閃動將被禁用。如果設置為-1,閃動速度將匹配系統的默認速度。
◆ var doubleClickSelectsWord : bool
描述:文本域中雙擊是否選擇單詞。
◆ var selectionColor : Color
描述:文本域中選擇矩形的顏色。
◆ var tripleClickSelectsLine : bool
描述:文本域中點擊鼠標三次是否選擇整行文本。
GUIStyleState

為GUIStyle物體使用的給定狀態的一個特定值。
GUIStyle包含用于顯示GUI元素的所有值
變量
◆ var background : Texture2D
描述:在這個狀態中被GUI元素使用的背景圖片。
◆ var textColor : Color
描述:在這個狀態中被GUI元素使用的文本顏色。
GUIStyle

GUI元素的風格位置
這個類包含一個GUI元素如何被渲染的所有信息。它包含用于字體,圖標位置,背景圖標,和間距的信息。它不包含關于它包含什么的信息 – 僅僅定義用這個風格渲染的文本如何被顯示。它不定義這個元素可以發生什么交互,但是定義了用于交互的顯示設置。
一個GUIStyle的設置。這是模仿一個CSS樣式。它包含下列事項的設置:
背景圖片
這些被渲染在空間后面。不同的圖像可以被指定為正常顯示。當用戶將鼠標放在元素上時的顯示,當使用者按下選擇 – 以及當元素被打開,如觸發按鈕,下面的這些都被稱為風格的狀態。參見:normal, hover, active, onNormal, onHover, onActive – 這些包含每個狀態的背景圖片,文本顏色屬性。
文本渲染
這個風格都可以定義一個字體渲染,以及文本對齊,換行和剪裁的設置,它也定了該風格元素不同狀態的文本顏色參考 : font, alignment, wordWrap, normal, hover, active, onHover, onActive
圖標位置
GUIStyle可以渲染文本,圖標或者兩者兼而有之。GUIStyle定義渲染時這兩者間的相關位置(這可以強制它只顯示他們其中之一)。參見:imagePosition
尺寸和間距選項
GUIStyle包含填充,邊緣和邊界。這些不嚴格地對應類似命名的CSS屬性。一個GUIStyle可以選擇的定義一個固定的寬度和高度。參見:margin, padding, border, fixedWidth, fixedHieght
變量
◆ var active : GUIStyleState
描述:空間被按下時的渲染設置。
◆ var alignment : TextAnchor
描述:文本對齊
◆ var border : RectOffset
描述:所有背景圖片的邊界。
這個對應于GUITexture的邊界設置。它只影響渲染的背景圖像,不影響定位。
◆ var clipOffset : Vector2
描述:用于該GUIStyle內容的剪裁偏移。
◆ var clipping : TextClipping
描述:當渲染的內容相對于給定的區域太大時做什么
◆ var contentOffset : Vector2
描述:用于該GUIStyle內容的像素偏移。
◆ var fixedHeight : float
描述:如果非0,任何用這個風格渲染的GUI元素將有這里指定的高度。
◆ var fixedWidth : float
描述:如果非0,任何用這個風格渲染的GUI元素將有這里指定的寬度。
◆ var focused : GUIStyleState
描述:元素獲得鍵盤焦點時的渲染設置。
◆ var font : Font
描述:用于渲染的字體。如果null,當前的GUISkin的默認字體將被使用。
◆ var hover : GUIStyleState
描述:鼠標懸停在控件時的渲染設置。
◆ var imagePosition : ImagePosition
描述:GUIContent的圖片和文本如何組合。
◆ var lineHeight : float
描述:這個風格一行文本的高度。以像素為單位。(只讀)
◆ var margin : RectOffset
描述:以這種風格渲染的元素和任何其他GUI元素之間的邊界。
這個只影響自動布局。(參見 : GUILayout)
◆ var name : string
描述:GUIStyle的名稱。用來基于名稱獲取它們。
◆ var normal : GUIStyleState
描述:組建正常顯示是渲染設置。
◆ var onActive : GUIStyleState
描述:元素被打開并具有鍵盤焦點時的渲染設置。
◆ var onFocused : GUIStyleState
描述:元素被打開并被按下時的渲染設置。
◆ var onHover : GUIStyleState
描述:控件被打開并且鼠標懸停在它上面時的渲染設置
◆ var onNormal : GUIStyleState
描述:控件被打開時的渲染設置。
◆ var overflow : RectOffset
描述:添加到背景圖片的額外間距。
這可用于如果你的圖片要投射一個陰影,并且向擴展背景圖片超出使用這個風格的制定GUI元素的矩形時。
◆ var padding : RectOffset
描述:從GUIStyle邊界到內容開始的間距
◆ var stretchHeight : bool
描述:這個風格的GUI元素可以被垂直拉伸以便更好的布局么?
◆ var stretchWidth : bool
描述:這個風格的GUI元素可以被水平拉伸以便更好的布局么?
◆ var wordWrap : bool
描述:文本換行?
這將導致任何包含的文本被換行以便適應控件的寬度。
構造函數
◆ static void GUIStyle() : GUIStyle
描述:
◆ static void GUIStyle(other:GUIStyle) : GUIStyle
描述:
函數
◆ void CalcHeight(content : GUIContent, width : float) : float
描述:當渲染content并制定width時這個元素的高度。
◆ void CalcMinMaxHeight (content : GUIContent, outminWidth : float, outmaxWidth : float) : void
描述:計算以這個風格渲染的content的最大最小寬度。
被GUILayout使用來正確處理換行。
◆ void CalcScreenSize(contentSize : Vector2) : Vector2
描述:計算用這個風格格式化的元素的尺寸,和一個給定的內容空格。
◆ void CalcSize(content : GUIContent) : Vector2
描述:如果內容使用這個風格渲染,計算某些內容的尺寸。
這個函數不考慮換行。要做到這點,你需要確定寬度,然后打調用CalcHeight分配計算出wordwrapped高度。
◆ void Draw(position : Rect, isHover: bool, isActive : bool, on : bool, hasKeyboardFocus : bool) : void
描述:
◆ void Draw(position : Rect, text : string, isHover: bool, isActive : bool, on : bool, hasKeyboardFocus : bool) : void
描述:用GUIStyle繪制一個文本字符串。
◆ void Draw(position : Rect, image : Texture, isHover: bool, isActive : bool, on : bool, hasKeyboardFocus : bool) : void
描述:用GUIStyle繪制圖片。如果圖片太大,它將被縮小。
◆ void Draw(position : Rect, content : GUIContent, isHover: bool, isActive : bool, on : bool, hasKeyboardFocus : bool) : void
描述:用GUIStyle繪制文本和圖片。如果圖片太大,它將被縮小。
◆ void Draw(position : Rect, content : GUIContent, controlID : int, on : bool = false) : void
描述:GUI代碼中使用的主要繪制函數。
◆ void DrawCursor(position : Rect, content : GUIContent, controlID : int, Character : int) : void
描述:用選定的內容繪制這個GUIStyle
◆ void DrawWithTextSelection(position : Rect, content : GUIContent, controlID : int, firstSelectedCharacter : int, lastSelectedCharacter : int) : void
描述:用選定的內容繪制這個GUIStyle
◆ void GetCursorPixelPosition(position : Rect, content : GUIContent, cursorStringIndex : int) : Vector2
描述:獲取給定字符串索引的像素位置。
◆ void GetCursorStringIndex(postion : Rect, content : GUIContent, cursorPixelPosition : Vector2) : int
描述:當用戶在cursorPixelPosition處點擊時獲取光標位置(索引到內容文本)這部計算內容中任何圖片。
類變量
◆ static var none : GUIStyle
描述:空GUIStyle的快捷方式。
這個風格不包含裝飾而僅僅以缺省字體渲染所有東西。
void OnGUI()
{ //制作一個沒有裝飾的按鈕
GUI.Button(“I’m very bare”, GUIStyle.none);
}
類方法
◆ static implicit void GUIStyle(str : string) : GUIStyle
描述:從當前皮膚獲取一個名為GUI風格。
GUI

GUI類是Unity GUI的手工定位接口
參見:GUI tutorial

Hashtable

函數
◆ void Add(key:Object, value:Object):void
描述:添加指定的鍵和值到哈希表。
◆ void Clear():void
描述:數量被設置為0,并且從該集合中元素到其他對象的引用也將被釋放,容量沒有改變。///這個方法是O(n)操作,這里n是元素數量。
◆ void Contains(key:object):bool
描述:決定該哈希表中是否包含指定的鍵。
◆ void ContainsKey (key:object):bool
描述:從哈希表中移除指定鍵的元素。
◆ void 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物體。void 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,
void Update() {
if (lnput,GctButtonDown{“Firel”)){
//從當前鼠標坐標處創建一個射線
var ray=Camera.main.ScreenPointToRay(Input mousePositicn);
if{Physics.Raycast(ray)) {
//如果碰到創建一個粒子
Instontiatc(particlc,transfonn.position,transfonn.rotation);}}}
類方法
◆ static void CetAxis(axinName:string):float
描述:設置由axinName確實虛擬軸的值。
對于鍵盤和搖桿輸入,這個值將在-1…1。
一個非常簡單的行駛在x-z平面的汽車。var spced=10.0;
var cotatinnSpeed=100.0;void 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
void update()
{獲取鼠標增量,這個沒有在范圍-1…1之間
var h=horizontalspeedinpul.getaxis(“mouse X”);
var v=verticalspeedinput.getaxis(“mouse Y”);
transform.rotate(v.h.0);}
◆static void getaxisraw(axisname:string):float
描述:設置由axisname確定虛擬軸的值,并且沒有使用平滑過濾,
對于鍵盤和搖桿輸入,這個值將在-1…1的范圍內。因為輸入沒有被平滑,
總是-1,0或1.如果你想自己處理所有鍵盤輸入的平滑,這個是很有用的。
void update(){
var speed=input.getaxisraw(“horizoatal”*time deta time);
transform rotate(0.speed.0);
}
◆static void getbutton(button name:string):bool
描述:當時由button name 確定的虛按鈕被按住時返回真。
考慮自動開火-這個將在按鈕被按住時一直返回真。
//如果每0.5秒實例化一個projcctile,
//如果firel按鈕(默認為Ctrl)被按下
var projectile:game object;
var firerate=0.5;
private var nextfire=0.0;
void update()
{
fi(input getbutton(“firel”)&&time.time>nextfire){
nextfire=time.time+firerate;
clone=instantiate(peojecctile,teansform,position,transffrm,rotation);
}
}
只有使用這個實現事件行為例如,射擊,使用input.getaxis 用于任意類型的移動行為
◆static void getbuttondown(button name:steing):bool
描述:當由:button name 確定的虛擬按鈕被按下時返回真。
知道用戶釋放并再次按下時返回真。
//當用戶按下firel按鈕時實黎化一個projcctile
var projectile:gameobject;
void update(){
if(input getbution down(“firel”)){
elone=instantiate(projectile,transforrn,position.transforn.rotinon);
}
}
只使用這個實現事件行為例如,射擊,使用lnput.GetAxis用于任意類型的移動行為。
◆ static void GetButton Up(buttonName:string):bool
描述:當由buttonName確定的虛擬按鈕被釋放時返回真.
直到用戶按下按鈕并再次松開時返回真。
//當用戶按下Fire;按鈕時實例化一個projectile.
var projectile:GameObject;
void 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 void GetkeyDown(name:string):bool
描述:當用戶開始按下由name確的鍵時返回真.
直到用戶釋放按鈕并再次按下時返回真.
鍵標示列表參考lnput Manager.在處理輸入時建議使用lnput.GetAxis和Input.GetBUtton
void Update();
if(input GetkeyDown(“space”))
print(“space key was pressed”);
}
}
static void GetKeyDown(Key:KeyCode):bool
描述:當用戶按下由Key KeyCode枚舉參數確定的鍵時返回真.
void Update();
if{lnput GetKeyDown(KeyCode.Space))
print(“space key was pressed”);
}
}
◆ static void GetKeyUp(name:sting):bool
描述:當用戶釋放由name確定的鍵時返向真.
直到用戶按下按鈕并再次松開時返向真。
鍵標示列表參考lntpot Manager.在處理輸入時建議使用lnput.GetAxis和lnput.GetButton
因為它允許端用戶定義這些鍵.
void Update();{
if(lnput.GetKeyUp(“space”);
}
}
◆ static void GetKeyUP(Key:KeyCode):bool
描述:當用戶釋放由Key KeyCde 校舉參數確定的鍵時返回真.
void Update(){
if(lnput,GetKeyUp(KeyCode.Space));
print(“space key was feleased”);
}
}
◆ statie void GetMouseButton(button:int):bool
描述:返回給定的鼠標按鈕是否被按住。
/button/值為0表示左鍵,1表示右鍵,2表示中鍵.
◆ statie void GetMouseButtonDown(button:int)bool
描述:用戶按下給定的鼠標按鈕時返回真.
直到用戶釋放按鈕并再次按下它時才返回真.button值為0表示中鍵左鍵,1表示右鍵,2表示中鍵.
Object

Unity所涉及的所有物體的基類。任何從Object繼承的公有變量將作為一個目標顯示在監視面板中,允許你從GUI中設置。
變量
◆ var hideFlags : HideFlags 描述:該物體是否被隱藏,保存在場景中或被用戶修改。
◆ var name : string
描述:對象的名稱。組件與游戲物體和所有附加的組件共享相同名稱。
//改變物體的名稱為Hello
name = “Hello”;
函數
◆ void GetInstanceID () : int 描述:返回該物體的實例id。一個物體的實例ID總是唯一。
描述:返回該物體的實例id。
一個物體的實例id總是唯一的。
print(GetInstanceID());
類方法
◆ static void 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的腳本
void Update () {
if (Input.GetButton (“Fire1”) && GetComponent (FooScript))
Destroy (GetComponent (FooScript));
}
◆ static void DestroyImmediate (obj : Object, allowDestroyingAssets : bool = false) : void

描述:立即銷毀物體。強烈建議使用Destroy代替它。該函數應該只在編寫編輯器代碼時使用,因為延遲的銷毀將不會再編輯器模式調用。游戲代碼中建議使用Destroy。Destroy總是延遲的(但是在同一幀執行)。小心使用該函數,因為它能永久的銷毀資源。
◆ static void DontDestroyOnLoad (target : Object) : void
描述:加載新場景時確保物體target不被自動銷毀。當加載一個新的關卡時,場景中的所有物體都會被銷毀,然后心關卡中的物體將被加載。為了在關卡加載的時候保持物體在上面調用DontDestroyOnLoad。如果物體是一個組件或游戲物體,那么它的整個變換層次將不會被銷毀。
//保證該游戲物體及其變化子物體在載入新場景時不會被銷毀。
void Awake () {
DontDestroyOnLoad (this);
}
◆ static void FindObjectOfType (type : Type) : Object
描述:返回第一個類型為Type的已激活加載的物體。參見Object.FindObjectsOfType 。
◆ static void FindObjectsOfType (type : Type) : Object[]
描述:返回所有類型為Type的已激活加載的物體。
參見Object.FindObjectsOfType 。
它將返回任何資源(網格、紋理、預設等)或已激活加載的物體。
//當點擊該物體,它將禁用場景中所有鉸鏈中的彈簧。
void OnMouseDown () {
hinges = FindObjectsOfType (HingeJoint);
for (var hinge : HingeJoint in hinges) {
hinge.useSpring = false;
}
}
c#版
public class Something : MonoBehaviour{
void OnMouseDown(){
HingeJoint[] hinges = FindObjectsOfType();
for (HingeJoint hinge in hinges) {
hinge.useSpring = false;
}
}
}
◆ static void 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;
void 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;
void Update () {
//按下ctrl時,發射一個物體
if (Input.GetButtonDown(“Fire1”)) {
//以該變化位置與傳轉實例化投射物
var clone : Missile;
clone = Instantiate(projectile, transform.position, transform.rotation);
//設置火箭超市銷毀為5秒
clone.timeoutDestructor = 5;
}
}
克隆一個物體之后可以使用GetComponet來設置附加到克隆物體上的特定組件的屬性。
◆ static void Instantiate (original : Object) : Object
描述:克隆original物體并返回該克隆。這個函數保留克隆物體的位置與賦值命令相同(cmd-d)。
//當任何剛體進入這個觸發器時實例化預設。
//它保留預設的原始位置與旋轉。
var prefab : Transform;
void OnTriggerEnter () {
Instantiate (prefab);
}
◆ static operator != (x : Object, y : Object) : bool
描述:比較兩個物體是否不同。
var target : Transform;
void Update (){
//如果target不同于我們的變換。
if (target != transform){
print(“Another object”);
}
}
◆ static operator == (x : Object, y : Object) : bool
描述:比較兩個物體是否相同。
var target : Collider;
void OnTriggerEnter (trigger : Collider){
if (trigger == target)
print(“We hit the target trigger”);
}
var target : Transform;
void Update (){
//該物體已被銷毀。
if (target == null)
return;
}
◆ static implicit void 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 void AnimationClip () : AnimationClip
描述:創建一個新的動畫剪輯。
函數
◆ void AddEvent (evt : AnimationEvent) : void
描述:創建一個新的動畫剪輯。這將添加這個時間直到退出播放模式或玩家退出。如果你想從編輯器添加一個固定的剪輯到AnimationEvent,使用UnityEditorAnimationUtility.SetAnimationEvents。
◆ void ClearCurves () : void
描述:從剪輯中清理所有曲線。
◆ void 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坐標的位置進行動畫處理
void 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值和主要材質地平線補償進行動畫處理
void 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
void Start () {
var www = new WWW (“http://myserver/myBundle.unity3d”);
yield www;
//獲取指定的主資源并實例化
Instantiate(www.assetBundle.mainAsset);
}
變量
◆ var mainAsset : Object
描述:竹資源在構建資源boundle時指定(只讀)。該功能可以方便的找到bundle內的主資源。例如,你也許想將預設一個角色并包括所有紋理、材質、網格和動畫文件。但是完全操縱角色的預設應該是你的mainAsset并且可以被容易的訪問。
void Start () {
var www = new WWW (“http://myserver/myBundle.unity3d”);
yield www;
//獲取指定的主資源并實例化
Instantiate(www.assetBundle.mainAsset);
}
函數
◆ void Contains (name : string) : bool
描述:如果AssetBundle的名稱中包含特定的對象則進行檢索。如果包含則返回真。
◆ void Load (name : string) : Object
描述:從bundle中加載名為name的物體。
◆ void Load (name : string, type : Type) : Object
描述:從bundle中加載名為name的type類物體。
◆ void LoadAll (type : Type) : Object[ ]
描述:加載所有包含在資源bundle中且繼承自type的物體。
◆ void LoadAll () : Object[ ]
描述:加載包含在資源bundle中的所有物體。
◆ void 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,該值總是真。
void Start (){
www=new WWW(url);
audio.clip=www.audioClip;
}
void Update (){
if(!audio.isPlaying && audio.clip.isReadyToPlay)
audio.Play();
}

Animation
類,繼承自Behaviour,可枚舉。動畫組件用來播放動畫。你可以給動畫組件賦予一個動畫剪輯,并從腳本中控制它的播放。Unity中的動畫系統是基于權值的,并且支持動畫混合、附加動畫、動畫合成、層和所有動畫播放方面的完全控制。
為了播放動畫可使用Animation.Play。
為了在動畫間漸變可使用Animation.CrossFade。
為了改變動畫的層可使用AnimationState.layer。
為了改變動畫的包裹模式(循環、單次、往返)可使用Animation.wrapMode或
AnimationState.wrapMode。
AnimationState可以被用來調整播放速度和直接控制混合語合成。
Animation也支持枚舉,因此你可以像這樣循環所有的AnimationStates。
//使該角色上所有動畫半速播放
for (var state : AnimationState in animation) {
state.speed = 0.5;
繼承的成員
繼承的變量
enable 啟用則Behaviour被更新,不啟用則不更新
transform 附加到該GameObject的Transform(沒有返回null)
rigidbody 附加到該GameObject的Rigidbody(沒有返回null)
camera 附加到該GameObject的Camera(沒有返回null)
light 附加到該GameObject的Light(沒有返回null)
animation 附加到該GameObject的Animation(沒有返回null)
constantForce 附加到該GameObject的ConstantForce(沒有返回null)
renderer 附加到該GameObject的Renderer(沒有返回null)
audio 附加到該GameObject的Audio(沒有返回null)
guiText 附加到該GameObject的GuiText(沒有返回null)
networkView 附加到該GameObject的NetworkView(沒有返回null)
guiTexture 附加到該GameObject的GuiTexture(沒有返回null)
collider 附加到該GameObject的Collider(沒有返回null)
hingeJoint 附加到該GameObject的HingeJoint(沒有返回null)
particleEmitter 附加到該GameObject的ParticleEmitter(沒有返回null)
gameObject 該組件所附加的游戲物體。組件總是會附加到游戲物體上
tag 該游戲物體的標簽。
name 對象的名稱
hideFlags 該物體是否被隱藏,保存在場景中或被用戶修改
繼承的函數
GetComponent 如果游戲附體上附加了一個,則返回type類組件,沒有則返回null
GetComponentInChildren 如果該組件位于GameObject或任何其子物體上,返回type類組件,使用深度優先搜索
GetComponentsInChildren 如果這些組件位于GameObject或任何它的子物體上,返回type類組件。

Camera
類,繼承自Behaviour。Camera是一個設備,玩家通過它來看世界。屏幕空間點用像素定義。屏幕左下為(0,0);右上是(pixelWidth.pixelHeight)。z的位置是以世界單位衡量到相機的距離。視口空間點是歸一化的并且是相對于相機的。相機左下為(0,0);右上是(1,1)。z的位置是以世界單位衡量到相機的距離。世界空間點是以全局坐標定義的(例如Transform.position)。
參見:camera component
◆ var rect : Rect
描述:相機被渲染到屏幕歸一化坐標中的位置。rect的范圍從0(左/下)到1(右/上)。
//每次按下空格鍵時改變視口寬度
void Update () {
if (Input.GetButtonDown (“Jump”)) {
//隨機選擇邊緣
var margin = Random.Range (0.0, 0.3);
//設置矩形
camera.rect = Rect (margin, 0, 1 - margin * 2, 1);
}
}
◆ void CopyFrom (other : Camera) : void
描述:使該相機的設置于其他相機相同。這將從er相機拷貝到所有相機變量(視野,清楚標記,裁剪蒙版)。這也將使相機的變換與other相機相同,相機的層也與other相機相同。在做自定義渲染效果的時候,這可以用來設置一臺具有與其他相機設置完全相同的相機。例如在使用RenderWithShader時。
◆ void Render : void
描述:手動渲染相機。這個將使用相機的清除標記,目標紋理和所有其他設置。相機將發送OnPreCull,OnPreRender和OnPostRender到任何附加的腳本上,并渲染任何最后的圖像濾鏡。這個用來精確的控制渲染次序,為了使用這個特性,創建一個相機并禁用它。然后在它上面調用Render。參見:RenderWithShader。
◆ void RenderToCubemap (cubemap : Cubemap, faceMask : int = 63) : bool
描述:從這個相機渲染到一個立方貼圖。這個是非常有用的。可以再編輯器中烘焙場景的靜態立方貼圖。參考下面的想到實例。相機的位置,清除標志和裁剪面距離將被使用來渲染到立方貼圖表面。faceMask是一個比特域,標示哪個立方貼圖面應該被渲染。每個位對應于一個面。比特數是CubemapFace枚舉的整型值。默認的所有六個立方貼圖面都將被渲染(默認值63最低的6位是打開的)。如果渲染失敗,這個函數將返回false。某些顯卡不支持這個函數。參見:Cubemap assets,Reflective shaders。
//從給定的點渲染場景到以靜態立方貼圖放置這個腳本到工程的Editor文件夾中,然后用一個Reflective shader來使用立方貼圖
class RenderCubemapWizard extends ScriptableWizard{
var renderFromPosition : Transform;
var cubemap : Cubemap;
void OnWizardUpdate () {
helpString = “Select transform to render from and cubemap to render into”;
isValid = (renderFromPosition != null) && (cubemap != null);
}
void OnWizardCreate () {
//為渲染創建臨時相機
var go = new GameObject( “CubemapCamera”, Camera );//放置到物體上
go.transform.position = renderFromPosition.position;
go.transform.rotation = Quaternion.identity;
//渲染到立方貼圖
go.camera.RenderToCubemap( cubemap );
//銷毀臨時相機
DestroyImmediate( go );
}
@MenuItem(“GameObject/Render into Cubemap”)
static void RenderCubemap () {
ScriptableWizard.DisplayWizard(
“Render cubemap”, RenderCubemapWizard, “Render!”);
}
}
◆ void RenderToCubemap (cubemap : RenderTexture, faceMask : int = 63) : bool
描述:從這個相機渲染到一個立方貼圖。用于實時反射到立方貼圖渲染紋理,也是非常耗時的,尤其是所有六個立方貼圖面在每一幀中都被渲染。相機的位置,清楚標志和裁剪面距離將被使用來渲染到立方貼圖表面。faceMask是一
個比特域,標示哪個立方貼圖面應該被渲染。每個位對應于一個面。比特數是CubemapFace枚舉的整型值。默認的所有六個正方貼圖面都將被渲染(默認值63的最低6位是打開的)。如果渲染失敗該函數會返回false。某些顯卡不支持該函數。參加:RenderTexture.isCubemap, Reflective shaders。
//將該腳本附加到使用了Reflective shader的物體上實時反射立方貼圖
script ExecuteInEditMode
var cubemapSize = 128;
var oneFacePerFrame = false;
private var cam : Camera;
private var rtex : RenderTexture;
void Start () {
//啟動時渲染所有6個面
UpdateCubemap( 63 );
}
void LateUpdate () {
if (oneFacePerFrame) {
var faceToRender = Time.frameCount % 6;
var faceMask = 1 << faceToRender;
UpdateCubemap (faceMask);
}
else {
UpdateCubemap (63); //所有6個面
}
}
void UpdateCubemap (faceMask : int) {
if (!cam) {
var go = new GameObject (“CubemapCamera”, Camera);
go.hideFlags = HideFlags.HideAndDontSave;
go.transform.position = transform.position;
go.transform.rotation = Quaternion.identity;
cam = go.camera;
cam.farClipPlane = 100; //不渲染較遠的部分
cam.enabled = false;
}
if (!rtex) {
rtex = new RenderTexture (cubemapSize, cubemapSize, 16);
rtex.isPowerOfTwo = true;
rtex.isCubemap = true;
rtex.hideFlags = HideFlags.HideAndDontSave;
renderer.sharedMaterial.SetTexture ("_Cube", rtex);
}
cam.transform.position = transform.position;
cam.RenderToCubemap (rtex, faceMask);
}
void OnDisable () {
DestroyImmediate (cam);
DestroyImmediate (rtex);
}
◆ void RenderWithShader (shader : Shader, replacementTag : string) : void
描述:用shader替換渲染相機。參考Rendering with Replaced Shaders獲取細節。此函數將渲染相機。這將使相機的的清除標記、目標紋理和所有其他設置。這個相機不會發送OnPreCull, OnPreRender 或者 OnPostRender到已附加的腳本上。
圖像濾鏡
也不會被渲染。該函數可以用于特效,例如渲染整個場景屏幕空間緩沖,熱效果等。為了使用該特性,創建一個相機并禁用它。然后在它上面調用RenderWithShader。參見:Rendering with Replaced Shaders, SetReplacementShader, Render。
◆ void ResetAspect () : void
描述:返回猖狂比為屏幕的長寬比。調用這個結束aspect的效果。
camera.ResetAspect();
◆ void ResetProjectionMatrix () : void
描述:讓投影反映正常的相機參數。調用這個結束projectionMatrix的效果。
camera.ResetProjectionMatrix();
◆ void ResetReplacementShader () : void
描述:從相機上移除shader替換。調用這個結束SetReplacementShader效果。
◆ void ResetWorldToCameraMatrix () : void
描述:在場景中讓渲染位置反映相機位置。調用這個結束worldToCameraMatrix的效果。
camera.ResetWorldToCameraMatrix();
◆ void ScreenPointToRay (position : Vector3) : Ray
描述:返回從相機出發,穿過屏幕點的一個射線。產生的射線是在世界空間中,從相機的近裁剪面開始并穿過屏幕position(x,y)像素坐標(position.z被忽略)。屏幕空間以像素定義。屏幕的左下為(0,0);右上是(pixelWidth,pixelHeight)。
//在屏幕視圖中繪制一條線,穿過一個到屏幕左下角200像素的點
void Update () {
var ray = camera.ScreenPointToRay (Vector3(200,200,0));
Debug.DrawRay (ray.origin, ray.direction * 10, Color.yellow);
}
◆ void ScreenToViewportPoint (position : Vector3) : Vector3
描述:從屏幕空間到視口空間變換position。屏幕空間以像素定義。屏幕的左下為(0,0);右上是(pixelWidth,pixelHeight)。z的位置是以世界單位衡量的刀相機的距離。視口空間是歸一化的并相對于相機的。相機的左下為(0,0);右上是(1,1)。z的位置是以世界單位衡量的刀相機的距離。
◆ void ScreenToWorldPoint (position : Vector3) : Vector3
描述:從屏幕空間到世界空間變換position。屏幕空間以像素定義。屏幕的左下為(0,0);右上是(pixelWidth,pixelHeight)。z的位置是以世界單位衡量的到相機的距離。
//在所選相機的近裁剪面上繪制一個黃色的球,在離左下100像素的位置
void OnDrawGizmosSelected () {
var p = camera.ScreenToWorldPoint (Vector3 (100,100,camera.nearClipPlane));
Gizmos.color = Color.yellow;
Gizmos.DrawSphere (p, 0.1);
}
◆ void SetReplacementShader (shader : Shader, replacementTag : string) : void
描述:使相機用shader替換來渲染。參考Rendering with Replaced Shaders。調用該函數后,相機將使用替換的shader來渲染它的視圖。調用ResetReplacementShader來重置為普通渲染。參見:Rendering with Replaced Shaders, ResetReplacementShader, RenderWithShader。
◆ void ViewportPointToRay (position : Vector3) : Ray
描述:返回從相機出發穿過視點的一個射線。產生的射線是在世界空間中,從相機的近裁剪面開始并穿過視口position(x,y)坐標(position.z被忽略)。視口坐標是歸一化的并相對于相機的。相機的左下為(0,0);右上為(1,1)。
//打印相機直接看到的物體名稱
void Update () {
//獲取穿過屏幕中心的射線
var ray = camera.ViewportPointToRay (Vector3(0.5,0.5,0));
//投射
var hit : RaycastHit;
if (Physics.Raycast (ray, hit)) {
print ("I’m looking at " + hit.transform.name);
}
else {
print (“I’m looking at nothing!”);
}
}
◆ void ViewportToScreenPoint (position : Vector3) : Vector3
描述:從視口空間到屏幕空間變換position。視口空間是歸一化的并相對于相機的。相機的左下為(0,0);右上為(1,1)。z的位置是以世界單位衡量的刀相機的距離。屏幕空間以像素定義。屏幕左下為(0,0;右上為(pixelWidth,pixelHeight)。z的位置是以世界單位衡量的到相機的距離。
◆ void ViewportToWorldPoint (position : Vector3) : Vector3
描述:從視口空間到屏幕空間變換position。視口空間是歸一化的并相對于相機的。相機的左下為(0,0);右上為(1,1)。z的位置是以世界單位衡量的刀相機的距離。屏幕空間以像素定義。屏幕左下為(0,0;右上為(pixelWidth,pixelHeight)。z的位置是以世界單位衡量的到相機的距離。
//在進裁剪面的右上角,針對在場景視圖中選中的相機繪制一個黃色的球
void OnDrawGizmosSelected () {
var p = camera.ViewportToWorldPoint (Vector3 (1,1, camera.nearClipPlane));
Gizmos.color = Color.yellow;
Gizmos.DrawSphere (p, 0.1);
}
◆ void WorldToScreenPoint (position : Vector3) : Vector3
描述:從世界空間到屏幕空間變換position。屏幕空間以像素定義。屏幕的左下為(0,0;右上為(pixelWidth,pixelHeight)。z的位置是
以世界單位衡量的刀相機的距離。
var target : Transform;
void Update () {
var screenPos = camera.WorldToScreenPoint (target.position);
print (“target is " + screenPos.x + " pixels from the left”);
}
◆ void WorldToViewportPoint (position : Vector3) : Vector3
描述:從世界空間到視口空間變換position。視口空間是歸一化的并相對于相機的。相機的左下為(0,0);右上為(1,1)。z的位置是以世界單位衡量的到相機的距離。
//找出target在屏幕的左邊還是右邊
var target : Transform;
void Update () {
var viewPos = camera.WorldToViewportPoint (target.position);
//視口坐標范圍從0到1
if( viewPos.x > 0.5 )
print (“target is on the right side!”);
else
print (“target is on the left side!”);
}
消息傳遞
◆ void OnPostRender () : void
描述:OnPostRender在相機渲染場景之后調用。這個消息被發送到所有附加在相機上的腳本。
◆ void OnPreCull () : void
描述:OnPreCull在相機開始裁剪場景之前調用。OnPreCull僅僅在這個過程之間被調用。這個消息被發送到所有附加在相機上的腳本。如果你想改變相機的視覺參數(例如,fieldOfView或者僅僅是變換),就在這里做這個。場景物體的可見性將給予相機的參數在OnPreCull之后確定。
◆ static var main : Camera
描述:第一個啟用的被標記為“MainCamera”的相機(只讀)。如果場景中沒有這個相機返回null。
繼承的成員
繼承的變量
enable 啟用則Behaviour被更新,不啟用則不更新
transform 附加到該GameObject的Transform(沒有返回null)
rigidbody 附加到該GameObject的Rigidbody(沒有返回null)
camera 附加到該GameObject的Camera(沒有返回null)
light 附加到該GameObject的Light(沒有返回null)
animation 附加到該GameObject的Animation(沒有返回null)
constantForce 附加到該GameObject的ConstantForce(沒有返回null)
renderer 附加到該GameObject的Renderer(沒有返回null)
audio 附加到該GameObject的Audio(沒有返回null)
guiText 附加到該GameObject的GuiText(沒有返回null)
networkView 附加到該GameObject的NetworkView(沒有返回null)
guiTexture 附加到該GameObject的GuiTexture(沒有返回null)
collider 附加到該GameObject的Collider(沒有返回null)
hingeJoint 附加到該GameObject的HingeJoint(沒有返回null)
particleEmitter 附加到該GameObject的ParticleEmitter(沒有返回null)
gameObject 該組件所附加的游戲物體。組件總是會附加到游戲物體上
tag 該游戲物體的標簽。
name 對象的名稱
hideFlags 該物體是否被隱藏,保存在場景中或被用戶修改
繼承的函數
GetComponent 如果游戲附體上附加了一個,則返回type類組件,沒有則返回null
GetComponentInChildren 如果該組件位于GameObject或任何其子物體上,返回type類組件,使用深度優先搜索
GetComponentsInChildren 如果這些組件位于GameObject或任何它的子物體上,返回type類組件。
GetComponents 返回GameObject上所有type類的組件
CompareTag 該游戲物體被是否被標簽為tag?
SendMessageUpwards 在該游戲物體的每個MonoBehaviour和該行為的父對象上調用名為methodName的方法
SendMessage 在該游戲物體的每個MonoBehaviour上調用methodName方法
BroadcastMessage 在這個游戲物體或其任何子物體上的每個MonoBehaviour上調用methodName
GetInstanceID 返回該物體的實例id
繼承的類函數
operator bool 這個物體存在嗎?
Instantiate 克隆original物體并返回這個克隆。
Destroy 移除一個游戲物體、組件或資源。
DestroyImmediate 立即銷毀物體obj。強烈建議使用Destroy代理。
FindObjectsOfType 返回所有類型為type的激活物體。
FindObjectOfType 返回第一個類型為type的激活物體。
operator== 比較兩個物體是否相同。
operator!= 比較兩個物體是否不同。
DontDestroyOnLoad 加載新場景時確保目標物體不被自動銷毀。
ConstantForce
類,繼承自Behaviour。一個不間斷的力。這是一個小的物理工具類,用來將一個連續的力應用到一個物體上。Rigidbody.AddForce只在一幀中應用力道Rigidbody,因此你不得不持續調用這個函數。
領以方面ConstantForce將在每一幀中應用這個力,知道改變這個力或例舉為一個新的值。參見Rigidbody。
變量
C#例子代碼如下
//C#例子,在這個例子中我們顯示如何并行調用
//一個coroutine并繼續執行這個函數
void Start(){
//0秒后,打印”Starting0.0”
//0秒后,打印”Before WaitAndPrint Finishes0.0”
//2秒后,print”waitAndPrint2.0”
Print(“Starting”+Time.time);
StartCoroutine(WaitAndPrint(2.0F));
Print(“Before WaitAndPrint Finishes”+Time.time);
}
IEnumerator WaitAndPrint(float waitTime){
// 暫停waitTime秒
Yield return new WaitForSeconds(waitTime);
Print(“WaitAndPrint”+Time);
}
//c#例子
//在這個例子中我們展示如何調用一個coroutine并等待直到它完成
IEnumerator Start(){
//0秒后,打印”strating0.0”
//2秒后,prints”WaitAndPrint2.0”
//2秒后,打印”Done 2.0”
Print(“Starting”+Time.time);
Yield return StartCoutine(WaitAndPrint(2.0f);
Print(“Done”+Time.time);
}
IEnumerator WaitAndPrint(float waitTime){
//暫停waitTime秒
Yield return new WaitForSeconds(waitTime);
Print(“WaitAndPrint”+Time.time);
}
◆Void StartCoroutine(methodName: string, value: object=null): Coroutine
描述:開始為methodName的Coroutine。
在大多數情況下,你要用StartCoroutine的變體。然而,使用一個字符串方法名的StartCoroutine允許StopCoroutine使用一個特定的方法名稱。字符串級本的特定時它有較高的運行時開銷來開始coroutine,并且你只能傳遞一個參數。
//在則合格例子中我們現實如何一個字符串名調用一個coroutine并停止它
Void Start(){
StartCoroutine(“DoSomething”,2.0);
Yield WaitForSeconds(1);
StopCoroutine(”DoSomething”);
}
Void DoSomething(someParameter: float){
While(true)
{
Print(”DoSomething Loop”);
Yield
}
}
◆Void StopAllCoroutines(): void
描述:停止所有運行在這個行為上的Coroutine。
//開始coroutine
StartCoroutine(“DoSomething”);
//緊跟著取消coroutine
Void DoSomething(){
While(true){
Yield;
}
}
StopAllCoroutines();
◆Void StopCoroutine(methodName: string): void
描述:停止所有運行在這個行為上的名為methodName的Coroutine。
請注意只使用一個字符串方法名的StartCoroutine才能使用StopCoroutine停止。
//在這個例子中我們顯示如何使用一個字符串名調用一個coroutine并停止它
Void Start(){
StartCoroutine(“DoSomething”,2.0);
Yield WaitForSeconds(1);
StopCoroutine(”DoSomething”);
}
Void DoSomething(someParameter: float){
While(true)
{
Print(”DoSomething Loop”);
Yield
}
}
重載函數
◆Void Awake(): void
描述:當腳本實例被加載時,Awake 被調用。
在游戲開始前,使用Awake 來初始化任何變量或游戲狀態。在腳本實例的生命期內Awake 只被調用一次。Awake 在所有物體被初始化之后被調用,因此你可以安全地告訴其他物體或使用如GameObject.FindWithTag來查詢它們。每個游戲物體的Awake 以隨機的順序被調用。因此,你應該使用Awake 來再腳本之間設置引用,并使用Start來傳遞消息。Awake 總是在任何Start函數之前調用。這允許你調整腳本的初始化順序。Awake 不能作為一個Coroutine
注意對于C#哈Boo用戶:使用Awake 而不是構造函數來初始化,因為組件的序列化狀態在構造的時候還沒有確定。Awake 只被調用一次,就像構造函數。
Private var target: GameObject;
Void Awake(){
Target=GameObject.FindWithTag(‘”Player”)
}
Awake不能作為一個coroutine。
◆Void FixedUpdate (): void
描述:如果MonoBehaviour被啟用,這個函數將以固定的幀率調用。
當處理Rigidbody是應該使用FixedUpdate而不是使用Update。例如,當添加一個力到剛體時,你必須在FixedUpdate內以固定的幀率應用而不是在Update內。
//應用一個向上的力到剛體
Void FixedUpdate(){
Rigidbody.AddForce(Vector3.up);
}
力偉到從上一次調用Update的消逝時間,使用Time.deltaTime,這個函數只在Behaviour被啟用時調用。重載這個函數,以便給你的組件提供功能。
◆Void LateUpdate (): void
描述:如果該Behaviour被啟用,LateUpdate將在每幀中調用。
LateUpdate在所有Update函數被調用后調用。這可用于調整腳本執行順序。例如,一個跟隨相機應該總是在LateUpdate中實現,因為他跟蹤Update中移動的物體。
//向前以1米/秒的速度移動物體
Void LateUpdate (){
transfor.Translate(0,0,Time.deltaTime*1);
}
為了得到從最后一個調用LateUpdate的消逝時間,使用Time.deltaTime。如果該Behaviour被啟用,該函數將在每幀中調用。重載這個函數,以便給你的組件提供功能。
◆Void OnApplicationPause(pause: bool): void
描述:當玩家暫停時發送到所有游戲物體。
OnApplicationPause可以是一個coroutine,簡單地在這個函數中使用yield語句。
◆Void OnApplicationQuit(): void
描述:在應用退出之前發送到所有游戲物體。
在編輯器中當用戶停止播放模式時這個被調用。在網頁播放器中當web被關閉時這個函數被調用。
◆Void OnBecameInvisible(): void
描述:OnBecameInvisible函數在這個渲染上的腳本。OnBecameVisible和OnBecameInvisible可以用于只需要在需要在物體可見時才進行的計算。
//當它不可見時禁用這個行為
Finction OnBecameInvisible(){
Enabled=false;
}
OnBecameInvisible可以是一個coroutine,簡單地在這個函數中使用yield語句。當在編輯器中運行時,場景試圖相機也會導致這個函數被調用。
◆Void OnBecameVisible(): void
描述:OnBecameVisible函數在這個渲染器對任何相機變得可見時被調用。
這個消息被發送到所有附加在渲染器上的腳本。OnBecameVisible和OnBecameInvisible可以用于只需要在需要在物體可見時才進行的計算。
//當它不可, 見時禁用這個行為
Finction OnBecameVisible(){
Enabled=false;
}
OnBecameVisible可以是一個coroutine,簡單地在這個函數中使用yield語句。當在編輯器中運行時,場景試圖相機也會導致這個函數被調用。
◆Void OnCollisionEnter(collisionInfo: Collision): void
描述:
當這個碰撞器/剛體開始接觸另一個剛體/碰撞器時OnCollisionEnter被調用。
相對于OnTriggerEnter,OnCollosionEnter傳遞Collision類而不是Collider,Collision類包含接觸點,碰撞速度等細細。如果在函數中不使用CollisionInfo,省略CollisionInfo參數以避免不需要的計算。注意如果碰撞器附加了一個非動力學剛體,也只發送碰撞事件。
Void OnCollisionEnter(collision: Collision){
//調試繪制所有的接觸點和法線
For(var contact: ContactPoint in collision.oontacts){
Debug.DrawRay(contact.point, contact.normal, Color.white);
}
//如果碰撞物體有較大的沖擊就播放聲音
If(collision.relativeVelocity.magnitude>2)
Audio.Play();
}
OnCollisionEnter可以是一個coroutine,簡單地在這個函數中使用yield語句。
◆Void OnCollisionExit(collisionInfo: Collision): void
描述:當這個碰撞器/剛體開始接觸另一個剛體/碰撞器時OnCollisionEnter被調用。
相對于OnTriggerExit,OnCollosionExit傳遞Collision類而不是Collider. Collision類包含接觸點,碰撞速度等細細。如果在函數中不使用CollisionInfo,省略CollisionInfo參數以避免不西藥的計算。注意如果碰撞器附加了一個非動力學剛體,也只發送碰撞事件。
Void OnCollisionExit(collision: Collision){
Print(“No longer in contact with”+collisionInfo.transform.name);
}
OnCollisionExit可以是一個coroutine,簡單地在這個函數中使用yield語句。
◆void OnCollisionStay(collisionInfo:collision):void
描述:對于每個與剛體碰撞器相觸碰的碰撞器剛體,OnCollisionStay將在每一幀中被調用。
相對于OnTriggerStay,OnCollisionStay 傳遞Collision類而不是Collider.Collision類包含接觸點,碰撞速度等細節。如果在函數中不使用collisionInfo省略collisionInfo參數以避免不要必要的計算。注意如果碰撞器附加了一個非動力學剛體,也只發送碰撞事件。
void OnCollisionStay(CollisionInfo:Collision){
//調試繪制所有的接觸點和法線
for (var contact:ContactPoint in collision.contacts){
Debug.DrawRay(contact.point,contact.normal,Color.white);
}
}

用上述著色器繪制一個全屏四邊形
GL.PushMatrix();
GL.LoadOrtho();
for(var i=0;i<mat.pssCount;++i){
mat.SetPass(i);
GL.Begin(GL.QUADS);
GL.Vertex3(0,0,0.1);
GL.Vertex3(1,0,0.1);
GL.Vertex3(1,1,0.1);
GL.Vertex3(0,1,0.1);
GL.End();
}
GL.PopMatrix();
}
◆void OnpreCull():void
描述:OnPreCull在相機開始裁剪場景之前調用
裁剪決定那個物體對于相機來說是可見的。OnPreCull僅僅在這個過程之間被調用。
只有腳本被附加到相機上時才會調用這個函數
如果你想改變相機的視覺參數(例如fieldOfView或者僅是變換),就在這里做這個。
場景物體的可見性將基于相機參數在OnPerCull之后確定。
? void OnRender():void
描述:OnpreRender在相機開始渲染場景之前調用。
只用腳本被附加到相機上時才會調用這個函數。
注意如是果你在這里改變了相機的視野參數(例如fieldOfView),它們將影響下一幀。用OnPreCull代替。OnPreRender可以是一個coroutine,簡單地在這個函數中使用yield語句。
參見:OnPostRender
? void OnRenderImage(source:RenderTexture,destination:RenderTexture):void
描述:OnRenderImage在所有渲染完成后被調用,來渲染圖片的后期處理效果(限于Unity Pro)
這允許你使用基于shader的過濾器來處理最后的圖片。進入圖片是source渲染紋理結果是destination渲染紋理。當有多個圖片過濾附加在相機上時,它們序列化地處理圖片,將第一個過濾器的目標作為下一個過濾器的源。
這個消息被發送到所有附加在相機上腳本。
參見:Unity Pro 中的image effects
◆void OnRenderObject(queueindex:int):void
描述:OnRenderObject被用來渲染你自己的物體,使用Graphics.DarwMesh或者其他函數。
queueIndex指定用來渲染物體的render queue。可以使用RenderBeforeQueues屬性來指定你想繪制這個物體到哪里渲染隊列。
◆void OnserializeNetworkView(stream:Bitstream.info:NetworkMessageInfo):void
描述:用來在一個被網絡視監控的腳本中自定義變量同步
它自動決定被序列化的變量是否應該發送或接收,查看下面的例子獲取更好的描述:
//這個物體的生命信息
Int currentHealth;
void OnSerializeNetworkView(stream:BitStream,info:NetworkMessageInfo){
if(stream.isWriting){
int health=currentHealth;
stream.Serialize(health);
}
else{
int health=0;
stream.Serialize(health);
currentHealth=health;
}
}

Terrain
類,繼承自MonoBehaviour
渲染地形的Terrain
變量
◆var basemapDistance:float
描述:超出basemapDistance的高度圖,將使用預先計算的地解析度basemap。
這個可以改善遠處塊的性能。Unity混合任意數量的地形紋理,使用條圖來渲染近處的高度圖。
void Start(){
Terrain.activeTerrain.basemapDistance=100;
}
◆var castShadows:bool
描述:地形應該投射陰影?
◆var detailObjectDistance:float
描述:在這個距離內細節將被顯示。
void Start(){
Terrain.activeTerrain.detailObjectDistance=40;
}
◆var heightmapMaximumLOD:int
描述:讓你實質降低用于渲染的高度圖解析度
這個可用在低端的顯卡上并不會顯示最高的LOD地形。值為0表示總是顯示最高細節。
值為1表示三角形數量將減小到1/4,高度圖的解析度將是寬度和高度的一半。
void Start(){
Terrain.activeTerrain.heightmapMaximumLOD=1;
}
DontDestroyOnLoad 加載新場景時確保物體target不被自動銷毀。
Skybox
類,繼承自Behaviour
Skybox component的腳本接口
天空盒只有material屬性
參見:skybox component
變量
◆var material:Material
描述:該天空盒使用的材質。
◆ var rotation: Quaternion
描述:剛體的旋轉
這個與設置transform.rotation相同,然而rotation只在物理的最后被應用到變換。如果
你想連續移動一個剛體或運動學剛體,使用MovePosition和MoveRotation。
void Start(){
rigidbody.rotation=Quaternion.identity;
}
◆ var sleepAngularVelocity: float
描述:角速度,低于該值的物體將開始休眠。(默認0.14)范圍{0, infinity}
參考Rigidbody Sleeping獲取更多信息。
◆ var sleepVelocity: float
描述:線行速度,低于該值的物體將開始休眠。(默認0.14)范圍{0, infinity}
參考Rigidbody Sleeping獲取更多信息。
Rigidbody.sleepingVelocity=0.1;
◆ var solverIterationCount: int
描述:允許你覆蓋每個剛體的求解迭代數。
solverIterationCount決定關節和接觸點如何精確地計算。如果出現鏈接的物體震蕩和行
為怪異,為solver Iteration Count設置一個較高的值將改善他們的穩定性。
rigidbody.solverIterationCount=10;
◆ var useConeFriction: bool
描述:用于該鋼鐵的立錐摩擦力
這確保所有接觸包含的行為將使用錐摩擦力。這對于性能有負面影響。默認這個是關
閉的,一個更快和更好的被稱為金字塔摩擦的近似方法被使用。在大多數情況下建議保留
這個值為關閉。
◆ var useGravity: bool
描述:控制重力是否影響這個剛體
如果設置為假剛體的行為會像是在外層空間。
在所有進入這個碰撞器的所有剛體上禁用重力
void OnTriggerEnter(other: Collider)
{
if(other.attachedRigidbody)
{
other.attachedRigidbody.useGravity=false;
}
}
//啟用時將這個碰撞器改變為一個觸發器
collider.isTrigger=true;
◆ var velocity: Vector3
描述:剛體的速度向量
在大多數情況下,你不應該直接修改速度,因為這會導致不真實的結果。不要再每個
物體步設置物體的速度,這將導致不真實的物理模擬。一個典型的例子是,當你在FPS中
使用跳的時候,改變速度,因為你想立即改變速度。
void FixedUpdate(){
if(Input.GetButtonDown(“Jump”)){
rigidbody.velocity.y=10;}
}
◆ var worldCenterOfMass: Vector3
描述:世界空間中剛體的質量重心(只讀)。
函數
◆ void AddExplosionForce (explosionForce : float, explosionPosition : Vector3,
explosionRadius : float, upwardsModifier : float = 0.0F, mode : ForceMode =
ForceMode.Force): void
描述:應用一個力到剛體來模擬爆炸效果。爆炸力將隨著到剛體的距離線形衰減。
這個功能也對人偶有很好的作用。如果radius為0,將使用全部的力不論position距
離剛體多遠.upwardModifier就像從物體下方使用這個力. 這個是非常有用的,以為爆炸
將向上拋這個物體而不是將它們推向一邊,這個看起來非常的酷。值2將應用一個力在低
于物體2米處,然而不會改變實際的爆炸位置. explosionPositon是爆炸力被應用的位置.
explosionRadius是爆炸的半徑,超過explosionRadius距離的剛體將不會受到影響.
var radius=5.0;
var power=10.0;
void Start(){
//應用一個爆炸力到所有附加的剛體上
var explosionPos=transform.position;
var colliders: Collider[]=Physics.OverlapSphere(explosionPos, radius);
for (var hit in colliders){
if(!hit)
continue;
if(hit.rigidbody){
hit.rigidbody.AddExplosionForce(power.explosionPos, radius, 3.0);
}
}
}
◆ void AddForce(force: Vector3, mode: ForceMode=ForceMode.Force): void

描述:為剛體添加一個力。作為結果剛體將開始移動。
//在全局坐標空間中添加一個向上的力
void FixedUpdate(){
rigidbody.AddForce(Vector3.up10);
}
◆ void AddForce(x: float, y: float, z: float, mode: ForceMode=ForceMode.Force): void
描述:為剛體添加一個力,作為結果剛體將開始移動。
//全局坐標空間中添加一個向上的力
void FixedUpdate(){
rigidbody.AddForce(0,10,0);
}
如果你想在多針幀中使用力,你應該在FixedUpdate中而不是Update使用使用它。
◆ void AddForceAtPosition(force: Vector3, position: Vector3, mode: ForceMode=
ForceMode.Force): void
描述:在位置position處使用force。這個將應用力矩和力到這個物體上。
對于真的的效果position應該近似地在剛體表面的范圍內. 這個最常用于爆炸。當使用
爆炸的時候最好應用力到多幀而不是一幀中。主要當position遠離剛體的中心時,使用的力
矩陣將非常不真實。
void ApplyForce(body: Rigidbody){
direction=body.transform.position-transform.position;
body.AddForceAtPosition(direction.normalized, transform.position);
}
◆ void AddRelativeForce(force: Vector3, mode: ForceMode=ForceMode.Force): void
描述:相對于它的坐標系統添加一個力到剛體。
作為結果剛體將開始移動。
//沿著自身z軸向前移動剛體
void FixedUpadate(){
rigidbody.AddRelativeForce(Vector3.forward10);
}
◆ void AddRelativeForce(x: float, y: float, z: float, mode: ForceMode=
ForceMode.Force): void
描述:相對于它的坐標系統添加一個力到剛體。
作為結果剛體將開始移動。
//沿著自身z軸向前移動剛體
void FixedUpadate(){
rigidbody.AddRelativeForce(0,0,10);
}
如果你想在多幀中使用力,你應該在FixedUpdate中而不是Update使用使用它。
◆ void AddRelativeTorque(torque: Vector3, mode: ForceMode=ForceMode.Force):
void
描述:相對于剛體自身的坐標系統,添加一個力矩到剛體。
剛體將繞著torque軸旋轉。
//繞著全局y軸旋轉剛體
void FixedUpadate(){
rigidbody.AddRelativeForce(Vector3.up10);}
◆ void AddRelativeTorque(x: float, y: float, z: float, mode: ForceMode=
ForceMode.Force): void
描述:相對于剛體自身的坐標系統,添加一個力矩到剛體。
剛體將繞著torque軸旋轉。
//繞著自身y軸旋轉剛體
void FixedUpadate(){
rigidbody.AddRelativeForce(0,10,0);}
如果你想在多幀中使用力,你應該在FixedUpdate中而不是Update使用使用它。
◆ void AddTorque((torque: Vector3, mode: ForceMode=ForceMode.Force): void
描述:為剛體添加一個力矩。
剛體將繞著torque軸旋轉。
//繞著全局y軸旋轉剛體
void FixedUpadate(){
rigidbody.AddTorque(Vector3.up10);
}
如果你想在多幀中使用力,你應該在FixedUpdate中而不是Update使用使用它。
◆ void AddTorque(x: float, y: float, z: float, mode: ForceMode=ForceMode.Force):
void
描述:為剛體添加一個力矩。
剛體將繞著torque軸旋轉。
/繞著全局y軸旋轉到剛體
void FixedUpadate(){
rigidbody.AddTorque(0,10,0);
}
◆ void ClosestPointOnBounds(position: Vector3): Vector3
描述:到碰撞器包圍盒上最近點。
這可以用來計算受到爆炸傷害時的傷害點數。或計算作用到剛體表面上一個點的爆炸
力。
var hitPoints=10.0;
void ApplyHitPoints(explostionPos: Vector3, radius: float){
//從爆炸位置到剛體表面的距離
var ClosestPoint=rigidbody.ClosestPointOnBounds(explosionPos);
var distance=Vector3f.Distance(closestPoint, explosionPos);
//傷害點數隨著到傷害的距離而降低
var damage=1.0-Mathf.Cllamp01(distance/radius);
//這是我們要用的最終傷害點數。 10 at maximum
damage*=10;
//應用傷害
hitPoints=damage;
}
◆ void GetPointVelocity(worldPoint: Vector3): Vector3
描述:剛體在世界空間中worldPoint點處的速度.
GetPointVelocity在計算速度的時候將考慮剛體的angularVelocity。
//打印車輪的速度
point=transform.InverseTransformPoint(Vector3(0,-2,0));
var velocity=rigidbody.GetPointVelocity(point);
print(velocity.magnitude);
◆ void GetRelativeVelocity(relativePoint: Vector3): Vector3
描述:相對于剛體在relativePoint處的速度。
GetRelativePointVelocity在計算速度的時候將考慮剛體的angularVelocity。
//打印車輪的速度
var relativeVelocity=rigidbody.GetRelativePointVelocity(Vector3(0,-2,0));
print(relativeVelocity.magnitude);
◆ void IsSleeping(): bool
描述:剛體處于休眠?
參考Rigidbody Sleeping獲取更多信息。
if(rigidbody.IsSleeping())
print(“Sleeping”);
◆ void MovePosition(position: Vector3): void
描述:移動剛體到position.
對于運動學剛體,它基于剛體的運動應用摩擦力。這個讓你模擬剛體位于移動平臺之
上的情況。如果你想其他的剛體與運動學剛體交互,你需要在FixedUpdate函數中移動它。
var speed=Vector3(3,0,0);
void FixedUpdate()
{
rigidbody.MovePosition(rigidbody.position+speedTime.deltaTime);
}
◆ void MoveRotation(rot: Quaternion): void
描述:旋轉剛體到rotation.
對于運動學剛體,它基于剛體的運動應用摩擦力。這個讓你模擬剛體位于移動/旋轉平
臺之上的情況。如果你想其他的剛體與運動學剛體交互,你需要在FixedUpdate函數中移
動它。
var eulerAngleVelocity=Vector3(0,100,0);
void FixedUpdate()
{
var deltaRotation=Quaternion.Euler(eulerAngleVelocityTime.deltaTime);
rigidbody.MoveRotation(rigidbody.rotation*deltaRotation);
}
◆ void SetDensity(density: float): void
描述:基于附加的剛體和固定的密度設置質量。
這個可以用來設置質量為隨著碰撞器的尺寸而縮放。
rigidbody.SetDensity(1.5);
◆ void Sleep(): void
描述:強制剛體休眠至少一幀
一個常見的使用是從Awake中調用它以便使剛體在啟用的時候休眠。參考Rigidbody
Sleeping獲取更多信息。
rigidbody.Sleeping()
◆ void WakeUp(): void
描述:強制剛體蘇醒
rigidbody.WakeUp()
參考Rigidbody Sleeping獲取更多信息。
消息傳遞
◆ void OnCollisionEnter(collisionInfo: Collision): void
描述:當這個碰撞器/剛體開始碰撞另一個剛體/碰撞器時OnCollisionEnter被調用。
相對于OnTriggerEnter,OnCollisionEnter傳遞Collision類而不是Collider.Collision類包
含接觸點,碰撞速度等細細。如果在函數中不使用collisionInfo,省略collisionInfo參數以避
免不必要的計算。主要如果碰撞器附加了一個非動力剛體,也只發送碰撞事件。
void OnCollisionEnter(collision:Collision){
//調試繪制所以的接觸點和法線
for(var contact:ContactPoint in collision.contacts){
Debug.DrawRay(contact.point, contact.normal, Color.white);
}
//如果碰撞物體有較大的沖勁就播放聲音
if(collision.relativeVelocity.magnitude>2)
audio.Play();
}
//一枚手榴彈
//-在擊中一個表面時初始化一個爆炸預設
//-然后銷毀它
var explosionPrefab: Transform;
void OnCollisionEnter(collision: Collision){
//旋轉這個物體使y軸面向沿著表面法線的方向
var contact-collision.contacts[0];
var rot=Quaternion.FormToRotation(Vector3.up, contact.mormal);
var pos=contact.point;
Instantiate(explosionPrefab, pos, rot);
//銷毀這個發射物
Destroy(gameObject);
}
◆ void OnCollisionExit(collisionInfo: Collision): void
描述:當這個碰撞器/剛體停止碰撞另一個剛體/碰撞器時OnCollisionExit被調用。
相對于OnTriggerExit,OnCollisionExit傳遞Collision類而不是Collider.Collision類包含
接觸點,碰撞速度等細細。如果在函數中不使用collisionInfo,省略collisionInfo參數以避免
不必要的計算。主要如果碰撞器附加了一個非動力剛體,也只發送碰撞事件。
void OnCollisionExit(collision:Collision){
print("No longer in contact with "+collisionInfo.transform.name);
}
◆ void OnCollisionStay(collisionInfo: Collision): void
描述:對于每個與剛體/碰撞器相觸碰的碰撞器/剛體,OnCollisionStay將在每一幀中被調
用。
相對于OnTriggerStay,OnCollisionStay傳遞Collision類而不是Collider.Collision類包含
接觸點,碰撞速度等細細。如果在函數中不使用collisionInfo,省略collisionInfo參數以避免
不必要的計算。主要如果碰撞器附加了一個非動力剛體,也只發送碰撞事件。
void OnCollisionStay(collision:Collision){
void OnCollisionEnter(collision:Collision){
//調試繪制所以的接觸點和法線
for(var contact:ContactPoint in collision.contacts){
Debug.DrawRay(contact.point, contact.normal, Color.white);
}
繼承的成員
繼承的變量
transform 附加到這個GameObject的Transform(如果沒有為null)。
rigidbody 附加到這個GameObject的Rigidbody(如果沒有為null)。
camrea 附加到這個GameObject的Camera(如果沒有為null)。
light 附加到這個GameObject的Light(如果沒有為null)。
animation 附加到這個GameObject的Animation(如果沒有為null)。
constantForce 附加到這個GameObject的ConstantForce如果沒有為null)。
renderer 附加到這個GameObject的Renderer(如果沒有為null)。
audio 附加到這個GameObject的AudioSource(如果沒有為null)。
guiText 附加到這個GameObject的GUIText(如果沒有為null)。
networkView 附加到這個GameObject的NetworkView(只讀)。(如果沒有為null)。
guiTexture 附加到這個GameObject的GUITexture(只讀)。(如果沒有為null)。
collider 附加到這個GameObject的Collider(如果沒有為null)。
hingeJoint 附加到這個GameObject的HingeJoint(如果沒有為null)。
particleEmitter 附加到這個GameObject的ParticleEmitter(如果沒有為null)。
gameObject 這個組件所附加的游戲物體。一個組件總是附加到一個游戲物體。
tag 這個游戲物體的標簽。
name 對象的名稱。
hideFlags 該物體是夠被隱藏,保存在場景中或被用戶修改?
繼承的函數
GetComponent 返回type類型的組件,如果游戲物體上附加了一個,如
果沒有返回null。
GetComponentInChildren 返回type類型的組件,這個組件位于GameObject或任何
它的子物體上,使用深度優先搜索。
GetComponentsInChildren 返回所以type類型的組件,這些組件位于GameObject或
任何它的子物體上。
GetComponents 返回GameObject上所以type類型的組件。
CompareTag 這個游戲物體被標簽為tag?
SendMessageUpwards 在這個游戲物體的每個MonoBehaviour和該行為的祖先
上調用名為methodName方法。
SendMessage 在這個游戲物體上的每個MonoBehaviour上調用
methodName方法。
BroadcastMessage 在這個游戲物體或其任何子上的每個MonoBehaviour上
調用methodName方法。
GetInstanceID 返回該物體的實例id。
繼承的類函數
operator bool 這個物體存在嗎?
Instantiate 克隆original物體并返回這個克隆。
Destroy 移除一個游戲物體,組件或資源。
DestroyImmediate 立即銷毀物體obj。強烈建議使用Destroy代替。
FindObjectsOfType 返回所有類型為type的激活物體。

FindObjectsOfType 返回第一個類型為type的激活物體。
operator== 比較兩個物體是否相同。
operator != 比較兩個物體是否不相同。
DontDestroyOnLoad 加載新場景時確保物體target不被自動銷毀。
TextMesh
類,繼承自Component
text mesh component的腳本接口
參見:text mesh component.
變量
◆ var font: Font
描述:使用的Font.
參見:text mesh component.
//設置附加的文本網格的文本
var newFont: Font;
GetComponent(TextMesh).font=newFont;
◆ var font: string
描述:顯示的文本.
參見:text mesh component.
//設置附加的文本網格的文本
GetComponent(TextMesh).text=“Hello World”;
繼承的成員
繼承的變量
transform 附加到這個GameObject的Transform(如果沒有為null)。
rigidbody 附加到這個GameObject的Rigidbody(如果沒有為null)。
camrea 附加到這個GameObject的Camera(如果沒有為null)。
light 附加到這個GameObject的Light(如果沒有為null)。
animation 附加到這個GameObject的Animation(如果沒有為null)。
constantForce 附加到這個GameObject的ConstantForce如果沒有為null)。
renderer 附加到這個GameObject的Renderer(如果沒有為null)。
audio 附加到這個GameObject的AudioSource(如果沒有為null)。
guiText 附加到這個GameObject的GUIText(如果沒有為null)。
networkView 附加到這個GameObject的NetworkView(只讀)。(如果沒有為null)。
guiTexture 附加到這個GameObject的GUITexture(只讀)。(如果沒有為null)。
rigidbody.velocity=transform.right*10;
PhysicsMaterial
類,繼承自Object
載體材質描述:如何處理物體碰撞(摩擦,彈性)
參見:Collider
變量
◆ var bounceCombine: PhysicsMaterialCombine
描述:決定彈力是如何組合的。
傳統上彈性屬性依賴于兩種相互接觸的材質的組合。然而在游戲中這是不切實的。可以
使用組合模式來調整兩個材質的彈性如何被組合。
collider.material.bounceCombine=FrictionCombineMode.Average;
◆ var bouncyness: float
描述:表面的彈力如何?0值沒有彈力。1值沒有能力損失的反彈。
collider.bouncyness=1;

GUISkin
類,繼承自ScriptableObject
變量
◆ var box: GUIStyle
描述:用于GUI.Box控件的缺省風格
◆ var button: GUIStyle
描述:用于GUI.Button控件的缺省風格

Shader
類,繼承自Object
用于所以渲染的著色器腳本
大多數高級的渲染都是通過Material類控制的. Shader類類最常用于檢查一個著色器時
否能夠運行在用戶的硬件上(isSupported屬性)并根據名稱找到著色器(Find方法).
參見:Material類,Materials,ShaderLab documentation.
變量
◆ var isSupported: bool
描述:這個著色器能夠運行在端用戶的顯卡上?(只讀)
如果這個著色器重的設置和任何fallback函數被支持,返回真。在實現特定的效果時,
最常使用這個。例如,Unity Pro中的image effects,如果這個著色器不被支持那么Unity將
自動禁用它們。
//如果材質的著色器不被支持,禁用渲染器
if(!renderer material.shader.isSupported)

TerrainData
類,繼承自Object
TerrainData類存儲高度圖,細節網格位置,樹實例,和地形紋理alph圖,
Terrain組件鏈接地形數據并渲染它。
變量
◆ var heightmapHeight: int
描述:采樣的地形高度(只讀)
◆ var heightmapWidth: int
描述:采樣的地形寬度(只讀)
◆ var size: Vector3
描述:地形在世界單位下的總大小
Cubemap
類,繼承自Texture
處理立方貼圖的類,用這個來創建或修改已有的cube map assets.
變量
◆ var format: TextureFormat
描述:紋理中像素數據的格式(只讀)
使用這個確定紋理的格式。
構造函數
◆ static void Cubemap(size: int. format: TextureFormat, mipmap: bool): Cubemap
描述:創建新的空立方貼圖紋理;

MovieTexture
類,繼承自Texture
Movie Textures是可以播放電影的紋理
它們可以用于過場動畫電影序列,或者渲染電影到場景中。
變量
◆ var audioClip: AudioClip
描述:返回屬于MovieTexture的AudioClip.
注意這是一個特定的AudioClip它總是與電影同步播放音頻。在編輯器重如果你將電影
的audioClip附加到一個源上,它將在電影播放的時候自動開始播放,否則你必須收動開
始它,剪輯只能被附加到一個AudioSource。

PlayerPrefs

在游戲會話中保持并訪問玩家偏好設置。
在Mac OS X上PlayerPrefs存儲在-/Library/PlayerPrefs文件夾,名文unity/[company
name][product name].plist,這里company和product是在Project Setting中設置的,相同
的plist用于在編輯器中運行的工程和獨立模式.
在Windows獨立模式下,PlayerPrefs被存儲在注冊表的HKCU Software[company
name][product name]鍵下,這里company和product是在Project Setting中設置的.
在Web模式,PlayerPrefs存儲在Mac OS X的二進制文件
-/Library/Preferences/Unity/WebPlayerPrefs中和Windows的
%APPDATA%\Unity\WebPlayerPrefs中,一個偏好設置文件對應一個web播放器URL并且
文件大小被限制為1兆。如果超出這個限制,SetInt,SetFloat和SetString將不會存儲值并相處一個PlayerPrefsException.

KeyCode
KeyCode是由Event.keyCode返回的。這些直接映射到鍵盤上的物理鍵。

Backspace 退格鍵 Delete Delete鍵 TabTab鍵 Clear Clear鍵 Return 回車鍵
Pause 暫停鍵 Escape ESC鍵 Space 空格鍵 Keypad0 小鍵盤0 Keypad1 小鍵盤1
Keypad2 小鍵盤2 Keypad3 小鍵盤3 Keypad4 小鍵盤4Keypad5 小鍵盤5
Keypad6 小鍵盤6 Keypad7 小鍵盤7Keypad8 小鍵盤8 Keypad9 小鍵盤9
KeypadPeriod 小鍵盤“.” KeypadDivide 小鍵盤“/”KeypadMultiply小鍵盤“*”
KeypadMinus 小鍵盤“-” KeypadPlus 小鍵盤“+” KeypadEnter 小鍵盤“Enter”
KeypadEquals 小鍵盤“=”UpArrow 方向鍵 DownArrow 方向鍵下RightArrow 方向鍵右
LeftArrow 方向鍵左 Insert Insert鍵Home Home鍵EndEnd鍵 PageUp PageUp鍵 PageDown PageDown鍵F1功能鍵F1 F2功能鍵F2 F3功能鍵F3 F4功能鍵F4F5功能鍵F5
F6功能鍵F6F7功能鍵F7 F8 功能鍵F8 F9 功能鍵F9 F10 功能鍵F10 F11 功能鍵F11
F12 功能鍵F12 F13 功能鍵F13 F14 功能鍵F14F15 功能鍵F15
Alpha0 按鍵0 Alpha1 按鍵1 Alpha2 按鍵2 Alpha3 按鍵3Alpha4 按鍵4
Alpha5 按鍵5 Alpha6 按鍵6Alpha7 按鍵7Alpha8 按鍵7Alpha9 按鍵9
Exclaim ‘!’鍵 DoubleQuote雙引號鍵 Hash Hash鍵Dollar ‘$’鍵
AmpersandAmpersand鍵 Quote 單引號鍵LeftParen 左括號鍵RightParen右括號鍵
Asterisk ‘ * ’鍵Plus ‘ + ’鍵 Comma ‘ , ’鍵 Minus ‘ - ’鍵
Period ‘ . ’鍵 Slash ‘ / ’鍵 Colon ‘ : ’鍵Semicolon‘ ; ’鍵
Less ‘ < ‘鍵Equals ‘ = ‘鍵Greater ‘ > ‘鍵 Question ‘ ? ’鍵
At ‘@’鍵 LeftBracket‘ [ ‘鍵 Backslash ‘ \ ’鍵RightBracket‘ ] ’鍵
Caret ‘ ^ ’鍵Underscore‘ _ ’鍵BackQuote‘ ` ’鍵A ‘a’鍵B ‘b’鍵
C ‘c’鍵 D ‘d’鍵 E ‘e’鍵 F ‘f’鍵 G ‘g’鍵 H ‘h’鍵 I ‘i’鍵 J ‘j’鍵 K ‘k’鍵L ‘l’鍵 M ‘m’鍵 N ‘n’鍵 O ‘o’鍵 P ‘p’鍵
Q ‘q’鍵 R ‘r’鍵S ‘s’鍵 T ‘t’鍵 U ‘u’鍵 V ‘v’鍵 W ‘w’鍵
X ‘x’鍵Y ‘y’鍵 Z ‘z’鍵 Numlock Numlock鍵 Capslock 大小寫鎖定鍵
ScrollLockScroll Lock鍵 RightShift 右上檔鍵LeftShift 左上檔鍵RightControl右Ctrl鍵
LeftControl左Ctrl鍵RightAlt 右Alt鍵LeftAlt 左Alt鍵LeftApple 左Apple鍵
LeftWindows左Windows鍵RightApple右Apple鍵RightWindows右Windows鍵
AltGr Alt Gr鍵Help Help鍵Print Print鍵SysReq Sys Req鍵Break Break鍵
Mouse0 鼠標左鍵Mouse1 鼠標右鍵Mouse2 鼠標中鍵Mouse3 鼠標第3個按鍵
Mouse4 鼠標第4個按鍵Mouse5 鼠標第5個按鍵Mouse6 鼠標第6個按鍵
JoystickButton0手柄按鍵0JoystickButton1手柄按鍵1 JoystickButton2手柄按鍵2
JoystickButton3手柄按鍵3 JoystickButton4手柄按鍵4 JoystickButton5手柄按鍵5
JoystickButton6手柄按鍵6 JoystickButton7手柄按鍵7 JoystickButton8手柄按鍵8
JoystickButton9手柄按鍵9 JoystickButton10手柄按鍵10 JoystickButton11手柄按鍵11
JoystickButton12手柄按鍵12 JoystickButton13手柄按鍵13 JoystickButton14手柄按鍵14
JoystickButton15手柄按鍵15JoystickButton16手柄按鍵16JoystickButton17手柄按鍵17 JoystickButton18手柄按鍵18 JoystickButton19手柄按鍵19

Light如何被渲染。
參見: light組件

◆ LightRenderMode.Auto
描述: 自動選擇渲染模式。
選擇是否渲染這個Light為像素光或者頂點光源(建議缺省)。
// 設置光源的渲染模式為自動
light.renderMode = LightRenderMode.Auto;
參見: light組件
◆ LightRenderMode.ForcePixel
描述: 強制Light為像素光源。
只將這個用于真正重要的光源,例如一個玩家的手電筒。
// 強制光源為像素光源
light.renderMode = LightRenderMode.ForcePixel;
參見: light組件
◆ LightRenderMode.ForceVertex
描述: 強制Light為頂點光源。
這個選項對于背景光或遠處的光照是非常好的。
// 強制光源為頂點光源
light.renderMode = LightRenderMode.ForceVertex;
參見: light組件
LightShadows
Light的陰影投射選項。
參見: light組件

◆ LightShadows.Hand
描述:投射“hard”陰影(沒有陰影過濾)
//設置光源為投射硬陰影
Light.shadows=LightShadows.Hard;
參見:light component
◆LightShadows.None
描述:不投射陰影(默認)
//設置光源為不投射陰影
Light.shadows=lightshadows.None;
參見:light component
◆LightShadows.Soft
描述:投射Soft陰影(帶有4倍PCF過濾)
//設置光源為投射4倍過濾的軟陰影陰影
Light.shadows=lightshadows. Soft;
參見:light component
LightType
Light的類型。
參見:Light.typelight component

◆LightType.Directional
描述:這個光源是一個直射光源。
參見:Light.type, light component
//制作一個直射光源
Light.type=LightType.Directional;
◆LightType.Point
描述:這個光源是一個點光源。
參見:Light.type,light component
//制作一個直射光源
Light.type=LightType.Point;
◆LightType.Spot
描述:這個光源是一個透射光源。
參見:Light.type, light component
//制作一個透射光源
Light.type=LightType.Spot;
MonoScript
類,繼承自TextAsset
表示腳本資源
注意:這是一個編輯器類,為了使用它你必須放置腳本到工程文件夾的Assets/Editor中,編輯器類位于UnityEditor命名空間因此對于C#腳本你需要在腳本開始位置添加”usingUnityEditor”
這個類表示存儲在工程中的C#,javaScript和Boo文件
函數
void GetClass () : System.Type
描述:返回由這個腳本實現的類的System.Type對象

先介紹一些基本函數(具體用法自己查文檔):
1.場景切換:Application.LoadLevel(“Level1”)
2.讀取場景時不移除物體:DontDestroyOnLoad(object) //會保留該物體的任何數據,包括坐標,可以用于任何物體,也包括GUI哦,可以靈活運用。
3.設置該物體激活狀態(移除物體前先執行這個,預防組件在運行狀態不允許移除):SetActiveRecursively(bool)
4.移除物體(移除不掉時候先設置他的激活狀態為false):Destroy()
5.創建prefab或者其他object的克隆:Instantiate(xxx)
然后介紹一些基礎知識:

1.文件間傳遞可以用static靜態類型來橋接數據(見我另外一篇blog),當然場景間傳遞也可以。
2.注意引用與值傳遞!!a.如果你傳的是個引用類型,但引用的東西卻是場景實物,那你就得用上面第二個函數保留該物體(否則下一場景這個引用所指的內容就不存在了,會出錯的),這樣在新場景中可以直接繼承他的所有即時屬性;b.當然如果你傳的這個引用指向一個prefab,那就不存在這問題了,這里如果當前場景已經改變了角色數據,那你傳遞引用后也要傳遞被改變的屬性,好在新的場景中重新賦值給這個prefab的克隆體。(如果你用文件記錄角色狀態,那用b方法是最好的)
最后是實例講解:

目標:場景1選擇好一輛車 GO-> 場景2使用選中的車比賽
流程介紹:
場景1(車庫):

選車(有好幾輛車可以選的),然后將這個車的prefab引用傳遞到一個js文件的static變量里儲存
進入場景2:

在原先地面指定的坐標克隆剛才引用的prefab,完成目標(注意代碼設置一些數據,比如攝像機跟蹤參數等)。
對手車是隨機的^ ^原理一樣,只不過不需要傳值,訂好坐標隨機產生AI就可以。

現在就恨自己沒錢買MacBook pro和iphone了,游戲基本成型,就差iphone上的手感調試、功能性能測試和界面調試了。


  • 0 ??

  • 總結

    以上是生活随笔為你收集整理的Unity3D脚本学习1的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。