Unity 3D 腳本教學 (二)

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

Unity 3D 腳本教學 (二)

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

根據名稱或標籤定位.
你可以使用GameObject.FindWithTag和GameObject.FindGameObjectsWithTag搜索具有特定標籤的遊戲物體,使用GameObject.Find根據名稱查找物體。
function Start ()
{
// 按照名稱
var go = GameObject.Find("SomeGuy");
go.transform.Translate(0, 1, 0);
// 按照標籤

var player = GameObject.FindWithTag("Player");
player.transform.Translate(0, 1, 0);
}
你可以在結果上使用GetComponent,在找到的遊戲物體上得到任何腳本或組件。
function Start ()
{
// 按名稱
var go = GameObject.Find("SomeGuy");
go.GetComponent(OtherScript).DoSomething();
// 按標籤
var player = GameObject.FindWithTag("Player");
player.GetComponent(OtherScript).DoSomething();
}
一些特殊的物體有快捷方式,如主相機使用Camera.main。
4.作為參數傳遞
一些事件消息在事件包含詳細信息。例如,觸發器事件傳遞碰撞物體的Collider組件到處理函數。
OnTriggerStay給我們一個到碰撞器的引用。從這個碰撞器我們可以獲取附加到其上的剛體。
function OnTriggerStay( other : Collider ) {
// 如果另一個碰撞器也有一個剛體
// 應用一個力到它上面
if (other.rigidbody) {
other.rigidbody.AddForce(0, 2, 0);
}
}
或者我們可以通過碰撞器獲取附加在同一個物體上的任何組件。
function OnTriggerStay( other : Collider ) {
// 如果另一個碰撞器附加了OtherScript
// 調用它上面的DoSomething
// 大多數時候碰撞器不會附加腳本
// 所以我們需要首先檢查以避免null引用異常
if (other.GetComponent(OtherScript)) {
other.GetComponent(OtherScript).DoSomething();
}
}
注意通過上述例子中的other變量,你可以訪問碰撞物體中的任何組件。
5.一種類型的所有腳本
使用Object.FindObjectsOfType找到所有具有相同類或腳本名稱的物體,或者使用Object.FindObjectOfType.找到這個類型的第一個物體。
function 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;
function Update()
{
if ( Vector3.Distance( enemy.position, transform.position ) < 10 );
print("I sense the enemy is near!");
}
}
你也可以創建私有成員變量。私有成員變量可以用來存儲那些在該腳本之外不可見的狀態。私有成員變量不會被保存到磁盤並且在檢視面板中不能編輯。當它被設置為調試模式時,它們在檢視面板中可見。這允許你就像一個實時更新的調試器一樣使用私有變量。
private var lastCollider : Collider;
function OnCollisionEnter( collisionInfo : Collision ) {
lastCollider = collisionInfo.other;
}
全局變量
你也可以使用static關鍵字創建全局變量
這創造了一個全局變量,名為someGlobal
// 'TheScriptName.js'中的一個靜態變量
static var someGlobal = 5;
// 你可以在腳本內部像普通變量一樣訪問它
print(someGlobal);
someGlobal = 1;
為了從另一個腳本訪問它,你需要使用這個腳本的名稱加上一個點和全局變量名。
print(TheScriptName.someGlobal);
TheScriptName.someGlobal = 10;

_________________
歡迎大家多多交流~


aaa1218bbb
社員
社員

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

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

回頂端 向下

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


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