Unity 3D 腳本教學 (九)

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

Unity 3D 腳本教學 (九)

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

name 對象名稱
hideFlags 該物體是否被隱藏,保存在場景中或被用戶修改
繼承的函數
GetInstanceID 返回該物體的實例id
繼承的類函數
operator bool 這個物體存在嗎?
Instantiate 克隆original物體並返回這個克隆。
Destroy 移除一個遊戲物體、組件或資源。
DestroyImmediate 立即銷毀物體obj。強烈建議使用Destroy代理。
FindObjectsOfType 返回所有類型為type的激活物體。
FindObjectsOfType 返回第一個類型為type的激活物體。
operator== 比較兩個物體是否相同。
operator!= 比較兩個物體是否不同。
DontDestroyOnLoad 加載新場景時確保目標物體不被自動銷毀。
Component
類,繼承自Object。音頻數據的容器。所有附加到遊戲物體上的對象的基類。

變量
◆ var animation : Animation

描述:附加到這個GameObject的Animation。 (沒有則為null)

◆ var audio : AudioSource

描述:附加到這個GameObject的AudioSource。 (沒有則為null)
audio.Play();

◆ var camera : Camera

描述:附加到這個GameObject的Camera。 (沒有則為null)

◆ var collider : Collider

描述:附加到這個GameObject的Collider。 (沒有則為null)
collider.material.dynamicFriction =1;

◆ var constantForce : ConstantForce

描述:附加到這個GameObject上的ConstantForce(沒有則為null)。

◆ var gameObject : GameObject

描述:這個組件所附加的遊戲物體。組件總是附著在遊戲物體上。
print(gameObject.name);

◆ var guiText : GUIText

描述:附加到這個GameObject上的GUIText(沒有則為null)。
guiText.text = "Hello World";

◆ var guiTexture : GUITexture
描述:附加到這個GameObject上的GUITexture(只讀)(沒有則為null)。

◆ var hingeJoint : HingeJoint

描述:附加到這個GameObject的HingeJoint(沒有則為null)。
hingeJoint.motor.targetVelocity = 5;

◆ var hingeJoint : HingeJoint
描述:附加到這個GameObject的HingeJoint(沒有則為null)。

◆ var light : Light

描述:附加到這個GameObject的Light(沒有則為null)。

◆ var networkView : NetworkView

描述:附加到這個GameObject的NetworkView(只讀)(沒有則為null)。
networkView.RPC("MyFunction", RPCMode.All, "someValue");

◆ var particleEmitter : ParticleEmitter

描述:附加到這個GameObject的ParticleEmitter(沒有則為null)。
particleEmitter.emit = true;

◆ var renderer : Renderer

描述:附加到這個GameObject的Renderer。 (沒有則為null)

◆ var rigidbodyr : Rigidbody

描述:附加到這個GameObject的rigidbody。 (沒有則為null)

◆ var tag : string
描述:標籤可以用來標識一個遊戲物體。標籤在使用前必須在標籤管理器中定義。

◆ var transform : Transform
描述:附加到這個GameObject的Transform。 (沒有則為null)
transform.Translate(1, 1, 1);

函數

◆ function BroadcastMessage (methodName : string, parameter : object = null, options :SendMessageOptions = SendMessageOptions.RequireReceiver) : void

描述:在這個遊戲物體或其任何子物體上的每個MonoBehaviour上調用methodName方法。通過使用零參數,結婚搜方法可以選擇忽略parameter。如果options被設置為SednMessageOptions.RequireReceiver,那麼如果這個消息沒有被任何組件接受時,將打印一個錯誤信息。

//使用值5調用ApplyDamage
BroadcastMessage ("ApplyDamage", 5.0);
//每個附加到該遊戲物體及其所有子物體上含有ApplyDamage函數的腳本都會被調用
function ApplyDamage (damage : float)
{
print (damage);
}

◆ function CompareTag (tag : string) : bool

描述:這個遊戲物體有被標籤為tag嗎?
//立即銷毀觸發器,銷毀任何進入到觸發器的碰撞器,這些碰撞器被標記為Player

function OnTriggerEnter (other : Collider)
{
if (other.CompareTag ("Player"))
{
Destroy (other.gameObject);
}
}

◆ function GetComponent (type : Type) : Component

描述:如果遊戲物體上附加了這個組件,則返回一個Type類,如果沒有則返回null。

//等同於Transform curTransform = transform
var curTransform : Transform = GetComponent (Transform);
//你可以像訪問其他組件一樣的訪問腳本組件
function Start ()
{
var someScript : ExampleScript = GetComponent (ExampleScript);
someScript.DoSomething ();
}
for c#
public class Something : MonoBehaviour
{
void Start()
{
ExampleScript someScript = GetComponent();
someScript.DoSomething ();
}
}

◆ function GetComponent (type : string) : Component

描述:如果遊戲物體上附加了這個組件,則返回一個Type類,如果沒有則返回null。處於性能原因,最好用Type調用GetComponent而不是字符串。不過有時你可能無法得到Type。例如當是同從Javascript中訪問c#時。這時你可以簡單的通過名稱而不是類型訪問該組件。
//為了訪問附加在同一物體上的腳本中的公有變量與函數
script = GetComponent(ScriptName);
script.DoSomething ();

◆ function GetComponentInChildren (t : Type) : Component

描述:返回type類型組件,這個組件位於GameObject或任何它的子物體上,使用深度優先搜索。只有激活的最賤會被返回。
var script : ScriptName = GetComponentInChildren(ScriptName);
script.DoSomething ();
for c#
ScriptName script = GetComponentInChildren();
script.DoSomething ();

◆ function GetComponents (type : type) : Component[]

描述:返回GameObject上所有type類型組件。
//關閉該遊戲物體鉸鏈上的所有彈簧
var hingeJoints = GetComponents (HingeJoint);
for (var joint : HingeJoint in hingeJoints)
{
joint.useSpring = false;
}
for c#
HingeJoint[] hingeJoints = GetComponents();
for (HingeJoint joint in hingeJoints)
{
joint.useSpring = false;
}

◆ function GetComponentsInChildren (t:Type,includeInactive:bool=false) : Component[]

描述:返回GameObject上或其子物體上所有type類型組件。
//關閉該遊戲物體極其子物體上的鉸鏈上的所有彈簧
var hingeJoints = GetComponentsInChildren (HingeJoint);
for (var joint : HingeJoint in hingeJoints)
{
joint.useSpring = false;
}
for c#
HingeJoint[] hingeJoints = GetComponentsInChildren();
for (HingeJoint joint in hingeJoints)
{
joint.useSpring = false;
}

繼承的成員
繼承的變量
name 對象名稱
hideFlags 該物體是否被隱藏,保存在場景中或被用戶修改
繼承的函數
GetInstanceID 返回該物體的實例id
繼承的類函數
operator bool 這個物體存在嗎?
Instantiate 克隆original物體並返回這個克隆。
Destroy 移除一個遊戲物體、組件或資源。
DestroyImmediate 立即銷毀物體obj。強烈建議使用Destroy代理。
FindObjectsOfType 返回所有類型為type的激活物體。
FindObjectsOfType 返回第一個類型為type的激活物體。
operator== 比較兩個物體是否相同。
operator!= 比較兩個物體是否不同。
DontDestroyOnLoad 加載新場景時確保目標物體不被自動銷毀。
Behaviour
類,繼承自Component。 Behaviours是可以被啟用或禁用的組件。參見MonoBehaviour和Component。
變量
◆ var enabled : bool
描述:啟用Behaviours被更新,禁用Behaviours不被更新。這將在behaviour的堅實面板中顯示為一個小的複選框GetComponent(PlayerScript)enabled = false;
繼承的成員
繼承的變量
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 加載新場景時確保目標物體不被自動銷毀。
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;
}
變量
◆ var animateOnlyIfVisible : bool
描述:啟用後,Unity會在認為動畫不可見的時候停止播放。該選項可以節省資源。
◆ var animatePhysics : bool
描述:啟用後,動畫獎在物理循環中執行。這只在與運動學剛體結合時有用。一個動畫平台可以應用速度和摩擦到其頂部的剛體。為了利用這個,animatePhysics必須被啟用,並且動畫物體必須為一個運動學剛體。
◆ var clip : AnimationClip
描述:默認動畫。
animation.Play(animation.clip);
//等待動畫完成
yield WaitForSeconds (animation.clip.length);
◆ var isPlaying : bool
描述:是否正在播放動畫?
//在動畫沒有播放時播放這個動畫。
function OnMouseEnter() {
if (!animation.isPlaying)animation.Play();
}
◆ var playAutomatically : bool
描述:默認的動畫剪輯(Animation.clip)是否在開始時自動播放?
animation.playAutomatically = true;
◆ var this[name : string] : AnimationState
描述:返回名為name的動畫狀態。
//獲取walk動畫狀態並設置它的速度
animation["walk"].speed = 2.0;
//獲取run動畫狀態並設置它的速度
animation["run"].weight = 0.5;
◆ var wrapMode : WrapMode
描述:超出剪輯播放時間之外時如何處理?
WrapMode.Default:從剪輯中獲取迴繞模式(默認為Once)。
WrapMode.Once:當時間到達末尾時停止動畫。
WrapMode.Loop:當時間到達末尾時從頭開始播放。
WrapMode.PingPong:在開始和結束之間來回播放。
WrapMode.ClampForever:播放動畫。當它到達末端時,它將保持在最後一幀。
//讓動畫循環
animation.wrapMode = WrapMode.Loop;
函數
◆ function AddClip (clip : AnimationClip, newName : string) : void
描述:添加一個clip到Animation,它的名稱為newName。
var walkClip : AnimationClip;
animation.AddClip(walkClip, "walk");
◆ function AddClip (clip : AnimationClip, newName : string, firstFrame : int, lastFrame : int, addLoopF​​rame : bool = false) : void
描述:添加clip只在firstFrame和lastFrame之間播放。這個新的剪輯也將被使用名稱newName並添加到Animation。 addLoopF​​rame:是否要插入額外的幀一邊匹配第一幀?如果製作循環動畫就要打開這個。如果存在一個同名的剪輯,老的將被覆蓋。
//分割默認的剪輯為shoot,walk和id​​le動畫
animation.AddClip(animation.clip, "shoot", 0, 10);
//walk和id​​le將在末尾添加額外的循環真
animation.AddClip(animation.clip, "walk", 11, 20, true);
animation.AddClip(animation.clip, "idle", 21, 30, true);
◆ function Blend (animation : string, targetWeight : float = 1.0F, fadeLength : float = 0.3F) : void
描述:在接下來的time內混合名為animation的動畫得到targetWeight。其他動畫播放不會受影響。
◆ function CrossFade (animation : string, fadeLength : float = 0.3F, mode : PlayMode = PlayMode.StopSameLayer) : void
描述:淡入名為animation的動畫,並在time內淡出其他動畫。如果模式是PlayMode.StopSameLayer,在同一層上淡入的動畫將會被淡出。如果模式是PlayMode.StopAll,當動畫被淡入後,所有動畫都會被淡出。如果動畫被設置為循環,在播放後將停止並回放。
//淡入walk循環並淡出同一層上所有其他動畫。
http://0.2秒內完成淡入
animation.CrossFade("Walk", 0.2);
//當玩家想要移動的時候,使角色動畫在Run和Idle動畫之間漸變。
function Update (){
if (Mathf.Abs(Input.GetAxis("Vertical")) > 0.1)animation.CrossFade("Run");
else
animation.CrossFade("Idle");
}
◆ function CrossFadeQueued (animation : string, fadeLength : float = 0.3F, queue : QueueMode = QueueMode.CompleteOthers, mode : PlayMode = PlayMode.StopSameLayer) : AnimationState
描述:在前一動畫播放完後漸變到下一個動畫。例如你可以播放一個特定的動畫序列。動畫在播放前複製自身,因此你可以再相同的動畫間漸變,這可用來重疊兩個相
同的動畫。例如你可能有一個揮劍的動畫,玩家快速揮動了2次,你可以回放這個動畫並從開始播放它,但會跳幀。
下面是可用的queue modes:
下面是可用的queue modes:
如果queue為QueueMode.CompleteOthers這個動畫紙在所有其他動畫都停止播放時才開始。
如果queue為QueueMode.PlayNow這個動畫將以一個複制的動畫狀態立即開始播放。
動畫播放完成後它將自動清除它自己。在它播放完成後使用賦值的動畫將導致一個異常。
function Update (){
if (Input.GetButtonDown("Fire1"))
animation.CrossFadeQueued("shoot", 0.3, QueueMode.PlayNow);
}
◆ function GetClipCount () : int
描述:獲取當前animation的剪輯數。
◆ function IsPlaying (name : string) : bool
描述:名為name的動畫是否在播放?
function OnMouseEnter() {
if (!animation.IsPlaying("mouseOverEffect"))
animation.Play("mouseOverEffect");
}
◆ function Play (mode : PlayMode = PlayMode.StopSameLayer) : bool
function Play (animation : string, mode : PlayMode = PlayMode.StopSameLayer) : bool
描述:立即播放該動畫,沒有任何混合。 Play()將會開始播放名為animation的動畫,或者播放默認動畫,且會在沒有混合的情況下突然播放。如果模式為PlayMode.StopSameLayer所有在同一層上的動畫都將被停止。如果模式是PlayMode.StepAll所有當前播放的動畫都將被停止。如果動畫正在播放,其他動畫將被停止,但該動畫會回到開始位置。如果動畫沒有被設置為循環,播放完後將停止並回放。如果動畫無法被播放(沒有該剪輯或沒有默認動畫),Play()會返回假。
//播放默認動畫
animation.Play ();
//播放walk動畫,停止該層內所有其他動畫
animation.Play ("walk");
//播放walk動畫,停止其他所有動畫
animation.Play ("walk", PlayMode.StopAll);
◆ function PlayQueued (animation : string, queue : QueueMode = QueueMode.CompleteOthers, mode : PlayMode = PlayMode.StopSameLayer) : AnimationState
描述:在前一動畫播放完後漸變一個動畫。例如你可以播放一個特定的動畫序列。動畫狀態在播放前複製自身,因此你可以再相同的動畫之間漸變。這可用來重疊兩個相同的動畫。例如你可能有一個揮劍的動畫。玩家快速的砍了兩次,你可以回放這個動畫,並且從開始播放,只不過會跳幀。
下面是可用的queue modes:
如果queue為QueueMode.CompleteOthers這個動畫紙在所有其他動畫都停止播放時才開始。
如果queue為QueueMode.PlayNow這個動畫將以一個複制的動畫狀態立即開始播放。
動畫播放完成後它將自動清除它自己。在它播放完成後使用賦值的動畫將導致一個異常。
function Update (){
if (Input.GetButtonDown("Fire1"))
animation.PlayQueued("shoot", QueueMode.PlayNow);
}
◆ function RemoveClip (clip : AnimationClip) : void
描述:從動畫列表中移除剪輯。這將移除該剪輯及所有棘突它的動畫狀態。
◆ function RemoveClip (clipName : string) : void
描述:從動畫列表中移除剪輯。這將移除指定名稱的動畫狀態。
◆ function Rewind (name : string) : void
描述:回退名為name的動畫。
//回退walk動畫到開始
animation.Rewind("walk");
◆ function Rewind () : void
描述:回退所有動畫。
//回退所有動畫到開始
animation.Rewind();
◆ function Sample () : void
描述:在當前狀態採樣動畫。如果想要設置一些動畫狀態,並採樣一次,可以用這個。
//設置一些狀態
animation["MyClip"].time = 2.0;
animation["MyClip"].enabled = true;
//採樣動畫
animation.Sample();
animation["MyClip"].enabled = false;
◆ function Stop () : void
描述:停止所有由這個Animation開始的動畫。停止一個動畫並回退到開始。
//終止所有動畫
animation.Stop();
◆ function Stop (name : string) : void
描述:停止名為name的動畫。停止一個動畫並回退到開始。
//停止walk動畫
animation.Stop ("walk");
◆ function SyncLayer (layer : int) : void
描述:同步所有在該層的動畫的播放速度。當混合兩個循環動畫時,它們通常有不同長度。例如一個walk循環要比run更長。當混合它們時,你需要確保行走於跑循環中腳的位置相同。也就是說,動畫的播放速度必須被調整一邊動畫同步。 SyncLayer將給予它們的混合權值計算在該層上所有動畫播放的平均詭異化速度,然後對該層上的動畫使用播放速度。
//放置walk和run動畫在同一層,並同步它們的速度
animation["walk"].layer = 1;
animation["run"].layer = 1;
animation.SyncLayer(1);
繼承的成員
繼承的變量
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 加載新場景時確保目標物體不被自動銷毀。
AudioListener
類,繼承自Behaviour。標示在三維空間中的偵聽器。這個類可實現麥克風一樣的設備。它記錄周圍的聲音,並通過玩家的揚聲器播放。在場景中只能有一個偵聽器。參見組件參考中AudioSource,AudioListener,component。
變量
◆ var velocityUpdateMode : AudioVelocityUpdateMode
描述:可讓你設置Audio Listener是否應該用固定或動態方式更新。如果你遇到了多普勒效應問題,請確保設置這個更新於Audio Listener的移動在同一循環內。如果它被附加到一個剛體,默認設置將自動設置該偵聽器在固定的更新周期內更新,動態的以其他方式。
listener.velocityUpdateMode = AudioVelocityUpdateMode.Fixed;
類變量
◆ static var pause : bool
描述:音頻的暫停狀態。如果設置為真,該偵聽器將不會產生聲音。類似於設置音量為0.0
AudioListener.pause = true;
◆ static var volume : float
描述:控制遊戲的音量。
AudioListener.volume = 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類組件。
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 加載新場景時確保目標物體不被自動銷毀。
AudioSource
類,繼承自Behaviour。標示三位空間中的音頻源。 AudioSource被附加到GameObject以便在三位環境中播放聲音。單聲道聲音以3D播放。為了播放三位聲音,也需要一個AudioListener。音頻偵聽器通常附加在使用的相機上。立體聲總是不以距離為基礎衰減。你可以使用Play,Pause,Stop來播放音頻剪輯。也可以再播放時使用volume屬性調整音量,或者使用time來定位。多個聲音可以使用PlayOneShot在一個AudioSource上播放。可以使用PlayClipAtPoint在三位空間中的一個靜態位置播放剪輯。參見AudioListener,AudioClip,AudioSource component。
變量
◆ var clip : AudioClip
描述:默認播放的AudioClip。
var otherClip: AudioClip;
// 播放默認聲音
audio.Play();
// 等待音頻結束
yield WaitForSeconds (audio.clip.length);
// 指定其他音頻並播放
audio.clip = otherClip;
audio.Play();
◆ var ignoreListenerVolume : bool
描述:這使音頻源不考慮音頻偵聽器的音量。播放背景音樂時可啟用這個。當播放背景音樂時,你希望音樂不受普通音量設置的影響,可以使用該變量。
audio.ignoreListenerVolume = true;
◆ var isPlaying : bool
描述:clip現在生意否在播放?
//當音頻組件停止播放時,播放otherClip
var otherClip : AudioClip;
function Update (){
if (!audio.isPlaying) {
audio.clip = otherClip;
audio.Play();
}
}
◆ var loop : bool
描述:音頻剪輯是否循環?如果你在一個正在播放的AudioSource上禁用循環,聲音將在當前循環結束後停止。
// 停止聲音循環
audio.loop = false;
◆ var maxVolume : float
描述:音頻剪輯播放時的最大音量。不論你距離多近,聲音不會比這個值更大。
audio.maxVolume = 0.5;
參見:minVolume, rolloffFactor.
◆ var minVolume : float
描述:音頻剪輯播放時的最小音量。不論你距離多遠,聲音不會比這個還小。
audio.minVolume = 0.5;
參見:maxVolume, rolloffFactor.
◆ var pitch : float
描述:音頻源的音調。
audio.pitch = 1.0;
◆ var playOnAwake : bool
描述:如果設置為真,音頻源江在awake時自動播放。
if(! audio.playOnAwake) {
audio.Play();// 如果沒有設置為Awake時播放,那麼播放該剪輯
}
◆ var rolloffFactor : float
描述:設置聲音衰減的速度。該值越大,偵聽器必須更接近才能聽到聲音。
audio.rolloffFactor = 0.1;
參見:minVolume, maxVolume.
◆ var time : float
描述:以秒計算的播放位置。使用這個來讀當前播放時間或尋找新的播放時間。
◆ var velocityUpdateMode : AudioVelocityUpdateMode
描述:Audio Source是否應該以固定或動態的方式更新?如果你遇到了這個源的多普勒效應問題,請確保設置這個更新與Audio Source的移動
在同一循環內。如果它被附加到一個剛體,默認設置將自動設置該源在固定的更新周期內更新,以動態的以及其他方式。
◆ var volume : float
描述:音頻源的音量。
audio.volume = 0.2;
函數
◆ function Pause () : void
描述:暫停播放clip。
audio.Pause();
參見:Play,Stop函數
◆ function Play () : void
描述:播放clip。
audio.Play();
參見:Pause,Stop函數
◆ function PlayOneShot (clip : AudioClip, volumeScale : float = 1.0F) : void
描述:播放一個AudioClip。
//與其他物體碰撞時播放impact音頻剪輯
var impact : AudioClip;
function OnCollisionEnter () {
audio.PlayOneShot(impact);
}
◆ function Stop () : void
描述:停止播放clip。
audio.Stop();
參見:Play,Pause函數
類方法
◆ static function PlayClipAtPoint (clip : AudioClip, position : Vector3, volume : float = 1.0F) : void
描述:在製定位置上播放剪輯。播放完成後自動消除音頻源。正在播放的聲音的音頻源被返回。
//在製定位置播放clip
var clip : AudioClip;
AudioSource.PlayClipAtPoint(clip, Vector3 (5, 1, 2));
如果想進一步控製播放,可以使用下面代碼。
var theClip : AudioClip;
PlayAudioClip(theClip, transform.position, 1);
function PlayAudioClip (clip : AudioClip, position : Vector3, volume : float)
{
var go = new GameObject ("One shot audio");
go.transform.position = position;
var source : AudioSource = go.AddComponent (AudioSource);
source.clip = clip;
source.volume = volume;
source.Play ();
Destroy (go, clip.length);
return source;
}
Destroy (go, clip.length);
return source;
}
繼承的成員
繼承的變量
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 加載新場景時確保目標物體不被自動銷毀。
Camera
類,繼承自Behaviour。 Camera是一個設備,玩家通過它來看世界。屏幕空間點用像素定義。屏幕左下為(0,0);右上是(pixelWidth.pixelHeight)。 z的位置是以世界單位衡量到相機的距離。視口空間點是歸一化的並且是相對於相機的。相機左下為(0,0);右上是(1,1)。 z的位置是以世界單位衡量到相機的距離。世界空間點是以全局坐標定義的(例如Transform.position)。
參見:camera component
變量
◆ var aspect : float
描述:長寬比(寬度除以高度)。默認的長寬比是從屏幕的長寬比計算得到的,即使相機沒有被渲染到全屏。如果修改了相機的aspect比,這個值將保持到你調用camera.ResetAspect();這將充值猖狂比為屏幕的長寬比。
if(camera.aspect > 1.0)
print ("Screen is more wide than tall!");
else
print ("Screen is more tall than wide!");
參見:camera component,Screen類。
◆ var backgroundColor : Color
描述:屏幕將被清理未這個顏色。只能在clearFlags被設置為CameraClearFlags.SolidColor(或設置為CameraClearFlags.Skybox但沒有設置天空盒)時使用。
//來回變化背景色
var color1 = Color.red;
var color2 = Color.blue;
var duration = 3.0;
//設置清楚標記為該顏色
camera.clearFlags = CameraClearFlags.SolidColor;
function Update () {
var t = Mathf.PingPong (Time.time, duration) / duration;
camera.backgroundColor = Color.Lerp (color1, color2, t);
}
參見:camera component,Camera.clearFlags屬性。
◆ var cameraToWorldMatrix : Matrix4x4
描述:從相機空間到世界空間的變換矩陣(只讀)。使用次變量計算相機空間中的一個點在世界坐標中的什麼位置。注意相機空間與openGL的約定相同。相機前味z軸負方向。這不同於Unity的約定,向前微z軸爭相。
//以distance單位,沿著相機所看到的方向,在屏幕中繪製一個黃色的球,
var distance = -1.0;
function OnDrawGizmosSelected () {
var m = camera.cameraToWorldMatrix;
var p = m.MultiplyPoint (Vector3(0,0,distance));
Gizmos.color = Color.yellow;
Gizmos.DrawSphere (p, 0.2);
}
◆ var clearFlags : CameraClearFlags
描述:相機如何清楚背景。可以是CameraClearFlags.Skybox,CameraClearFlags.SolidColor,CameraClearFlags.Depth,CameraClearFlags.Nothing。
//用背景色清除(忽略天空盒)
camera.clearFlags = CameraClearFlags.SolidColor;
◆ var cullingMask : int
描述:這個用來選擇性的渲染部分場景。如果GameObject的layerMask與相機的cullingMask進行AND操作後為0,則這個遊戲物體對於該相機是不可見的。參考Layers獲取更多信息。
//只渲染在第一層中的物體(默認層)
camera.cullingMask = 1 << 0;
參見:camera component
◆ var depth : float
描述:相機在渲染順序上的深度。具有較低深度的相機將在較高深度的相機之前渲染。如果有多個相機併其中一些不需要覆蓋整個屏幕,可以使用這個來控制相機的繪製次序。
//設置該相機在主相機之後渲染
camera.depth = Camera.main.depth + 1;
參見:camera component,Camera.rect屬性
◆ var farClipPlane : float
描述:遠裁剪面的距離。
camera.farClipPlane = 100.0;
參見:camera component
◆ var fieldOfView : float
描述:相機的視野,以度為黨委。這是垂直視野。水平FOV取決於視口的寬高比。當相機是正交時,fieldOfView被忽略。 (參考orthographic)。
//設置附加到同一個遊戲物體上的相機的FOV位60
camera.fieldOfView = 60;
//設置主相機的視野為80
Camera.main.fieldOfView = 80;
參見:camera component
◆ var nearClipPlane : float
描述:近才見面的距離。
camera.nearClipPlane = 0.1;
參見:camera component
◆ var orthographic : bool
描述:相機是正交的(true)還是透視的(false)?如果orthographic為true,相機的視野由orthographicSize定義。如果orthographic為false,相機的視野由fieldOfView定義。
//設置相機為正交
camera.orthographic = true;
//設置主相機為正交
Camera.main.orthographic = true;
參見:camera component
◆ var orthographicSize : float
描述:在正交模式下相機的一半尺寸。這個為視體垂直大小的一半。相機不是正交時,水平視大小拒絕於視口的長寬比。
//設置相機的正交尺寸為5
camera.orthographic = true;
camera.orthographicSize = 5;
//設置主相機的正交尺寸為5
Camera.main.orthographic = true;
Camera.main.orthographicSize = 5;
參見:camera component
◆ var pixelHeight : float
描述:相機的像素高度(只讀)。
print ("Camera is " + camera.pixelHeight + " pixels high");
◆ var pixelRect : Rect
描述:相機被渲染到屏幕像素坐標中的位置。
function Update () {
var r = camera.pixelRect;
print ("Camera displays from " + r.xMin + " to " + r.xMax + " pixel");
}
◆ var pixelWidth : float
描述。相機的像素寬度(只讀)。
print ("Camera is " + camera.pixelWidth + " pixels wide");
◆ var projectionMatrix : Matrix4x4
描述:設置自動以的投影矩陣。如果你改變該矩陣,相機的渲染將不再給予它的fieldOfView更新,直到調用到ResetProjectionMatrix。只有當真正需要一個非標準的投影時,才使用自定義投影。該屬性被Unity的水渲染使用來設置一個oblique.projection矩陣。使用自定義投影需要了解變換和投影矩陣。
//讓相機以有節奏的方式晃動
var originalProjection : Matrix4x4;
originalProjection = camera.projectionMatrix;
function Update () {
var p = originalProjection;
//改變原始矩陣的某些值
p.m01 += Mathf.Sin (Time.time * 1.2) * 0.1;
p.m10 += Mathf.Sin (Time.time * 1.5) * 0.1;
camera.projectionMatrix = p;
}
//設置一個變異中心的投影,這裡透視的消失點沒有必要在屏幕的中心。 left/right/top/bottom定義近裁剪面大小。例如相機的近裁剪面偏移中心的距離,改變該值就可以看到相機視圖的變化。
@script ExecuteInEditMode
var left = -0.2;
var right = 0.2;
var top = 0.2;
var bottom = -0.2;
function LateUpdate () {
var cam = camera;
var m = PerspectiveOffCenter(left, right, bottom, top,cam.nearClipPlane, cam.farClipPlane );
cam.projectionMatrix = m;
}
static function PerspectiveOffCenter(left : float, right : float,bottom : float, top : float,near : float, far : float ) : Matrix4x4{
var x = (2.0 * near) / (right - left);
var y = (2.0 * near) / (top - bottom);
var a = (right + left) / (right - left);
var b = (top + bottom) / (top - bottom);
var c = -(far + near) / (far - near);
var d = -(2.0 * far * near) / (far - near);
var e = -1.0;
var m : Matrix4x4;
m[0,0] = x; m[0,1] = 0; m[0,2] = a;
m[0,3] = 0;
m[1,0] = 0; m[1,1] = y; m[1,2] = b; m[1,3] = 0;
m[2,0] = 0;
m[2,1] = 0; m[2,2] = c; m[2,3] = d;
m[3,0] = 0; m[3,1] = 0; m[3,2] = e;
m[3,3] = 0;
return m;
}
◆ var rect : Rect
描述:相機被渲染到屏幕歸一化坐標中的位置。 rect的範圍從0(左/下)到1(右/上)。
//每次按下空格鍵時改變視口寬度
function Update () {
if (Input.GetButtonDown ("Jump")) {
//隨機選擇邊緣
var margin = Random.Range (0.0, 0.3);
//設置矩形
camera.rect = Rect (margin, 0, 1 - margin * 2, 1);
}
}
◆ var targetTexture : RenderTexture
描述:目標渲染紋理(只限UnityPro)。
◆ var velocity : Vector3
描述:獲取世界空間中相機的速度(只讀)這是相機在上一幀以秒為單位的運動。
function Update () {
print ("Camera moving at " + camera.velocity.magnitude + " m/s");
}
◆ var worldToCameraMatrix : Matrix4x4
描述:從世界到相機空間的變換矩陣。用這個計算物體的相機空間位置或提供自定義相機的位置。這個位置不是基於變化的。注意相機空間與openGL的約定相同:相機的前面為Z軸負方向。這不同於Unity的約定,向前微Z軸爭相。如果你改變該矩陣,相機的渲染將不再基於它的Transform更新。知道調用ResetWorldToCameraMatrix。
//從offset位置偏移相機的渲染
var offset = Vector3 (0,1,0);
function LateUpdate () {
//構建一個沿著Z軸偏移與鏡像的矩陣。因為相機已經為Z軸鏡像,並用於其餘部分
var camoffset = Vector3 (-offset.x, -offset.y, offset.z);
var m = Matrix4x4.TRS (camoffset, Quaternion.identity, Vector3 (1,1,-1));
//重載worldToCameraMatrix為偏移鏡像變換矩陣
camera.worldToCameraMatrix = m * transform.worldToLocalMatrix;
}
函數
◆ function CopyFrom (other : Camera) : void
描述:使該相機的設置於其他相機相同。這將從er相機拷貝到所有相機變量(視野,清楚標記,裁剪蒙版)。這也將使相機的變換與other相機相同,相機的層也與other相機相同。在做自定義渲染效果的時候,這可以用來設置一台具有與其他相機設置完全相同的相機。例如在使用RenderWithShader時。
◆ function Render : void
描述:手動渲染相機。這個將使用相機的清除標記,目標紋理和所有其他設置。相機將發送OnPreCull,OnPreRender和OnPostRender到任何附加的腳本上,並渲染任何最後的圖像濾鏡。這個用來精確的控制渲染次序,為了使用這個特性,創建一個相機並禁用它。然後在它上面調用Render。參見:RenderWithShader。
◆ function 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;
function OnWizardUpdate () {
helpString = "Select transform to render from and cubemap to render into";
isValid = (renderFromPosition != null) && (cubemap != null);
}
function 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 function RenderCubemap () {
ScriptableWizard.DisplayWizard(
"Render cubemap", RenderCubemapWizard, "Render!");
}
}
◆ function 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;
function Start () {
//啟動時渲染所有6個面
UpdateCubemap( 63 );
}
function LateUpdate () {
if (oneFacePerFrame) {
var faceToRender = Time.frameCount % 6;
var faceMask = 1 << faceToRender;
UpdateCubemap (faceMask);
}
else {
UpdateCubemap (63); //所有6個面
}
}
function 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);
}
function OnDisable () {
DestroyImmediate (cam);
DestroyImmediate (rtex);
}
◆ function RenderWithShader (shader : Shader, replacementTag : string) : void
描述:用shader替換渲染相機。參考Rendering with Replaced Shaders獲取細節。此函數將渲染相機。這將使相機的的清除標記、目標紋理和所有其他設置。這個相機不會發送OnPreCull, OnPreRender 或者OnPostRender到已附加的腳本上。
圖像濾鏡
也不會被渲染。該函數可以用於特效,例如渲染整個場景屏幕空間緩衝,熱效果等。為了使用該特性,創建一個相機並禁用它。然後在它上面調用RenderWithShader。參見:Rendering with Replaced Shaders, SetReplacementShader, Render。
◆ function ResetAspect () : void
描述:返回猖狂比為屏幕的長寬比。調用這個結束aspect的效果。
camera.ResetAspect();
◆ function ResetProjectionMatrix () : void
描述:讓投影反映正常的相機參數。調用這個結束projectionMatrix的效果。
camera.ResetProjectionMatrix();
◆ function ResetReplacementShader () : void
描述:從相機上移除shader替換。調用這個結束SetReplacementShader效果。
◆ function ResetWorldToCameraMatrix () : void
描述:在場景中讓渲染位置反映相機位置。調用這個結束worldToCameraMatrix的效果。
camera.ResetWorldToCameraMatrix();
◆ function ScreenPointToRay (position : Vector3) : Ray
描述:返回從相機出發,穿過屏幕點的一個射線。產生的射線是在世界空間中,從相機的近裁剪面開始並穿過屏幕position(x,y)像素坐標(position.z被忽略)。屏幕空間以像素定義。屏幕的左下為(0,0);右上是(pixelWidth,pixelHeight)。
//在屏幕視圖中繪製一條線,穿過一個到屏幕左下角200像素的點
function Update () {
var ray = camera.ScreenPointToRay (Vector3(200,200,0));
Debug.DrawRay (ray.origin, ray.direction * 10, Color.yellow);
}
◆ function ScreenToViewportPoint (position : Vector3) : Vector3
描述:從屏幕空間到視口空間變換position。屏幕空間以像素定義。屏幕的左下為(0,0);右上是(pixelWidth,pixelHeight)。 z的位置是以世界單位衡量的刀相機的距離。視口空間是歸一化的並相對於相機的。相機的左下為(0,0);右上是(1,1)。 z的位置是以世界單位衡量的刀相機的距離。
◆ function ScreenToWorldPoint (position : Vector3) : Vector3
描述:從屏幕空間到世界空間變換position。屏幕空間以像素定義。屏幕的左下為(0,0);右上是(pixelWidth,pixelHeight)。 z的位置是以世界單位衡量的到相機的距離。
//在所選相機的近裁剪面上繪製一個黃色的球,在離左下100像素的位置
function OnDrawGizmosSelected () {
var p = camera.ScreenToWorldPoint (Vector3 (100,100,camera.nearClipPlane));
Gizmos.color = Color.yellow;
Gizmos.DrawSphere (p, 0.1);
}
◆ function SetReplacementShader (shader : Shader, replacementTag : string) : void
描述:使相機用shader替換來渲染。參考Rendering with Replaced Shaders。調用該函數後,相機將使用替換的shader來渲染它的視圖。調用ResetReplacementShader來重置為普通渲染。參見:Rendering with Replaced Shaders, ResetReplacementShader, RenderWithShader。
◆ function ViewportPointToRay (position : Vector3) : Ray
描述:返回從相機出發穿過視點的一個射線。產生的射線是在世界空間中,從相機的近裁剪面開始並穿過視口position(x,y)坐標(position.z被忽略)。視口坐標是歸一化的並相對於相機的。相機的左下為(0,0);右上為(1,1)。
//打印相機直接看到的物體名稱
function 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!");
}
}
◆ function ViewportToScreenPoint (position : Vector3) : Vector3
描述:從視口空間到屏幕空間變換position。視口空間是歸一化的並相對於相機的。相機的左下為(0,0);右上為(1,1)。 z的位置是以世界單位衡量的刀相機的距離。屏幕空間以像素定義。屏幕左下為(0,0;右上為(pixelWidth,pixelHeight)。z的位置是以世界單位衡量的到相機的距離。
◆ function ViewportToWorldPoint (position : Vector3) : Vector3
描述:從視口空間到屏幕空間變換position。視口空間是歸一化的並相對於相機的。相機的左下為(0,0);右上為(1,1)。 z的位置是以世界單位衡量的刀相機的距離。屏幕空間以像素定義。屏幕左下為(0,0;右上為(pixelWidth,pixelHeight)。z的位置是以世界單位衡量的到相機的距離。
//在進裁剪面的右上角,針對在場景視圖中選中的相機繪製一個黃色的球
function OnDrawGizmosSelected () {
var p = camera.ViewportToWorldPoint (Vector3 (1,1, camera.nearClipPlane));
Gizmos.color = Color.yellow;
Gizmos.DrawSphere (p, 0.1);
}
◆ function WorldToScreenPoint (position : Vector3) : Vector3
描述:從世界空間到屏幕空間變換position。屏幕空間以像素定義。屏幕的左下為(0,0;右上為(pixelWidth,pixelHeight)。z的位置是
以世界單位衡量的刀相機的距離。
var target : Transform;
function Update () {
var screenPos = camera.WorldToScreenPoint (target.position);
print ("target is " + screenPos.x + " pixels from the left");
}
◆ function WorldToViewportPoint (position : Vector3) : Vector3
描述:從世界空間到視口空間變換position。視口空間是歸一化的並相對於相機的。相機的左下為(0,0);右上為(1,1)。 z的位置是以世界單位衡量的到相機的距離。
//找出target在屏幕的左邊還是右邊
var target : Transform;
function 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!");
}
消息傳遞
◆ function OnPostRender () : void
描述:OnPostRender在相機渲染場景之後調用。這個消息被發送到所有附加在相機上的腳本。
◆ function OnPreCull () : void
描述:OnPreCull在相機開始裁剪場景之前調用。 OnPreCull僅僅在這個過程之間被調用。這個消息被發送到所有附加在相機上的腳本。如果你想改變相機的視覺參數(例如,fieldOfView或者僅僅是變換),就在這裡做這個。場景物體的可見性將給予相機的參數在OnPreCull之後確定。
◆ function OnPreRender () : void
描述:OnPreCull在相機開始渲染場景之前調用。這個消息被發送到所有附加在相機上的腳本。注意如果你在這裡改變了相機的視野參數(例如fieldOfView),它們將只影響下一幀。用OnPreCull代替。
◆ function OnRenderImage (source : RenderTexture, destination : RenderTexture) : void
描述:OnRenderImage在所有渲染完成後被調用,來渲染圖片的後記處理效果(僅限UnityPro)。該函數允許使用給予shader的過濾器來處理最後的圖片。進入的圖片是source渲染紋理。結果是destination渲染紋理。當多個圖片過濾器附加在相機上時,它們序列化的處理圖片,將第一個過濾器的目標作為下一個過濾器的源。
該消息被發送到所有附加在相機上的腳本。參見:UnityPro中的image effects。
◆ function OnRenderObject (queueIndex : int) : void
描述:該函數被用來渲染你自己的物體,使用Graphics.DrawMeshNow或者其他函數。 queueIndex指定用來渲染物體的render queue。可以使用RenderBeforeQueues屬性來指定你想繪製這個物體到哪個渲染隊列。
◆ function OnWillRenderObject () : void
描述:如果物​​體可見,每個相機都會調用OnWillRenderObject。該函數在裁剪過程中被調用。可用該函數創建具有依賴性的渲染紋理。只有在被渲染的物體可見時,才更新該渲染紋理。例如,水組件就使用了這個。 Camera.current將被設置為要渲染這個物體的相機。
類變量
◆ static var allCameras : Camera[]
描述:返回場景中所有啟用的相機。
var count = Camera.allCameras.length;
print ("We've got " + count + " cameras");
◆ static var current : Camera
描述:當前用於渲染的相機,只用於低級的渲染控制(只讀)。多數時候你會使用Camera.main。只有在執行下面時間的時候使用該函數:MonoBehaviour.OnRenderImage, MonoBehaviour.OnPreRender, MonoBehaviour.OnPostRender。
◆ 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。
變量
◆ var force : Vector3
描述:這個力在每幀中應用到剛體。
//在世界坐標系中向上移動剛體。
constantForce.force = Vector3.up * 10;
◆ var relativeFor​​ce : Vector3
描述:力-相對於剛體坐標系統-在每幀中應用。
//向前移動剛體。
constantForce.relativeFor​​ce = Vector3.forward * 10;
◆ var relativeTorque : Vector3
描述:力矩-相對於剛體坐標系統-在每幀中應用。
//繞著其X軸旋轉該物體。
constantForce.relativeTorque = Vector3.right * 2;
◆ var torque : Vector3
描述:這個力矩在每幀中應用到剛體。
//繞著世界的Y軸旋轉該物體。
constantForce.torque = Vector3.up * 2;
繼承的成員
繼承的變量
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 加載新場景時確保目標物體不被自動銷毀。
GUIElement
類,繼承自Behaviour。用於顯示在GUI上的圖片和文本字符串的基類。這個類處理所有GUI元素的基本功能。
函數
◆ function GetScreenRect (camera : Camera = null) : Rect
描述:在屏幕坐標返回GUIElement的包圍矩陣。如果沒有camera被指定,一個填充整個遊戲窗口的相機將被使用。
function Start () {
var r = guiTexture.GetScreenRect ();
print ("This gui element is %d pixel wide.",r.width);
var r = guiText.GetScreenRect();
print ("This gui element is %d pixel wide.",r.width);
}
◆ function HitTest (screenPosition : Vector3, camera : Camera = null) : bool
描述:屏幕上的點在是否在元素內部?如果screenPositon包含在這個GUIElement內部時返回真,screenPosition以屏幕坐標指定,例如由Input.mousePosition屬性返回的值。如果沒有camera被指定,一個填充整個遊戲窗口的相機將被使用。注意,如果位置在元素內部,true將被返回。即使遊戲物體屬於Ignore Raycast層(通常鼠標事件不會發送到Ignore Raycast物體)。參見GUILayer.HitTest。
if (guiTexture.HitTest (Vector3 (360, 450, 0.)))
print ("This gui texture covers pixel 360, 450");
if (guiText.HitTest (Vector3(360, 450, 0.)))
print ("This gui texture covers pixel 360, 450");
繼承的成員
繼承的變量
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 加載新場景時確保目標物體不被自動銷毀。
GUIText
類,繼承自GUIElement。顯示在一個GUI中的文本字符。
變量
◆ var alignment : TextAlignment
描述:文本的對齊。
guiText.alignment = TextAlignment.Left;
◆ var anchor : TextAnchor
描述:文本的錨點。
guiText.anchor = TextAnchor.MiddleCenter;
◆ var font : Font
描述:用於文本的字體。
var font : Font;
guiText.font = font;
◆ var lineSpaceing : float
描述:行間距倍數。這個可以使被定義在字體中行間距增加。
//雙倍行間距
guiText.lineSpacing = 2.0;
◆ var material : Material
描述:用於渲染的Material。賦予一個新的材質來改變渲染處理。改變這個材質來改變渲染的字體。如果賦​​值null到material,將使用內置基本字體。
//改變這個材質顯示綠色文本。
guiText.material.color = Color.green;
參見:font variable
◆ var pixelOffset : Vector2
描述:

_________________
歡迎大家多多交流~

avatar
aaa1218bbb
社員
社員

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

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

回頂端 向下

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


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