遊戲設計社
Would you like to react to this message? Create an account in a few clicks or log in to continue.

Unity 3D 腳本教學 (十)

向下

Unity 3D 腳本教學 (十) Empty Unity 3D 腳本教學 (十)

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

Light
類,繼承自Behaviour。用於light components的腳本接口。使用這個來控制Unity光源的所有方面。這個屬性完全與現實在監視面板中的值相同。通常光源都是在編輯器中創建,但是有時候需要從腳本中創建。
function Start () {
//製作一個遊戲物體
var lightGameObject = new GameObject ("The Light");
//添加光源組件
lightGameObject.AddComponent (Light);
//設置顏色和位置
lightGameObject.light.color = Color.blue;
//在添加光照組件後,設置位置(或任何變換組件)
lightGameObject.transform.position = Vector3 (0, 5, 0);
}
變量
◆ var attenuate : bool
描述:光源是否隨著距離衰減?對於Directional光源衰減總是關閉的。
//關閉光源衰減。
light.attenuate = false;
參見:Light component
◆ var color : Color
描述:光源的顏色。為了修改光源的強度你需要改變光源顏色的亮度。光源總是增加亮度,因此一個黑色的光源與沒有光源相同。光源是否隨著距離衰減?對於Directional光源衰減總是關閉的。
//在2秒內使顏色變黑。
function Update () {
light.color -= Color.white / 2.0 * Time.deltaTime;
}
//在2個顏色之間來回插值光源顏色。
var duration = 1.0;
var color0 = Color.red;
var color1 = Color.blue;
function Update () {
//設置光源顏色
var t = Mathf.PingPong (Time.time, duration) / duration;
light.color = Color.Lerp (color0, color1, t);
}
參見:Light component。
◆ var cookie : Texture
描述:被蓋光源投影的cookie紋理。如果cookie是一個立方體貼圖,光源將變為一個點光源。注意cookie只在像素光源下顯示。
//在監視面板中公開一個紋理的引用
var newCookie : Texture2D;
//賦cookie
light.cookie = newCookie;
參見:Light component
◆ var cullingMask : int
描述:這個用來選擇性的照亮部分場景。如果GameObject的layerMask與光源的cullingMask進行AND操作後為0.,那麼這個遊戲物體不能被這個光源照亮。參考Layers獲取更多信息。
//只照亮第一層中的物體(默認層)
light.cullingMask = 1 << 0;
參見:Light component
◆ var flare : Flare
描述:為這個光源使用的flare asset。
//在監視面板中公開一個閃光的引用
var newFlare : Flare;
//賦值閃光
light.flare = newFlare;
參見:Light component和flare asset。
◆ var intensity : float
描述:光源的強度被光源的顏色乘。該值可以介於0~8之間。允許你創建明亮的燈光。
//隨時間改變光照強度
var duration = 1.0;
function Update() {
//餘弦理論
var phi = Time.time / duration * 2 * Mathf.PI;
//獲取餘弦,並將範圍從-1~1變為0~1
var amplitude = Mathf.Cos( phi ) * 0.5 + 0.5;
//設置光的顏色
light.intensity = amplitude;
}
◆ var range : float
描述:光源的範圍。
即使光源關閉了attenuate,它還是只影響在它範圍內的物體。
//在原始範圍與原始範圍一般處變換光照範圍
var duration = 3.0;
private var originalRange : float;
originalRange = light.range;
function Update() {
var amplitude = Mathf.PingPong( Time.time, duration );
//將0..持續時間改為0.5..1範圍
amplitude = amplitude / duration * 0.5 + 0.5;
//設置光照範圍
light.range = originalRange * amplitude;
}
參見:Light component。
◆ var renderMode : LightRenderMode
描述:如何渲染該光源?此處可以是LightRenderMode.Auto, LightRenderMode.ForceVertex 或LightRenderMode.ForcePixel。像素光渲染比較慢但是看起來較好,尤其是對那些沒有較高面數的幾何體。一些效果(例如凹凸)只會在像素光照下顯示。
//使光源只以點光照模式渲染
light.renderMode = LightRenderMode.ForceVertex;
參見:Light component
◆ var shadowConstantBias : float
描述:陰影偏移常量。
參見:shadows,shadowObjectSizeBias。
◆ var shadowSizeBias : float
描述:陰影偏移常量。
參見:shadows,shadowConstantBias。
◆ var shadows : LightShadows
描述:這個光源是否投射陰影?
//設置光源為投射硬陰影
light.shadows = LightShadows.Hard;
參見:LightShadows, shadowStrength property, Renderer.castShadows, Renderer.receiveShadows
◆ var shadowStrength : float
描述:光源陰影的強度?
//使光源的陰影非常弱
light.shadowStrength = 0.3;
參見:shadows property, Renderer.castShadows, Renderer.receiveShadows。
◆ var spotAngle : float
描述:光源的投射光角度。主要用於Spot光源。改變Directional光源的cookie尺寸。對Point光源沒有影響。
//在”minAngle”與”maxAngle”之間隨機改變投射角度
//每’interval’秒改變一次.
var interval=0.3;
var minAngle=10;
var maxAngle=90;
private var timeLeft:float;
teimleft=interval;
light.type=LightType.Spot;
function Update()
{
timeLeft=Time.deltaTime;
if(timeLeft<0.0){
//開始改變
timeLeft=interval;
light.spotAngle=Random Range(minAngle,maxAngle);
};
}
參見:Light component
 var type:LightType
描述:光源的類型
可以是LightType.Spot,LightType.Directional,LightType.Point.
//製作一個投射光源
Light.type=LightType.Spot;
參見:Light component
繼承的成員
繼承的變量
Enabled 啟用Behaviours被更新,禁用Behaviours不被更新。
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)。
guiText 附加到這個GameObject的GUIText(如果沒有為null)。
networkView附加到這個GameObject的NetworkView(如果沒有為null)。
Collider 附加到這個GameObject的Collider(如果沒有為null)。
hingeJoint附加到這個GameObject的HingeJoint(如果沒有為null)。
particleEmitter 附加到這個GameObject的ParticleEmitter(如果沒有為null)。
gameObject這個組件所附加的遊戲物體。一個組件總是附加到一個遊戲物體。
Tag 這個遊戲的標籤。
Name 對象的名稱。
hideFlags 該物體是否被隱藏,保存在場景中或被用戶修改?
繼承的函數
GetComponet返回type類型的組件,如果遊戲物體上附加一個,如果沒有返
回null。
GetComponentInchildren 返回type類型的組件,這個組件位於GameObject或者任何它的子物體上,使用深度優先搜索。
GetComponentsInchildren 返回所有type類型的組件,這些組件位於GameObject或者任何它的子物體上。
GetComponets返回Gameobject所有type類型的組件。
CompareTag 這遊戲物體被標籤為tag?
SendMessageUpwards 在這遊戲物體的每個MonoBehaviour和該行為的組先上調用名為methodName方法。
SendMessage 在這遊戲物體的每個MonoBehaviour上調用名為
methodName方法。
BoradcastMessage 在這個遊戲物體或其任何子上的每個MonoBehaviour上調用methodName方法。
GetInstanceID 返回該物體的實例id。
繼承的類函數
Operator bool 這個物體存在嗎?
Instatiate 克隆original物體並返回這個克隆。
Destroy 移除一個遊戲物體,組件或資源。
DestroyImmediate立即銷毀物體obj。強烈建議使用Destroy代替
FindObjectsOfType返回所有類型為type的激活物體。
FindObjectOfType返回第一個類型為type的激活物體。
Operator== 比較兩個物體是否相同。
Operator!= 比較兩個物體是否不相同。
DontDestroyOnLoad 加載新場景時確保物體target不被自動銷毀。
MonoBehaviour
類,繼承自Behaviour
MonoBehaviour是每個腳本所繼承的基類。
每個使用Javascript的腳本自動地從MonoBehaviour繼承。當使用C#或Boo時你必須顯式從MonoBehaviour繼承。
參見:手冊中的chapter on scripting.

函數

◆function Cancellnvoke():void

描述:取消所有在這個MonoBehaviour上調用
//在2秒時開始
//一個projectile所在每0.3秒時運行
var projectile:Rigidbody;
InvokeRepeating(“LaunchProjectile”,2,0.3);
//當用戶按下ctrl按鈕時,
//取消重複調用
function Update()
{
If(Input.GetButton(“Fire1”))
{
Cancellnvoke();
}
}
function LaunchProjectile()
{
Instance=Instantiate(projectile);
Instance.velocity=Random.insideUnitSphere*5;
}
////////////////////////////////////////
這裡我整理了一下看起來方便:
var projectile:Rigidbody;
InvokeRepeating("LaunchProjectile",2,0.3);
function Update()
{
if(Input.GetButton("Fire1"))
{
CancelInvoke();
}
}
function LaunchProjectile()
{
var Instance:Rigidbody=Instantiate(projectile);
Instance.velocity=Random.insideUnitSphere*5;
}
/////////////////////////////////////////////

◆function Cancellvoke(methodName:string):void

描述:撤銷該行為中名為methodName的所有調用。
//在2秒時開始
//一個projectile將在每0.3秒時運行
var projectile :Rigidbady;
invokeRepeating(“LaunchProjectile”,2,0.3);
//當用戶按下crtl按鈕時
//取消重複調用
function Update(){
If(Input.GetButton(Fire1)){
Cancellnvode(“LaunchProjectile”);
}
}
function LanuchProjectile(){
instance=Instntiate(prefab);
instance.velocity=Random.insideUnitSphere*5;
}

◆function Invoke(methodName:string,time:float):void

描述:在time秒調用methodName方法。
//在兩秒時發射一個投射物
var Projectile:rigidbady;
Invoke(“LaunchProjectile”,2);
function LaunchProjectile(){
Instance=Instantiate(prefab);
Instance.velocity=Random.insideUnitSphere*5;
}

◆function InvokeRepeating(methodName:string,time:float,repeatRate:float):void

描述:在time秒調用methodName方法。
第一次調用之後,每repeatRate秒重複調用這個函數
//在2秒時開始
//一個Projectile將在每0.3秒運行
var projectile:Rigidbody;
InvokeRepeating(“LaunchProjectile”,2,0.3);
function LaunchProjectile(){
instance=Instantiate(prefab);
instance.velocity=Random.insideUnitSphere*5;
}

◆function IsInvoking(methodName:string)

描述:是否有任何MonoBehaviour的調用在等待?

◆function StartCoroutine(routine:IEnumerator):Coroutine

描述:開始一個coroutine
一個coroutine的執行可以任何位置使用yield語句暫停,當coroutine繼續的時候yield返回值,當行為需要跨越多個幀的時候,Coroutines是非常好的,當Coroutines幾乎沒有性能負擔。 StartCoroutine函數總是立即返回,然而你能夠yidle結果,這個將等待直到coroutine執行完成。
當使用javascript時,沒有必要使用StartCorutine,編譯器會為你做這件事。在寫C#代碼的時候你必須調用StartCoroutine
//在這個例子中我們顯示如何並行調用
//一個coroutine並繼續執行這個函數。
//0秒後,打印”Starting0.0”
//0秒後,打印”Before WaitAndPrint Finishes0.0”
//2秒後,打印”WaitAndPrint 2.0”
print(“Starting”+Time.time);
//WaitAndPrint作為一個coroutine開始,並等待直到它完成
WaitAndPrint(2.0)
print(“Before WaitAndPrint Finishes”+Time.time);
function WaitAndPrint(waitTime:float){
//暫停執行waitTime秒
Yield WaitForSeconds(waitTime);
Print(“WaitAndPrint”+Time.time);
//WaitAndPrint作為一個coroutine開始,並等待直到它完成
yield WaitAndPrint(2.0);
print(“Done”+Time.time);
}
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);
}

◆function StartCoroutine(methodName: string, value: object=null): Coroutine

描述:開始為methodName的Coroutine。
在大多數情況下,你要用​​StartCoroutine的變體。然而,使用一個字符串方法名的StartCoroutine允許StopCoroutine使用一個特定的方法名稱。字符串級本的特定時它有較高的運行時開銷來開始coroutine,並且你只能傳遞一個參數。
//在則合格例子中我們現實如何一個字符串名調用一個coroutine並停止它
function Start(){
StartCoroutine(“DoSomething”,2.0);
yield WaitForSeconds(1);
StopCoroutine(”DoSomething”);
}
function DoSomething(someParameter: float){
While(true)
{
print(”DoSomething Loop”);
yield
}
}

//////////////////////////////////////////////
// In this example we show how to invoke a coroutine using a string name and stop it

function Start () {
StartCoroutine("DoSomething", 2.0);
yield WaitForSeconds(1);
StopCoroutine("DoSomething");
}

function DoSomething (someParameter : float) {
while (true) {
print("DoSomething Loop");
// Yield execution of this coroutine and return to the main loop until next frame
yield;
}
}
////////////////////////////////////////////////// //

◆Function StopAllCoroutines(): void
描述:停止所有運行在這個行為上的Coroutine。
//開始coroutine
StartCoroutine(“DoSomething”);
//緊跟著取消coroutine
function DoSomething(){
While(true){
yield;
}
}
StopAllCoroutines();

◆Function StopCoroutine(methodName: string): void

描述:停止所有運行在這個行為上的名為methodName的Coroutine。
請注意只使用一個字符串方法名的StartCoroutine才能使用StopCoroutine停止。
//在這個例子中我們顯示如何使用一個字符串名調用一個coroutine並停止它
function Start(){
StartCoroutine(“DoSomething”,2.0);
yield WaitForSeconds(1);
StopCoroutine(”DoSomething”);
}
Function DoSomething(someParameter: float){
while(true)
{
print(”DoSomething Loop”);
Yield
}
}

/////////////////////////////////////////
// In this example we show how to invoke a coroutine using a string name and stop it

function Start () {
StartCoroutine("DoSomething", 2.0);
yield WaitForSeconds(1);
StopCoroutine("DoSomething");
}

function DoSomething (someParameter : float) {
while (true) {
print("DoSomething Loop");
// Yield execution of this coroutine and return to the main loop until next frame
yield;
}
}
////////////////////////////////////////////////// //////

重載函數

◆function Awake(): void

描述:當腳本實例被加載時,Awake 被調用。
在遊戲開始前,使用Awake 來初始化任何變量或遊戲狀態。在腳本實例的生命期內Awake 只被調用一次。 Awake 在所有物體被初始化之後被調用,因此你可以安全地告訴其他物體或使用如GameObject.FindWithTag來查詢它們。每個遊戲物體的Awake 以隨機的順序被調用。因此,你應該使用Awake 來再腳本之間設置引用,並使用Start來傳遞消息。 Awake 總是在任何Start函數之前調用。這允許你調整腳本的初始化順序。 Awake 不能作為一個Coroutine
注意對於C#和Boo用戶:使用Awake 而不是構造函數來初始化,因為組件的序列化狀態在構造的時候還沒有確定。 Awake 只被調用一次,就像構造函數。
private var target: GameObject;
function Awake(){
target=GameObject.FindWithTag(‘”Player”)
}
Awake不能作為一個coroutine。
◆function FixedUpdate (): void
描述:如果MonoBehaviour被啟用,這個函數將以固定的幀率調用。
當處理Rigidbody是應該使用FixedUpdate而不是使用Update。例如,當添加一個力到剛體時,你必須在FixedUpdate內以固定的幀率應用而不是在Update內。
//應用一個向上的力到剛體
function FixedUpdate()
{
Rigidbody.AddForce(Vector3.up);
}
力偉到從上一次調用Update的消逝時間,使用Time.deltaTime,這個函數只在Behaviour被啟用時調用。重載這個函數,以便給你的組件提供功能。

◆function LateUpdate (): void

描述:如果該Behaviour被啟用,LateUpdate將在每幀中調用。
LateUpdate在所有Update函數被調用後調用。這可用於調整腳本執行順序。例如,一個跟隨相機應該總是在LateUpdate中實現,因為他跟踪Update中移動的物體。
//向前以1米/秒的速度移動物體
function LateUpdate ()
{
transfor.Translate(0,0,Time.deltaTime*1);
}
為了得到從最後一個調用LateUpdate的消逝時間,使用Time.deltaTime。如果該Behaviour被啟用,該函數將在每幀中調用。重載這個函數,以便給你的組件提供功能。
◆function OnApplicationPause(pause: bool): void
描述:當玩家暫停時發送到所有遊戲物體。
OnApplicationPause可以是一個coroutine,簡單地在這個函數中使用yield語句。
◆function OnApplicationQuit(): void
描述:在應用退出之前發送到所有遊戲物體。
在編輯器中當用戶停止播放模式時這個被調用。在網頁播放器中當web被關閉時這個函數被調用。
◆function OnBecameInvisible(): void
描述:OnBecameInvisible函數在這個渲染上的腳本。 OnBecameVisible和OnBecameInvisible可以用於只需要在需要在物體可見時才進行的計算。
//當它不可見時禁用這個行為
function OnBecameInvisible()
{
enabled=false;
}
OnBecameInvisible可以是一個coroutine,簡單地在這個函數中使用yield語句。當在編輯器中運行時,場景試圖相機也會導致這個函數被調用。
◆function OnBecameVisible(): void
描述:OnBecameVisible函數在這個渲染器對任何相機變得可見時被調用。
這個消息被發送到所有附加在渲染器上的腳本。 OnBecameVisible和OnBecameInvisible可以用於只需要在需要在物體可見時才進行的計算。
//當它不可見時禁用這個行為
function OnBecameVisible()
{
enabled=false;
}
OnBecameVisible可以是一個coroutine,簡單地在這個函數中使用yield語句。當在編輯器中運行時,場景視圖相機也會導致這個函數被調用。

◆function OnCollisionEnter(collisionInfo: Collision): void

描述:
當這個碰撞器/剛體開始接觸另一個剛體/碰撞器時OnCollisionEnter被調用。
相對於OnTriggerEnter,OnCollosionEnter傳遞Collision類而不是Collider,Collision類包含接觸點,碰撞速度等細細。如果在函數中不使用CollisionInfo,省略CollisionInfo參數以避免不西藥的計算。注意如果碰撞器附加了一個非動力學剛體,也只發送碰撞事件。
function 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語句。

◆function OnCollisionExit(collisionInfo: Collision): void

描述:當這個碰撞器/剛體開始接觸另一個剛體/碰撞器時OnCollisionEnter被調用。
相對於OnTriggerExit,OnCollosionExit傳遞Collision類而不是Collider. Collision類包含接觸點,碰撞速度等細節。如果在函數中不使用CollisionInfo,省略CollisionInfo參數以避免不必要的計算。注意如果碰撞器附加了一個非動力學剛體,也只發送碰撞事件。
function OnCollisionExit(collision: Collision)
{
print(“No longer in contact with”+collisionInfo.transform.name);
}

OnCollisionExit可以是一個coroutine,簡單地在這個函數中使用yield語句。

◆function OnCollisionStay(collisionInfo:collision):void

描述:對於每個與剛體碰撞器相觸碰的碰撞器剛體,OnCollisionStay將在每一幀中被調用。
相對於OnTriggerStay,OnCollisionStay 傳遞Collision類而不是Collider.Collision類包含接觸點,碰撞速度等細節。如果在函數中不使用collisionInfo省略collisionInfo參數以避免不要必要的計算。注意如果碰撞器附加了一個非動力學剛體,也只發送碰撞事件。
function OnCollisionStay(CollisionInfo:Collision){
//調試繪製所有的接觸點和法線
for (var contact:ContactPoint in collision.contacts){
Debug.DrawRay(contact.point,contact.normal,Color.white);
}
}
OnCollisionStay可以是一個coroutine,也簡單地在這個函數中使用yield語句

◆function OnConnectedToServer():void

描述:當成功鏈接到服務器時在客戶端調用這個函數。
function OnConnectedToServer()
{
Debug.Log(“Connected to server”);
//發送到本地玩家名稱到服務器
}

◆function OnControllerColliderHit(Hit:controllerColliderHit):void

描述:在移動的時候,控制器碰到一個碰撞器時,OnControllerColliderHit被調用。
這可以用來在角色碰到物體時推開物體。
//這個腳本推開所有角色碰到物體時推開物體
var pushPower=2.0;
function OnControllerColliderHit(hit: OnControllerColliderHit)
{
Var body:Rigidbody=hit.collider.attachedRigidboby;
//無剛體
if(body==null||body.isKinematic)
return;
//不推開我們身後的物體
if(hit.moveDirection.y<-0.3)
return;
//從移動方向計算推的方向
//只推開物體到旁邊而不是上下
var pushDir=Vector3(hit.moveDirection.x,0,hit.moveDirection.z)
//如果知道角色移動有多快
//然後你就可以用它乘以推動速度
//使用推力
body.velocity=pushDir*pushPower;
}

◆function OnDisable():void

描述:當這個行為禁用或不活動時這個函數被調用。
當物體被銷毀的時候這個函數也會被調用並可以用於任何清理的代碼。當腳本在編譯結束後被加載時,OnDisable將被調用,然後腳本加載完成後OnEnable被調用。
Function OnDisable(){
Print("scrip was remove”);
}
OnDisabe 不能作為一個coroutine.

◆function OnDisconnectedFromServer(mode:NetworkDisconnection):void

描述:當鏈接掛失或服務器斷開時在客戶端用這個函數。
Function OnDisconnectedFromServer(info.NetworkDisconnection)
{
Debug.Log(“Disconnected from server”+info);
}

◆function OnDrawGizmos():void

描述:如果你想繪製可被點的Gizmos時,實現OnDrawGizmos,
這允許你在場景中快速選擇重要的物體。
//在物體的位置上繪製光源燈泡
function OnDrawGizmos()
{
Gizmos.DrawIcon(transform.position,”light Gizmo.tiff”);
}

◆function OnDrawGizmosSelected():void

描述:如果你想在物體被選擇時繪製gizmos,實現這個OnDrawGizmosSelected。
Gizmos只在物體被選擇的時候繪製。 Gizmos不能點選。這可以設置更容易,例如
一個爆炸腳本可以繪製一個球顯示爆炸半徑。
var explosionRadius=5.0;
function OnDrawGizmosSelected(){
//選中的時候顯示爆炸半徑
Gizmos.color=Color.white;
Gizmos.DrawSphere(transfom.position,explosinRadius);
}

◆function OnEnable():void

描述:當物體啟用或激活時這個函數被調用
function OnEnbale()
{
print(“script was enabled”);
}

◆function OnFailedToconnect(error:NetworkConnectionError);void

描述:當鏈接因為某些原因失敗時在客戶端上調用這個函數。
失敗的原因作為NetworkConnectionError枚舉傳入。
function OnFailedToconnect (info:NetworkConnectionError){
Debug.Log(“Could not connect to server”+error);

◆function OnFailedToConnectToMasterServer (error:NetworkConnectionError):void

描述:當鏈接到主服務器出現問題時在客戶端或服務器調用這個函數。
錯誤的原因作為NetworkConnectionError枚舉傳入
function OnFailedToConnectToMasterServer(info:NetworkConnectionError)
{
Debug.Log(“Could not connect to master server”+info);
}

◆function OnGUI():void
描述:OnGUI被調用來渲染並處理GUI事件。
如果Monobehaviour的啟用屬性被設置為假,OnGUI()將不會被調用。
function OnGUI(){
if(GUI.Button(Rect(10,10,150,100),”I am a button”)){
print(“You clicked the button”)
}
}
參考GUI Scrtipting Guide 獲取更多信息。

◆function OnJointBreak(breakForce:float):void

描述:當附加到相同遊戲物體上的關節被斷開時調用
當一個力大於這個關節的breakForce時,關節將被斷開,當關節斷開時,OnJointBreak將被調用,應用到關節的斷開力將被傳入,OnJointBreak之後這個關節將自動從遊戲物體移除。參見:Joint.breakForce

◆function OnLevelWasLoaded(level:int):void

描述:這個函數在一個新的關卡被加載之後被調用
//level是被加載的關卡的索引。使用菜單項File>Build Settings來查看索引引用的是那個場景,參見:Application.LoadLevel
//當關卡13被加載的關卡的索引”Woohoo”
Function OnLevelWasLoaded(level:int)
{
if(level==13)
{
Print(“Woohoo”);
}
}
OnLevelWasLoaded 可以是一個coroutine,簡單地在這個函數中使用yield語句。

◆function OnMouseDown():void

描述:當用戶在GUIElement或Collider上按下鼠標按鈕時OnMouseDown被調用
這個事件被發送到所有附加在Collider或GUIE​​lement的腳本上。
//加載名為“someLevel”的關卡
//來響應用戶單擊
Function OnMouseDown()
{
Application.LoadLevel(“SomeLevel”);
}
這個函數不會在屬於Ignore Raycast的層上調用。
OnMouseDown可以是一個coroutine,簡單地在這個函數中使用yield語句。這個事件被發送到的有附加在Collider或GUIE​​lement的腳本上。

◆function OnMouseDrag():void

描述:當用戶在GUIElement或Collider上點擊並按住鼠標時OnMouseDrag被調用。
當鼠標被按下時OnMouseDrag將在每幀中被調用。
//按住鼠標時使用材質顏色變暗
function OnMouseDrag()
{
renderer.material.color-=Color.white*Time.deltaTime;
}
這個函數不會在屬於Ignore Ray的層被調用。
OnMouseDrag可以是一個coroutine,簡單地在這個函數中使用yield語句。這個事件被發送到所有附加在collider或GUIE​​lement的腳本上。

◆Function OnMouseEnter():void

描述:當鼠標進入GUIElement或collider時,OnMouseEnter被調用。
//附加這個腳本到網格
//使用當鼠標經過這個網格時使它變紅
function OnMouseEnter()
{
renderer.material.color=Color.red;
}

這個函數不會在屬於Ignore Raycast的層上調用。
OnMouseEnter可以是一個coroutine,簡單地在這個函數中使用yield語句。這個事件被發送所有附加在Collider或GUIE​​lement的腳本上。

◆function OnMouseExit():void

描述:當鼠標不再位於GUIElement或Collider上時,OnMouseExit被調用。
OnMouseExit與OnMouseEnter相反
//當鼠標在網格時
//漸變材質的顏色色組件為零
function OnMouseExit()
{
renderer.material.color=Color.white;
}

這個函數不會在屬於Ignore Raycast的層上調用。
OnMouseExit可以是一個coroutine,簡單地在這個函數中使用yield語句。這個事件被發送到所有附加在Collider或GUIE​​lement上腳本上。

◆function OnMouseOver();void

描述:當鼠標在GUIElement或Collider上時,OnMouseOver被調用。
//當鼠標在網格上時
//漸變材質的紅色組件為零

function OnMouseOver()
{
renderer.material.color-=Color(0.1,0,0)*Time.deltaTime;
}

這個函數不會在屬於Ignore Raycast的層上調用。
OnMouseOver可以是一個coroutine,簡單地在這個函數中使用yield語句,這個事件被發送到所有附加在Collider或GUIE​​lement的腳本上。

◆function OnMouseUP():void

描述:當用戶已經鬆開鼠標按鈕時OnMouseUp調用。
在GUIElement或Collider上鬆開鼠標時OnMouseUp被調用。
//加載名為”someLevel”的關卡
//來響應用戶單擊
function OnMouseUp()
{
Application.LoadLevel(“SomeLevel”);
}

這個函數不會在屬於Ignore Raycast的層上調用。
OnMouseUp可以是一個coroution,簡單地在這個函數yield語句。這個事件被發送到所有附加在Collider或GUIE​​lement的腳本上。

◆function OnNetworkInstantiate(info:NetworkMessageInfo):void

描述:當一個物體使用Network.Instantiate進行網絡初始化在該物體上調用這個函數。
這個對於禁用或啟用一個已經初始化的物體組件來說是非常有用的,它們的行為取決與它們是在本地還是在遠端。
注意:在NetworkMessageInfo裡的networkView屬性不能在OnNetworkInstantiate裡使用。
function OnNetworkInstantiate(info:NetworkMessageInfo)
{
Debug.Log(“New object instantiated by”+info.sender);
}

◆function onParticleCollision(other:GameObject):void

描述:當一個粒子碰到一個碰撞器時OnParticleCollision被調用。
這個可以在遊戲物體被粒子擊中時應用傷害到它的上面,這個消息被發送到所有附加到
WorldParticleCollider 的腳本上和被擊中的Collider上,這個消息只有當你在
WorldParticleCollider檢視面板中啟用了sendCollisionMessage時才會被發送。
//應用力到所有被粒子擊中的剛體上

function OnParticleCollison(other:GameObject)
{
var body=other.rigidbody;
if(body)
{
var direction=other.transform.position+transform.position;
direction=direction.normalized;
body.AddForce(direction*5);
}
}

OnParticleCollision可以是一個coroutine,簡單地在這個函數中使用yield語句。

◆function OnPlayerConnected(player:NetworkPlayer):void

描述:當一個新玩家成功連接在服務器上調用這個函數。
private var playerCount:int=0;
function OnPlayerConnect(player.NetworkPlayer)
{
Debug.Log(“Player”+playerCount”+connected from”+player.ip.Address+”:”+player.port);
//用玩家的信息構建一個數據結構
}

◆function OnPlayerDisconnected(player:NetworkPlayer):void

描述:當玩家從服務器斷開時在服務器上調用這個函數。
function OnPlayerDisconnected (player:NetworkPlayer)
{
Debug.Log(“Clean up after player”+player);
Network.RemoveRPCs(player);
Network.DestroyPlayerObject(player);
}

◆function OnpostRender():void

描述:OnPostRender在相機渲染場景之後調用。
只有腳本被附加到相機上時才會調用這個函數。 OnPostRender可以是一個coroutine,簡單地在這個函數中使用yield語句。
OnPostRender在相機渲染完所有它的物體之後被調用。如果你想在所有相機和GUI被渲染之後做一些事情,使用WaitForEndFrame coroutine
參見:OnPreRender,WaitForEndOfFrame
//當附加到機時,將消除
//相機紋理的alpha通道為純白色
//如果你有一個渲染紋理並想將它顯示在GUI上時可以使用這個函數
private var mat:Material;
function OnPostRender()
{
//創建一個只渲染白色到alpha通道的著色器
if(mat)
{
mat=new Material(“Shader Hidden SetAlpha”+)
“SubShader{“+”pass{”+”ZTest Always Cull off Zwrite Off”+”ColorMaskA”+”Color (1,1,1,1)”+”}”+”}”+”}”);
}
}

// 用上述著色器繪製一個全屏四邊形
GL.PushMatrix();
GL.LoadOrtho();
for(var i=0;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();
}
////////////////////////////////////////////////// /

// When attached to a camera, will clear alpha channel
// of camera's render texture to pure white.
// Useful if you have camera rendering into a texture and later
// want to display it in GUI.
private var mat : Material;
function OnPostRender() {
// Create a shader that renders white only to alpha channel
if(!mat) {
mat = new Material( "Shader "Hidden/SetAlpha" {" +
"SubShader {" +
" Pass {" +
" ZTest Always Cull Off ZWrite Off" +
" ColorMask A" +
" Color (1,1,1,1)" +
" }" +
"}" +
"}"
);
}
// Draw a quad over the whole screen with the above shader
GL.PushMatrix ();
GL.LoadOrtho ();
for (var i = 0; i < mat.passCount; ++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 ();
}
////////////////////////////////////////////

◆function OnPreCull():void

描述:OnPreCull在相機開始裁剪場景之前調用
裁剪決定那個物​​體對於相機來說是可見的。 OnPreCull僅僅在這個過程之間被調用。
只有腳本被附加到相機上時才會調用這個函數
如果你想改變相機的視覺參數(例如fieldOfView或者僅是變換),就在這裡做這個。
場景物體的可見性將基於相機參數在OnPerCull之後確定。

◆function OnRender():void

描述:OnpreRender在相機開始渲染場景之前調用。
只用腳本被附加到相機上時才會調用這個函數。
注意如是果你在這裡改變了相機的視野參數(例如fieldOfView),它們將影響下一幀。用OnPreCull代替。 OnPreRender可以是一個coroutine,簡單地在這個函數中使用yield語句。
參見:OnPostRender

◆function OnRenderImage(source:RenderTexture,destination:RenderTexture):void

描述:OnRenderImage在所有渲染完成後被調用,來渲染圖片的後期處理效果(限於Unity Pro)
這允許你使用基於shader的過濾器來處理最後的圖片。進入圖片是source渲染紋理結果是destination渲染紋理。當有多個圖片過濾附加在相機上時,它們序列化地處理圖片,將第一個過濾器的目標作為下一個過濾器的源。
這個消息被發送到所有附加在相機上腳本。
參見:Unity Pro 中的image effects

◆function OnRenderObject(queueindex:int):void

描述:OnRenderObject被用來渲染你自己的物體,使用Graphics.DarwMesh或者其他函數。
queueIndex指定用來渲染物體的render queue。可以使用RenderBeforeQueues屬性來指定你想繪製這個物體到哪裡渲染隊列。

◆function OnserializeNetworkView(stream:Bitstream.info:NetworkMessageInfo):void

描述:用來在一個被網絡視監控的腳本中自定義變量同步
它自動決定被序列化的變量是否應該發送或接收,查看下面的例子獲取更好的描述:
//這個物體的生命信息
var currentHealth:int=0;
function OnSerializeNetworkView(stream:BitStream,info:NetworkMessageInfo)
{
if(stream.isWriting)
{
var health:int=currentHealth;
stream.Serialize(health);
}
else
{
var health:int=0;
stream.Serialize(health);
currentHealth=health;
}
}

◆function OnServerInitialized():void

描述:當Network.InitializeServer被調用並完成時,在服務器上調用這個函數。
function OnServerInitialized()
{
Debug.Log(“Server initialize and ready”);
}

◆function OnTriggerEnter(other:Collider):void

描述:當這個Collider other進入trigger時OnTriggerEnter被調用。
這個消息被發送到這個觸發器碰撞器和接觸到觸發器的剛體(或者是碰撞器如果沒有剛體)。注息如果碰撞器附加了一個剛體,也只發送觸發器事件。
//銷毀所有進入該觸發器的物體
function OntriggerEnter(other:Collider)
{
Destroy(other.gameObject);
}

OnTriggerEnter可以是一個coroutine簡單地在這個函數中使用yield語句。

◆function OnTriggerExit(other:Collider):void

描述:當這個Collider other停止觸碰trigger時OnTriggerExit被調用。
這個消息被發送到觸發和接觸到這個觸發器的碰撞器。注意如果碰撞附加了一個剛體,也只發送觸發器事件。
//銷毀所有離開該觸發器的物體
function OntriggerExit (other:Collider)
{
Destroy(other.gameObject);
}
OnTriggerExit可以是一個coroutine,簡單地在這個函數中使用yield語句。

◆function OnTriggerStay(other:Collider):void

描述:對於每個Collider other,當它觸碰到trigger時,OnTriggerStay會在每一幀中都被調用。
這個消息被發送到觸發器和接觸到這個觸發器的碰撞器。注意如果碰撞器附加了一個剛體,也只發送觸發器事件。
//對所進入這個觸發器的剛體使用一個向上的力
function OnTriggerStay(other:Collider)
{
if(other.attachedRigidbody)
{
other.attachedRigidbody.AddForce(Vector3.up*10);
}
}
OnTriggerStay可以是一個coroutine,簡單地在這個函數中使用yield語句。

◆function OnWillRenderObject():void

描述:如果物​​體可見,每個相機都會調用OnWillRenderObject。
這個函數在裁剪過程中被調用,在渲染所有被裁剪的物體之前被調用。可以用這個來創建具有依賴性的渲染紋理,只有在被渲染的物體可見時才更新這個渲染紋理。作為一個例子,水組件就使用這個。 Camera.current將被設置為要渲染這個物體的相機

◆function Reset():void

描述:Reset在用戶點擊檢視面版的上下文菜單或者第一次添加該組件被調用。 Reset只在編輯模式下調用。 Reset最常用於在檢視面板中給定一個好的默認值
//設置target為一個默認的值
//這可以用於跟隨相機
var target:GameObject;
function Reset(){
//如果target沒有賦值,設置它
if(!target)
{
target=GameObject.FindWithTag(“play”);
}
}

◆function Start():void

描述:Start在所有Update方法被第一次調用前調用。
Start在行為的生命期內只調用一次。 Awake和Start的不同在於Start只在腳本實例被啟用時調用。這個允許你延遲所有初始化代碼,知道真正需要它們的時候,Awake總是在任何Start函數之前調用。這允許你調整腳本的初始化順序。 Start不能作為一個coroutine
Start函數在所有腳本實例的Awake函數調用之後調用。
//初始化target變量
//target是私有的並且不能在檢視面板中編輯
parivate var target:GameObject;
function Start(){
target=GameObject.FindWithTag(“Player”);
}
◆function Update():void
描述:如果MonoBehaviour被啟用,Update將在每幀中調用。
Update是最常用的函數,來實現任何遊戲行為。
//向前以1米的速度移動物體
function Update(){
transform.Translate(0,0,Time.deltaTime*1);
}
為了得到從最後一次調用Update的消逝時間,使用Time.deltaTime。如果該Behaviour
被啟用,該函數將在每幀中調用,重載這個函數,以便給你的組件提供功能。
繼承的成員
繼承的變量
endbled 啟用Behaviours被更新,禁用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 返回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代替。
FindObjectOfType返回所有類型為type的激活物體。
FindObjectOfType返回第一個類型為type的激活物體。
Operator== 比較兩個物體是否相同。
Operator!= 比較兩個物體是否不相同。
DontDestroyOnLoad 加載新場景時確保物體target不被自動銷毀。
Terrain
類,繼承自MonoBehaviour
渲染地形的Terrain
變量
◆var basemapDistance:float
描述:超出basemapDistance的高度圖,將使用預先計算的地解析度basemap。
這個可以改善遠處塊的性能。 Unity混合任意數量的地形紋理,使用條圖來渲染近處的高度圖。
function Start(){
Terrain.activeTerrain.basemapDistance=100;
}
◆var castShadows:bool
描述:地形應該投射陰影?
◆var detailObjectDistance:float
描述:在這個距離內細節將被顯示。
function Start(){
Terrain.activeTerrain.detailObjectDistance=40;
}
◆var heightmapMaximumLOD:int
描述:讓你實質降低用於渲染的高度圖解析度
這個可用在低端的顯卡上並不會顯示最高的LOD地形。值為0表示總是顯示最高細節。
值為1表示三角形數量將減小到1/4,高度圖的解析度將是寬度和高度的一半。
function Start(){
Terrain.activeTerrain.heightmapMaximumLOD=1;
}
◆var heightmapPixelError:float
描述:當切換LOD時大約有多少像素時地形將處於錯誤的情況。
較高的值減少多邊形的繪製數量。
function Start(){
Terrain.activeTerrain.heightmapPixelError=10;
}
◆var Lighting:Terrain.Lighting
描述:地形光照模式
參見:TerrainLighting枚舉,Terrain Lightmap,terrain Settings
◆var terrainData:TerrainData
描述:存儲在高度圖中的地形數據,地形紋理,細節網格和樹。
◆var treebillboardDistance:float
描述:到相機的距離超過這個值,樹只被作為公告板渲染。
降低這個值將改善性能,但是使過度看起來更差因為公告板和樹的不同將更加明顯。
Function Start(){
Terrain.activeTerrain.treeBillboardDistance=100;
}
◆var treeCrossFadeLength:float
描述:樹從公告變換到網格到網格的總距離增量。
降低這個值將使變換發生的越快。設置為0時,在從網格切換分告表示時將立即發生。
function Start(){
Terrain.activeTerrain.treeCrossFadeLength=20;
}
◆var treeDistance:float
描述:渲染樹的最大距離。
這個值越高,越遠的樹將看到,運行的也更慢。
參見:Terrain.treeBillboardDistance
function Start(){
Terrain.activeTerrain.treeDistance=2000;
}
◆var treeMaximumFull.ODCount:int
描述:全LOD時渲染樹的最大數量。
這個是一個簡單的設置用來阻止太多的樓以過高的解析度和密度被繪製。因為如果
treeMaximumFullLodCount過高,樹將不會消失,你應該修改treeBillboardDistance為不
包含。
Function Start(){
Terrain.activeTerrain.treeMaximumFullLODCount=200;
}
函數
◆function SampleHeight(worldPositon:Vector3):float
描述:在世界空間的給定位置處採樣高度。
function LateUpdate(){
transfom.positon.y=Terrain.activeTerrain.SampleHeght(transfom.position);
}
◆function SetNeighbors(left:Terrain,top:Terrain,right:Terrain,bottom:Terrain):void
描述:允許你在相鄰地形間設置連接
這個確保LOD在相鄰地形上相同。注意,在一個地形上調用這個函數是不夠的,你需要在每個地形上設置鄰居。
類變量
◆static var activeTerrain: Terrain
描述:激活的地形。這個是用來在場景中獲取主地形的快捷方式。
類方法
◆Static functin CreateTerrainGameObject(assignTerrain: TerrainData): GameObject
描述:從TerrainData創建一個包含碰撞器的地形。
繼承的成員
繼承的變量
Enabled 啟用Behaviour被更新,禁用Behaviours不被更新。
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 該物體是否被隱藏,保存在場景中或被用戶修改
繼承的函數
Invok e 在time秒調用methodName方法。
Invok Repeating 在time秒調用methodName方法。
CancelInvoke 取消所有在這個MonoBehaviour上的調用
IsInvoking 是否有任何對methodName的調用在等待?
StartCoroutine 開始一個coroutine
StopCoroutine 停止所有運行在這個行為上的名為methodName的coroutine
StopAllCoroutines 停止所有運行在這個行為上的coroutine
GetComponent 返回type類型的組件,如果遊戲物體上附加了一個,如果沒有
返回null。
GetComponcetInChildren 返回type類型的組件,這個組件位於GameObject或任何它的子
物體上。使用深度優先搜索
GetComponcetsInChildren 返回所有type類型組件,這些組件位於Gameobject或任何它的
子物體上。
GetComponents 返回GameObject上所有type類型的組件。
CompareTag 這個遊戲物體被標籤為tag?
SendMessageUpwards 在這個遊戲物體的每個MonoBehaviour和該行為的祖先上調用
名為methodName方法。
SendMessage 在這個遊戲物體上的每個MonoBehaviour上調用methodName
方法。
BroadcastMessage在這個遊戲物體或其2任何子的每個MonoBehaviour上調用
methodName方法。
GetInstanceID 返回該物體的實例ID。
繼承的消息傳遞
Update 如果MonoBehaviour被啟用,Update將在每幀中
調用。
LateUpdate 如果該Behaviour被禁用,LateUpdate將在每幀中
調用。
FixedUpdate 如果MonoBehaviour被啟用,這個函數將在每幀中調用。
Awake 當腳本實例被加載時,Awake被調用。
StartStart在所有Update方法被第一次調用前調用。
Reset Reset在用戶點擊檢視面板的上下文菜單或第一次添加該組件時
被調用。
OnMouseEnter當鼠標進入GUIElement或Collider時,OnMouseEnter被調用。
OnMouseOver 當鼠標在GUIElement或Collider時,OnMouseEnter被調用。
OnMouseExit 當鼠標不再位於GUIElement或Collider上時,OnMouseExit被調用。
OnMouseDown當用戶在GUIElement或Collider上按下鼠標按鈕時
,OnMouseDown被調用。
OnMouseUp 當戶已經鬆開鼠標按鈕時OnMouseUp被調用。
OnMouseDrag 當用戶在EUIElement或Collider上點擊並按住鼠標時
OnMouseDrag被調用。
OnTriggerEnter當這個Collider other進入trigger時OnTriggerEnter被調用。
OnTriggerExit 當這個Collider other停止觸碰trigger進OnTriggerExit被調用。
OnTriggerStay 對於每個Collider other,當它觸碰到trigger時,OnTriggerStay
會在每一幀中都會被調用。
OnCollisionEnter當這個碰撞器剛體開始觸碰另一個剛體碰撞器

時OnCollisionEnter被調用。
OnCollisonExit 對於每個與碰撞器剛體停止觸碰另一個剛體碰撞器時
OnCollisionExit被調用。
OnCollisonStay對於每個與剛體碰撞器相觸的碰撞器剛體OnCollisonStay將在每
一幀中被調用。
OnControllerColliderHit 在移動的時候,控制器碰到一個碰撞器時OnControllerColliderHit
被調用。
OnJointBreak 當附加到相同遊戲物體上的關節被斷開時調用。
OnParticleCollision當一個粒子碰到一個碰撞器時OnParticleCollision被調用。
OnBecameVisibleOnBecamevisible函數在這個渲染器對任何相機變得可見時被
調用。
OnBecameInvisibleOnBecamevisible函數在這個渲染器對任何相機變得不可見時被
調用。
OnLevelWasLoaded這個函數在一個新的關卡被加載之後被調用。
OnEnable 當物體啟用或激活時這個函數被調用。
OnDisable 當這個行為禁用或不活動時這個函數被調用。
OnPreCull OnPreCull在相機開始裁剪場景之前調用。
OnPreRender OnPreRender在相機開始渲染場景之後調用。
OnPostRender OnPostRender 在相渲染場景之後調用。
OnRenderObjectOnRenderObject被用來渲染你自己的物體,使用
Graphics.DrawMesh或者其他函數。
OnWillRenderObject 如果物體可見,每個相機都會調用OnWillRenderObject。
OnGUI OnGUI被調用來渲染並處理GUI事件。
OnRenderImageOnRenderImage在所有渲染完成後被調用,來渲染圖片。
OnDrawGizmosSelected 如果你想在物體被選擇時繪製gizmos,實現這個
OnDrawGizmosSelected.
OnDrawGizmos如果你想繪製可被點選的gizmos時,實現OnDrawGizmos。
OnApplicationPause 當玩家暫停時發送到所有遊戲物體。
OnApllicationQuit在應用退出之前發送到所有遊戲物體。
OnPlayerConnected 當一個新玩家成功連接時在服務器上調用這個函數。
OnServerInitialized當Network.InitializeServer被調用並完成時,在服務上調用這
個函數。
OnConnectedToServer 當成功鏈接到服務器上時在客戶端調用這個函數。
OnPlayerDisconnected 當玩家從服務器斷開時在服務器上調用這個函數。
OndisconnectedFormServer 當鏈接丟失或服務器斷開時在客戶端調用這個函數。
OnFailedToConnect當鏈接因為某些原失敗時在客戶端上調用這個

函數
OnFailedToConnectToMasterServer 當鏈接到主服務器出現問題時在客戶端或服務器端調用這個函數。
OnNetworkInstantiate 當一個物體使用Network.Instantiate進行網絡初始化時在該物體上調用這個函數。
OnSerializeNetworkView 用來在一個被網絡視監控的腳本中自定義變量同步。
繼承的類函數
operator bool 這個物體存在嗎?
Instantiate 克隆original物體並返回這個克隆。
Destroy 移除一個遊戲物體,組件或資源。
DestroyImmediate 立即銷毀物體obj。強烈建議使用Destroy代替。
FindObjectsOfType 返回所有類型為type的激活物體。
FindObjectOfType 返回第一個類型為type的激活物體。
operator == 比較兩個物體是否相同。
operator != 比較兩個物體是否不相同。
DontDestroyOnLoad 加載新場景時確保物體target不被自動銷毀。
NetworkView
類,繼承自Behaviour
網絡視是多用戶遊戲的綁定物。
使用這個你可以準確定義什麼應該通過網絡同步,和如何同步,遊戲物體可以有NetworkView組件,該組件可以被定義為觀察物體的其他組件,可以在Network View manual page和component reference page獲取更多信息。
變量
◆ var group : int
描述: 這個網絡視所在的網格組。
所有的網格消息和RPC調用通過這個組。
Function Awake(){
//通過組1發送來自這個網格視的所有消息
Network View.group=1;
}
◆ var isMine : bool
描述:這個網格視是有這個物體控制嗎?
Function OnNetworkInstantiate(info: NetworkMessageInfo){
If{networkView.isMine}
Debug.Log(“New object instanted by me”);
Else
Debug.Log(“New object instantiated by”+info.sender);
}
◆ var obseved : Component
描述:網絡視監控的組件。

//打印含有由數組中給出的viewID的對象的名稱(Print the names of the objects which have the view IDs given in the array)
Function PrintNames(viewIDs: Array){
For (var ID: NetworkViewID in IDs){
Debug.log(“Finding”+ID);
Var view : NetworkView = networkView.Find(ID);
Debug.log(view.observed.name);
}
}
◆ var owner : NetworkPlayer
描述: 擁有這個網絡視的NetworkPlayer
function OnNetworkInstantiate(info: NetworkMessageInfo){
if(!networkView.isMine)
Debug.log(“New object instantiated by” + networkView.owner);
}
◆ var stateSynchrohization: NetworkStateSynchronization
描述:為這個網絡視設置的NetworkStateSynchronization類型。
確保NetworkView在所有機器上使用相同可靠的方法是你的責任。在狀態同步已經發生後不要在運行時改變狀態的可靠性。
◆ var viewID: NetworkViewID
描述:這個網絡視的ViewID。
函數
◆ function RPC(name: string, mode: RPCMode, params args:object[]): void
描述:在所有連接端調用一個RPC函數。
調用的函數必須有@RPC標誌([RPC]用於C Sharp)。 NetworkView必須附加到GameObject,在這個物體上RPC函數能夠被調用。 NetworkView用於其他什麼地方或者是僅僅用於RPC函數是沒有關係的。如果他僅僅用於RPC函數,state synchronization應該被關掉。 Ovserved屬性設置為none,在整個場景中RPC函數的名稱應該是唯一的,如果不同腳本的兩個RPC函數具有相同的名稱,僅有一個會被調用。 RPC調用總是確保執行的順序與他們調用的順序相同。用NetworkView.group為NetworkView設置的通信用,被用於RPC調用。為了獲取RPC自身的信息,可以添加一個NetworkMessageInfo參數到函數申明中,它將自動包含這個信息。這樣的做的時候你不需要改變調用RPC函數的方式,可以參考manual的RPC部分以便獲取更多關於RPC的信息。可用的RPC參數為int,float,string,NetworkPlayer,NetworkViewID,Vector3和Quaternion。
var cubePrefab : Transform;
function OnGUI()
{
if (GUILayout.Button(“SpawnBox”))
{
var viewID = Netwok.AllocateViewID();

networkView.RPC(“SpawnBox”,
RPCMode.AllBuffered,
viewID,
transform.position);
}
}
@RPC
function SpawnBox (viewID : NetworkViewID, location : Vector3) {
// Instantate the prefab locally
var clone : Transform;
clone = Instantiate(cubePrefab, location, Quaternion.identity);
var nView : NetworkView;
nView = clone.GetComponent(NetworkView);
nView.viewID = viewID;
}
◆ function RPC(name: string, target: NetworkPlayer, params args: object[]): void
描述:在特定的玩家端調用RPC
◆ function SetSeope(player: NetworkPlayer, relevancy: bool): bool
描述:相對於一個特定的網絡玩家這是網絡視的範圍
這可以用來實現相關設置,設置它為真假取決於你是否想這個玩家從網絡接收更新。

類方法

◆ static function Find(viewID: NetworkViewID): NetworkView

描述:基於NetworkViewID查找一個網絡視。
// 打印物體的名稱,這些物體具有數組中給定的視ID (Print the names of the objects which have the view IDs given in the array)
function PrintNames(viewIDs : Array)
{
for (var ID: NetworkViewID in IDs)
{
Debug.Log("Finding "+ID);
var view : NetworkView = networkView.Find(ID);
Debug.Log(view.observed.name);
}
}
繼承的成員
繼承的變量
enabled 啟用Behaviours被更新,禁用Behaviours不被更新。
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的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的激活物體。
FindObjectOfType 返回第一個類型為type的激活物體。
operator == 比較兩個物體是否相同。
operator != 比較兩個物體是否不相同。
DontDestroyOnLoad 加載新場景時確保物體target不被自動銷毀。

Projector
類,繼承自Behaviour。
腳本界面就是一個Projector組件。
這個Projector可用於場景工程中的任何材料——就像一個真實的世界。這類的屬性值就是Projector的檢查值。
它可以用來執行斑點或投射陰影。你也可以投射紋理動畫或渲染紋理在電影場景的另一個部分。所有物體投影的視圖在其觀點和提供的材料中。
沒有快捷方式在遊戲對像或者組件來訪問Projector,所以你必須使用GetComponent來做:
function Start() {
// 獲取projector
Var proj.Projector=GetComponent(Projector);
//使用這個
Proj.nearClipPlane=0.5;
}
參見:projector.component;
變量

◆var aspectRatio:float

描述:投影的長寬比。
這個是投影的寬度除以高度。比為1.0使這個投影為正方形:比為2.0使得寬為高的2倍。
function Start() {
var proj : Projector = GetComponent (Projector);
proj.aspectRatio = 2.0;
}
參見:projector component.

◆var farClipPlane:float
描述:遠裁剪面的距離。
投影器將不會影響任何運離這個距離的物體。
function Start() {
var proj : Projector = GetComponent (Projector);
proj.farClipPlane = 20.0;
}
參見:projector component

◆var fieldofView:float

描述:投影的視野,以度為單位。
這是垂直視野:水平FOV取決於aspectRatio。當投射器是正交時fi​​eldOfView被忽略
(參考orthographic)
function Start() {
var proj : Projector = GetComponent (Projector);
proj.fieldOfView = 80.0;
}
參見:project component

◆var ignoreLayers:int

描述:那個物體層將這個投射器忽略。
參見layer mask
缺省為零,沒有層被忽略,在ignoreLayers中設置的每個位將使這個層不會被投射器影
響。
function Start()
{
var proj : Projector = GetComponent (Projector);
//使投射器忽略默認的(0)層
proj.ignoreLayers = (1<<0);
}
參見:projector component,Layers.

◆var material:material
描述:這個材質將被投射到每個物體上

如果沒有設置材質,投射器不會做任何事情,Standard Assets中的Blob.Shadow文件夾包含一個投射器材質的例子
參見:projector component,Material類。

◆var nearClipPlane:float
描述:近裁剪面的距離。
投影器將不會影響任何比這個距離近的物體。
function Start() {
var proj : Projector = GetComponent (Projector);
proj.nearClipPlane = 0.5;
}
參見:projector component;

◆var orthographic:bool
描述:投射是正交的(true)還是透視的(false)?
當正交為true時,投影被orghographicSize定義。
當正交為false時,投射被fieldOfView定義
function Start() {
var proj : Projector = GetComponent (Projector);
proj.orthographic = true;
}
參見:projector component

◆var orthographicSize:float
描述:在正交模式下投射的一半尺寸。
這個為投影體垂直大小的一半。水平投射的大小取決於aspectRatio,投射器不是正交時,
orthographicSize被忽略(參考orthographic)
function Start() {
var proj : Projector = GetComponent (Projector);
proj.orthographic = true;
proj.orthographicSize = 2.0;
}
參見:projector component
繼承的成員
繼承的變量
enabled 啟用Behaviours被更新,禁用Behaviours不被更新。
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)。
guiText 附加到這個GameObject的GUIText(如果沒有為null)。
networkView附加到這個GameObject的NetworkView(如果沒有為null)。
Collider 附加到這個GameObject的Collider(如果沒有為null)。
hingeJoint附加到這個GameObject的HingeJoint(如果沒有為null)。
particleEmitter 附加到這個GameObject的ParticleEmitter(如果沒有為null)。
gameObject這個組件所附加的遊戲物體。一個組件總是附加到一個遊戲物體。
Tag 這個遊戲的標籤。
Name 對象的名稱。
hideFlags 該物體是否被隱藏,保存在場景中或被用戶修改?
繼承的函數
GetComponet 返回type類型的組件,如果遊戲物體上附加一個,如果沒有返回null。
GetComponentInchildren 返回type類型的組件,這個組件位於GameObject或者任何它的子物體上,使用深度優先搜索。
GetComponentsInchildren 返回所有type類型的組件,這些組件位於GameObject或者任何它的子物體上。
GetComponets返回Gameobject所有type類型的組件。
CompareTag 這遊戲物體被標籤為tag?
SendMessageUpwards 在這遊戲物體的每個MonoBehaviour和該行為的組先上調用名為methodName方法。
SendMessage 在這遊戲物體的每個MonoBehaviour上調用名為
methodName方法。
BoradcastMessage 在這個遊戲物體或其任何子上的每個MonoBehaviour上調用methodName方法。
GetInstanceID 返回該物體的實例id。
繼承的類函數
Operator bool 這個物體存在嗎?
Instatiate 克隆original物體並返回這個克隆。
Destroy 移除一個遊戲物體,組件或資源。
DestroyImmediate立即銷毀物體obj。強烈建議使用Destroy代替
FindObjectsOfType返回所有類型為type的激活物體。
FindObjectOfType返回第一個類型為type的激活物體。
Operator== 比較兩個物體是否相同。
Operator!= 比較兩個物體是否不相同。
DontDestroyOnLoad 加載新場景時確保物體target不被自動銷毀。
Skybox
類,繼承自Behaviour
Skybox component的腳本接口
天空盒只有material屬性
參見:skybox component

變量

◆var material:Material

描述:該天空盒使用的材質。
參見:skybox component
繼承的成員
繼承的變量
Enabled 啟用Behaviours被更新,禁用Behaviours不被更新。
Transform附加
aaa1218bbb
aaa1218bbb
社員
社員

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

https://design.666forum.com

回頂端 向下

回頂端


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