遊戲設計社
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:32 pm

GameObject
類,繼承自Object
Unity場景中所有實體的基類。
參見:Component
變量
◆ var active: bool
描述:遊戲物體是激活的?激活/不激活該遊戲物體,
//不激活該遊戲物體.
gameObject.active=false;
◆ var animation: Animation
描述:附加到這個遊戲物體的? ? ? (只讀)(如果沒有為null)
var other: GameObject;
other.animation.Play();
◆ var audio: AudioSource
描述:附加到這個遊戲物體的? ? ? (只讀)(如果沒有為null)
var other: GameObject;
other.audio.Play();
◆ var camera: Camera
描述:附加到這個遊戲物體的相機(只讀)(如果沒有為null)
var other: GameObject;
other.camera.fieldOfView=45;
◆ var collider: Collider
描述:附加到這個遊戲物體的碰撞器(只讀)(如果沒有為null)
var other: GameObject;
other.collider.material.dynamicFriction=1;
◆ var constantForce: ConstantForce
描述:附加到這個遊戲物體的恆定力(只讀)(如果沒有為null)
var other: GameObject;
other.constantForce.relativeFor​​ce=Vector3(0,0,1);
◆ var guiText: GUIText
描述:附加到這個遊戲物體的GUIText(只讀)(如果沒有為null)
var other: GameObject;
other.guiText.text="HelloWorld";
◆ var guiTexture: GUITexture
描述:附加到這個遊戲物體的GUIText(只讀)(如果沒有為null)
◆ var hingeJoint: HingeJoint
描述:附加到這個遊戲物體的HingeJoint(只讀)(如果沒有為null)
var other: GameObject;
other.hingeJoint Spring.targetPosition=70;
◆ var layer: int
描述:遊戲物體所在的層,一個層在[0...32]之間.
Layer可以用來選擇性的渲染或忽略投射.
//設置遊戲物體到忽略投射物體的層上
gameObject.layer=2;
◆ var light: Light
描述:附加到這個遊戲物體的光影(只讀)(如果沒有為null)
var other: GameObject;
other.light.range=10;
◆ var networkView: NetworkView
描述:附加到這個遊戲物體的網絡視(只讀)(如果沒有為null)
var other: GameObject;
other.networkView.RPC("MyFunction",RPCMode.All,"someValue");
◆ var particleEmitter: ParticleEmitter
描述:附加到這個遊戲物體的粒子發射器(只讀)(如果沒有為null)
var other: GameObject;
other.particleEmitter.emite=true;
◆ var renderer: Renderer
描述:附加到這個遊戲物體的渲染器(只讀)(如果沒有為null)
var other: GameObject;
other.renderer.material.color=Color.green;
◆ var rigidbody: Rigidbody
描述:附加到這個遊戲物體的剛體(只讀)(如果沒有為null)
var other: GameObject;
other.rigidbody.AddForce(1,1,1);
◆ var tag: string
描述:這個遊戲物體的標籤。
標籤可以用來標識一個遊戲物體。標籤在使用前必須在標籤管理器中定義。
gameObject.tag="Player";
◆ var transform: Transform
描述:附加到這物體的變換. (如果沒有為null)
var other: GameObject;
other.transform.Translate(1,1,1);
構造函數
◆ static function GameObject(name:string): GameObject
描述:創建一個新的遊戲物體,命名為name.
Transform總是被添加到該遊戲物體.
//創建一個名為"Player"的遊戲物體
//並給他添加剛體和立方體碰撞器.
player=new GameObject("Player");
player.AddComponent("Rigidbody");
player.AddComponent("BoxCollider");
◆ static function GameObject(): GameObject
描述:創建一個新的遊戲物體.
Transform總是被添加到該遊戲物體.
//創建一個沒有名稱的遊戲物體
//並給他添加剛體和立方體碰撞器.
player=new GameObject();
player.AddComponent("Rigidbody");
player.AddComponent("BoxCollider");
◆ static function GameObject(name: string, params components: Type[]): GameObject
描述:創建一個遊戲物體並附​​加特定的組件.
函數
◆ function AddComponent(className: string): Component
描述:添加一個名為className的組件類型到該遊戲物體.
使用這個函數來改變物體的行為。你也可以傳遞腳本的類名來添加腳本到遊戲物體。
有些組件也需要另一些組件存在於同一個遊戲物體上。這個函數會自動添加需要的組
件,例如如果你添加一個HingeJoint也會自動添加一個Rigidbody.
//添加名為FoobarScript的腳本到遊戲物體
gameObject.AddComponent("FoobarScript");
//添加球形碰撞器到遊戲物體
gameObject.AddComponent("FoobarCollider");
◆ function AddComponent(componentType: Type): Component
描述:添加一個名為componentType類型的類到該遊戲物體.
gameObject.AddComponent("FoobarScript");
注意,沒有RemoveComponent(),來移除組件,使用Object.Destroy.
◆ function BroadcastMessage(methodName: string, parameter: object=mull, option:
SendMessageOption=SendMessageOptions.RequireReceiver): void
描述:在這個遊戲物體或其任何子上的每個MonoBehaviour上調用methodName方法。
通過使用零參數,接收方法可以選擇忽略parameter。如果options被設置為
SendMessageOptions.RequireReceiver,那麼如果這個消息沒有被任何組件接收時將打印一個
錯誤消息。
///使用值5調用函數ApplyDamage
gameObject.BroadcastMessage("ApplyDamage",5);
//所有附加到該遊戲物體和其子物體上腳本中的
//ApplyDamage函數都將調用
function ApplyDamage(damage){
print(damage)
}
◆ function CompareTag(tag: string): bool
描述:這個遊戲物體被標籤為tag?
//立即死亡觸發器
//銷毀任何進入到觸發器的碰撞器,這些碰撞器被標記為Player.
function OnTriggerEnter(other: Collider){
if(other.gameObject.CompareTag("Player"))
{
Destroy(other.gameObject);
}
}
◆ function GetComponent(type: Type): bool
描述:如果遊戲物體有type類型的組件就返回它,否則返回null. 你可以使用這個函數
訪問內置的組件或腳本.
GetComponent是防衛其他組件的主要方法。對於Javascript腳本的類型總是腳本顯示
在工程視圖中的名稱。例如:
function Start()
{
var curTransform: Transform;
curTransform=gameObject.GetComponent(Transform);
//這等同於
curTransform=gameObject.transform;
}
function Update() {
//為訪問附加在同一遊戲物體上
//其他腳本內的公用變量和函數
//(ScriptName為Javascript文件名)
var other: ScriptName=gameObject.GetComponent(ScriptName);
//調用該腳本中的DoSomething函數
other DoSomething();
//設置其他腳本實例中的另一個變量
other.someVariable=5;
}
◆ function GetComponent(type: string): Component
描述:返回名為type的組件,如果遊戲物體上附加了一個就返回它,如果沒有返回null.
出於性能的原因最好用Type電影GetComponent而不是一個字符串。然而有時你可能
無法得到類型,例如當試圖從Javascript中訪問c#時。在那種情況下你可以簡單的通過名
稱而不是類型訪問這個組件。例如:
function Update()
{
//為訪問附加在同一遊戲物體上
//其他腳本內的公用變量和函數.
//(ScriptName為Javascript文件名)
var other=gameObject.GetComponent("ScriptName");
//調用該腳本中的DoSomething函數
other.DoSomething().
//設置其他腳本實例中的另一個變量
other.someVariable=5;
}
◆ function GetComponentInChildren(type: Type): Component
描述:返回type類型的組件,這個組件位於這個遊戲物體或任何它的子物體上,使用
深度優先搜索。
只有激活的組件被返回。
var script: ScriptName=gameObject.GetComponentInChildren(ScriptName);
script.DoSomething();
◆ function GetComponents(type: Type): Component[]
描述:返回該遊戲物體上所有type類型的組件。
//在這個遊戲物體和所有它的子物體上
//的HingeJoints上禁用彈簧
var hingeJoints=gameObject.GetComponents(HingeJoint);
for(var joint: HingeJoint in hingeJoints){
joint.useSpring=false;
}
◆ function GetComponentsInChildren(type: Type, includeInactive: bool=false):
Component[]
描述:返回所有type類型的組件,這些組件位於該遊戲物體或任何它的子物體上。
只有激活的組件被返回。
//在這個遊戲物體和所有它的子物體上
//的所有HingeJoints上禁用彈簧
var hingeJoints=gameObject.GetComponentsInChildren(HingeJoint);
for(var joint: HingeJoint in hingeJoints){
joint.useSpring=false;
}
◆ function SampleAnimation(animation: AnimationClip, time: float): void
描述:在一個特定的時間採樣動畫,用於任何動畫目的。
出於性能考慮建議使用Animation接口,這將在給定的time採用animation,任何被動
化的組件屬性都將被這個採樣值替換,多數時候你會使用Animation.Play. SampleAnimation
用於當你需要以無序方式或給予一些特殊的輸入在幀之間跳躍時使用。參見:Aniamtion
//通過採樣每一​​幀或動畫剪輯
varclip.AniamtionClip
function Update()
{
gameObject.sampleAnimation(clip, clip.length-Time.time);
}
◆ function SendMessage(methodName: string, value: object=null, options:
SendMessageOption=SendMessageOption.RequireReceiver): void
描述:在這個遊戲物體上的每個MonoBehaviour上調用methodName方法。
通過使用零參數,接收方法可以選擇忽略參數。如果options被設置為
SendMessageOptions.RequireReceiver,那麼如果這個消息沒有被任何組件接收時將打印一個
錯誤消息。
//使用值5調用函數ApplyDamage
gameObject.SendMessage("ApplyDamage",5);
//所以附加到該遊戲物體上的腳本中的
//ApllyDamage函數都將調用
function.ApplyDamage(damage){
pring(damage);
}
◆ function SendMessageUpwards(methodName: string, value: object=null, options:
SendMessageOption=SendMessageOption.RequireReceiver): void
描述:在這個遊戲物體上的每個MonoBehaviour和該行為的祖先上調用名為methodName
方法。
通過使用零參數,接收方法可以選擇忽略參數。如果options被設置為
SendMessageOptions.RequireReceiver,那麼如果這個消息沒有被任何組件接收時將打印一個
錯誤消息。
//使用值5調用函數ApplyDamage
gameObject.SendMessageUpwards("ApplyDamage",5);
//所以附加到該遊戲物體上的腳本中的
//ApllyDamage函數都將調用
function.ApplyDamage(damage){
pring(damage);
}
◆ function SetActiveRecursion(rotate: bool): void
描述:設置這個物體和所以子遊戲物體的機會狀態。
gameObject.SetActiveRecursion(true);
類方法
◆ static function CreatePrimitive(type: PrimitiveType): GameObject

描述:用幾何的網格渲染器和適當的碰撞器創建一個遊戲物體。
///在場景中創建一個平面,球體和立方體
function Start()
{
GameObject.CreatePrimitive(PrimitiveType.Plane);
var cube=GameObject.CreatePrimitive(PrimitiveType.Cube);
cube.transform.position=Vector3(0,0.5,0);
var sphere=GameObject.CreatePrimitive(PrimitiveType.Sphere);
Sphere.transform.position=Vector3(0,1.5,0);
var capsule=GameObject.CreatePrimitive(PrimitiveType.Capsule);
capsule.transform.position=Vector3(2,1,0);
var cylinder=GameObject.CreatePrimitive(PrimitiveType.Cylinder);
cylinder.transform.position=Vector3(-2,1,0);
◆ static function Find(name: string): GameObject
描述:依據name查找物體並返回它.
如果沒有物體具有名稱name返回null. 如果name包含'/'字符它將像一個路徑名一樣穿
越層次,這個函數只返回激活的遊戲物體。
出於性能考慮建議不要在每幀中都是有該函數,而是在開始時調用並在成員變量中緩存結果
或者用GameObject.FindWithTag.
//這返回場景中名為Hand的遊戲物體.
hand=GameObject.Find("Hand");
//這將返回名為Hand的遊戲物體.
//在層次試圖中Hand也許沒有父!
hand=GameObject.Find("/Hand");
//這將返回名為Hand的遊戲物體.
//它是Arm>Monster的子.
//在層次試圖中Monster也許沒有父!
hand=GameObject.Find("/Monster/Arm/Hand");
//這將返回名為Hand的遊戲物體.
//它是Arm>Monster的子.
//Monster有父.
hand=GameObject.Find("/Monster/Arm/Hand");
這個函數最常用與在加載時自動鏈接引用到其他物體,例如,在MonoBehaviour.Awake
或MonoBehaviour.Start內部. 處於性能考慮你不應該在每幀中調用這個函數,例如
MonoBehaviour.Update內. 一個通用的模式是在MonoBehaviour.Start內將一個遊戲物體賦給
一個變量. 並在MonoBehaviour.Update中使用這個變量.
//在Start中找到Hand並在每幀中選擇它
private var hand: GameObject;
function Start(){
hand=GameObject.Find("/Monster/Arm/Hand");
}
function Update(){
hand.transform.Rotate(0,100*Time.deltaTime,0);
}
◆ static function FindGameObjectsWithTag(tag: string): GameObject[]
描述:返回標記為tag的激活物體列表,如果沒有發現返回null.
標籤在使用前必須在標籤管理中定義。
//在所有標記為"Respawn"的物體位置處
//實例化respawnPrefab

var respawnPrefab: GameObject;
var respawns=GameObject.FindGameObjectsWithTag("Respawn");
for(var respawn in respawns)
Instantiate(respawnPrefab, respawn.position, respawn.rotation);
//打印最接近的敵人的名稱
print(FindClosestEnemy().name);
//找到最近的敵人的名稱
function FindClosestEnemy(): GameObject {
//找到所以標記為Enemy的遊戲物體
var gos: GameObject[]
gos=GameObject.FindGameObjectsWithTag("Enemy");
var closest: GameObject;
var distance=Mathf.Infinity;
var position=transform.position;
//遍歷它們找到最近的一個
for(var go: GameObject in gos){
var diff=(go.transform.position-position);
var curDistance=diff.sqrMagnitude;
if(curDistanceclosest=go;
distance=curDistance;
}
}
return closest;
}
◆ static function FindGWithTag(tag: string): GameObject
描述:返回標記為tag的一個激活遊戲物體,如果沒有發現返回null.
標籤在使用前必須在標籤管理中定義。
//在標記為"Respawn"的物體位置處
//實例化一個respawnPrefab
var respawnPrefab: GameObject;
var respawns=GameObject.FindWithTag("Respawn");
Instantiate(respawnPrefab, respawn.position, respawn.rotation);
繼承的成員
繼承的變量
name 對象的名稱。
hideFlags 該物體是夠被隱藏,保存在場景中或被用戶修改?
繼承的函數
GetInstanceID 返回該物體的實例id。
繼承的類函數
operator bool 這個物體存在嗎?
Instantiate 克隆original物體並返回這個克隆。
Destroy 移除一個遊戲物體,組件或資源。
DestroyImmediate 立即銷毀物體obj。強烈建議使用Destroy代替。
FindObjectsOfType 返回所有類型為type的激活物體。
FindObjectsOfType 返回第一個類型為type的激活物體。
operator== 比較兩個物體是否相同。
operator != 比較兩個物體是否不相同。
DontDestroyOnLoad 加載新場景時確保物體target不被自動銷毀。
這與使用帶有"_MainTex"名稱的GetTextureOffset或SetTextureOffset相同。
//基於時間滾動主紋理
var scrollSpeed​​=0.5;
function Update(){
var offset=Time.time*scrollspeed;
renderer.material.mainTextureOffset=Vector2(offset,0);
}
參見:SetTextureOffset.GetTextureOffset.
◆ var mainTextureScale: Vector2
描述:主材質的紋理縮放。
這與使用帶有"_MainTex"名稱的GetTextureScale或SetTextureScale相同。
function Update(){
var scalex=Mathf.Cus(Timetime)*0.5+1;
var scaleY=Mathf.Sin(Timetime)*0.5+1;
renderer.material.mainTextureScale=Vector2(scaleX,scaleY);
}
參見:SetTextureScale.GetTextureScale.
◆ var passCount: int
描述:在這個材質中有多少個pass(只讀).
這個最常用在使用GL類之間繪製的代碼中(只限於Unity Pro). 例如,Image Effects使用
材質來實現屏幕後期處理. 對材質中的每一個pass(參考SetPass)它們激活並繪製一個全屏
四邊形。
這裡是一個全屏圖形效果的例子,它反轉顏色。添加這個腳本到相機並在播放模式中
查看。
private var mat: Material;
function Start()
{
mat=new Material(
"Shader"Hidden/Invert"{"+
"SubShader{"+
"Pass{"+
"ZTestAlways Cull Off ZWrite Off"+
"SetTexture[_RenderTex]{combine one-texture}"+
"}"+
"{"+
"}"+
);
}
function OnRenderImage(source: RenderTexture, dest: RenderTexture){
RenderTexture.active=dest;
source.SetGlobalShaderProperty("_RenderTex");
GL.PushMatrix();
GL.LoadOrtho();
//對於材質中的每個pass(這裡只有一個)
for(var i=0; i//激活pass
mat.SetPass(i);
//繪製一個四邊形
GL.Begin(GLQUADS);
GL.TEXCoord2(0,0); GL.Vertex3(0,0,0.1);
GL.TEXCoord2(1,0); GL.Vertex3(1,0,0.1);
GL.TEXCoord2(1,1); GL.Vertex3(1,1,0.1);
GL.TEXCoord2(0,1); GL.Vertex3(0,1,0.1);
GL.End();
}
GL.PopMatrix();
}
參見:SetPass函數,GL類,ShaderLab documentation.
◆ var renderQueue: int
描述:這個材質的渲染隊列(只讀)
默認地材質使用shader的render queue,你可以使用這個變量重載該渲染隊列。注意一
旦渲染隊列在該材質上被設置,它將保持這個值,集市以後shader被改變為不同的一個值。
渲染隊列值需要時正的才能正常工作。
參見:Shader.renderQueue, RenderQueue tag.
◆ var shader: Shader
描述:該材質使用的著色器。
//按下空格鍵時,
//在Diffuse和Transparent/Diffuse著色器之間切換
private var shader1=Shader.Find("Diffuse");
private var shader2=Shader.Find("Transparent/Diffuse");
function Update() {
if(Input.GetButtonDown("Jump")){
If(renderer.material.shader--shader1)
rendere.material.shader=shader2;
else
renderer.material.shader=shader1;
}
}
參見:Shader.Find方法,Material, ShaderLab documentation.
構造函數
◆ static function Material(contents: string): Material
描述:從一個源shader字符串創建一個材質。
如果你有一個實現自定義特效的腳本,你需要使用著色器和材質實現所有的圖像設置。
在你的腳本內使用這個函數創建一個自定義的著色器和材質。在創建材質後,使用SetColor,
SetTexture, SetFloat, SetVector, SetMatrix來設置著色器屬性值。
//創建一個附加混合材質並用它來渲染
var color=Color.white;
function Start()
{
var shader Text=
"shader"Alpha Additive"{"+
Properties{_Color("Main Color", Color)=(1,1,1,0)}"+
"SubShader {"+
"Tags {"Queue"="Transparent"}"+
"Pass {"+
"Blend One One ZWrite Off ColorMask RGB"+
"Material {Diffuse[_Color]Ambient[_Color]}"+
"Lighting On"+
"SetTexture[_Dummy]{combine primary double, primary}"+
"}"+
"}"+
"}";
renderer.material=new Material(shaderText);
renderer.material.color=color;
}
參見:ShaderLab documentation.
函數
◆ function CopyPropertiesFormMaterial(mat: Material): void
描述:從其他材質拷貝屬性到這個材質。
◆ function GetColor(propertyName: string): Color
描述:獲取一個命名的顏色值。
數多shader使用超過一個顏色,使用GetColor來獲取propertyName顏色。
Unity內置著色器使用的普通顏色名稱;
"_Color"為材質的主顏色。這也能夠通過color屬性訪問。
"_SpecColor"為材質的反射顏色(在specular/glossy/vertexlit著色器中使用)。
"_Emission"為材質的散射顏色(用在reflective著色器中使用)。
print(renderder.material.GetColor("_SpecColor));
參見:color屬性,SetColor.
◆ function GetFloat(propertyName: string): float
描述:獲取一個命名的浮點值。
參見:SetFloat, Materials, ShaderLab documentation.
◆ function GetMatrix(propertyName: string): Matrix4x4
描述:從該shader中獲取命名矩陣的值。
這個最常用於自定義的shader,其中需要額外的矩陣參數,矩陣參數不需要在材質檢
視面板中公開,但是能夠在腳本中通過SetMatrix和GetMatrix來設置和查詢。
參見:SetMatrix, Materials, ShaderLab documentation.
◆ function GetTag(taf: string, searchFallbacks: bool, defaultValue: string=""): string
描述:獲取材質的shader標籤值。
如果材質的shader沒有定義標籤,defaultValue被返回。
如果searchFallbacks為true那麼這個函數將在所有的子shader和所有後備中查找標籤。
如果searchFallbacks為false只在當前查詢的子shader中查找這個標籤。
使用不搜索後備的GetTag可以檢視現在使用的是哪個子shader:添加一個自定義具有
不同值的標籤到每個子shader,然後再運行時查詢這個值。例如,Unity Pro的水使用這個
函數來檢測shader何時退化為沒有反射,然後關閉反射相機。
◆ function GetTexture(propertyNmae: string): Texture
描述:獲取一個命名紋理。
數多shader使用超過一個紋理。使用GetTexture來獲取propertyName紋理。
Unity內置著色器使用的普通紋理名稱;
"_MainTex"為主散射紋理. 這也能夠通過mainTexture屬性訪問。
"_BumpMap"為法線貼圖。
"_LightMap"為光照貼圖。

"_Cube"為發射立方體貼圖。
function Start(){
var tex=renderer.material.GetTexture("_BumpMap");
if(tex)
print("My bumpmap is "+ tex.name);
else
print("I have no bumpmap!");
}
參見:mainTexture屬性,SetTexture.
◆ function GetTextureOffset(propertyName: string): Vector2
描述:獲取紋理propertyName的位置偏移。
Unity內置著色器使用的普通紋理名稱;
"_MainTex"為主散射紋理. 這也能夠通過mainTextureOffset屬性訪問。
"_BumpMap"為法線貼圖。
"_LightMap"為光照貼圖。
"_Cube"為發射立方體貼圖。
參見:mainTextureOffset屬性,SetTextureOffset.
◆ function GetTextureScale(propertyName: string): Vector2
描述:獲取紋理propertyName的位置縮放。
Unity內置著色器使用的普通紋理名稱;
"_MainTex"為主散射紋紋理. 這也能夠通過mainTextureOffset屬性訪問。
"_BumpMap"為法線貼圖。
"_LightMap"為光照貼圖。
"_Cube"為發射立方體貼圖。
參見:mainTextureScale屬性,SetTextureScale.
◆ function GetVector(propertyName: string): Vector4
描述:獲取一個命名向量的值。
在Unity shader中四組件向量和顏色是相同的。 GetVector does exactly the same as
GetColor just the input data type is different(xyzw in the vector becomes rgba in the color).
See Also: GetColor, SetVector.
◆ function HasProperty(propertyName: string): bool
描述:檢查材質的shader是否有給定名稱的屬性。
參見:mainTextureScale屬性,SetTextureScale.
◆ function Lerp(Start: Material, end: Material, t: float): void
描述:在兩個材質間插值屬性。
使一個材質的所有顏色和浮點值從start到end基於t來插值。
當t為0,所有的值為start。
當t為1,所有的值為end。
通常你想要插值的兩個材質是相同的(使用相同的著色器和紋理)除了顏色和浮點值。
然後你使用Lerp來混合它們。
//混合兩個材質
var material1: Material;
var material2: Material;
var duration=2.0;
function Start()
{
//首先使用第一個材質
renderer.material=material[];
}
function Update()
{
//隨著時間來回變化材質
var lerp=Mathf.PingPong(Time.time, duration)/duration;
renderer.material.Lerp(material1, materail2, lerp);
}
參見:Material.
◆ function SetColor(propertyName: string, color: Color): void
描述:設置一個命名的顏色值。
數多shader使用超過一個顏色。使用SetColor來獲取propertyName顏色.
Unity內置著色器使用的普通顏色名稱;
"_Color"為材質的主顏色. 這也能夠通過color屬性訪問.
"_SpecColor"為材質的反射顏色(在specular/glossy/vertexlit著色器中使用).
"_Emission"為材質的散射顏色(用在vertexlit著色器中).
"_ReflectColor"為材質的反射顏色(用在reflective著色器中).
function Start(){
//設置Glossy著色器這樣可以使用反射顏色
renderer.material.shader=Shader.Find("Glossy");
//設置紅色的高光
renderer.material.SetColor("_SpecColor", Color.red);
}
參見:color屬性,GetColor.
◆ function SetFloat(propertyName: string, value: float): void
描述:設置一個命名的浮點值。
function Start(){
//在這個材質上使用Glossy著色器
renderer.material.shader=Shader.Find("Glossy");
}
function Start(){
//動畫Shininess值
var shininess=Mathf.PingPong(Time.time, 1.0);
renderer.material.SetFloat("_Shininess, shininess);
}
參見:GetFloat, Materials, ShderLab documentation.
◆ function SetMatrix(propertyName: string, matrix: Matrix4x4): void
描述:為一個shader設置一個命名矩陣。
這個最常用於自定義的shader,其中需要額外的矩陣參數,矩陣參數不需要在材質檢
視面板中公開,但是能夠在腳本中通過SetMatrix和GetMatrix來設置和查詢。
var rotateSpeed​​=30;
var texture: Texture;
function Start(){
//用於一個著色器創建一個新的材質
//這個著色器旋轉紋理
var m=new Material
(
"Shader"Rotation Texture"{"+
"Properties{_Main Tex("Base",2D)="white"{}}"+
"SubShader{"+
"Pass{"+
"Material{Diffuse(1,1,0)Ambient(1,1,1,0)}"+
"Lighting On"+
"SetTexture[_MainTex]{"+
"matrix[_Rotation]"+
"combing texture*primary double.texture"+
"{"+
"}"+
"{"+
"}"
);
m.mainTexture=texture;
renderer.material=m;
}
function Update()
}
//為這個著色器構建一個旋轉矩陣並設置它
var rot=Quaternion, Euler(0,0,Time.time*rotateSpeed​​);
var m=Matrix4x4.TRS(Vector3.zero,rot.Vector3(1,1,1));
renderer.material.SetMatrix(*_Rotation", m);
}
參見:GetMatrix,Materials,ShaderLab documentation.
◆ function SetPass(pass: int): bool
描述:為渲染激活給定的pass.
傳遞從零開始最大到passCount(但不包含)的索引。
這個最常用在使用GL類直接繪製的代碼中(只能Unity Pro)。例如,Image Effects使用
材質來實現屏幕後期處理,對材質中的每一個pass它們激活並繪製一個全屏四邊形。
如果SetPass返回假,你不應該渲染任何東西。
這裡是一個全屏圖像效果的例子,它反轉顏色,添加這個腳本到相機並在播放模式中
查看。
private var mat: Material;
function Start()
{
mat=new Material(
"Shader"Hidden/Invert"{"+
"SubShader{"+
"Pass{"+
"ZTest Always Cull Off ZWrite Off"+
"SetTexture[_RenderTex]{combine one-texture}"+
"}"+
"}"+
"}"
);
}
function OnRenderImage(source: RenderTexrure, dest: RenderTexture){
RenderTexture.active=dest;
source.SetGlobalShaderProperty("_RenderTex");
GL.PushMatrix();
GL.LoadOrtho();
//激活第一個pass(這裡我們知道它只有僅有的pass)
mat.SetPass(0);
//繪製一個四邊形
GL..Begin(GL.QUADS);
GL..TexCoord2(0,0);GL..Vertex3(0,0,0.1);

GL..TexCoord2(1,0);GL..Vertex3(1,0,0.1);
GL..TexCoord2(1,1);GL..Vertex3(1,1,0.1);
GL..TexCoord2(0,1);GL..Vertex3(0,1,0.1);
GL..End();
GL.PopMatrix();
}
參見:passCount屬性,GL類,ShaderLab documentation.
◆ function SetTexture(propertyName: string, texture: Texture): void
描述:設置一個命名紋理.
數多shader使用超過一個紋理。使用SetTexture來改變propertyName紋理。
Unity內置著色器使用的普通紋理名稱:
"_MainTex"為主射散紋理,這也能夠通過mainTexture屬性訪問.
"_BumapMap"為法線貼圖.
"_LightMap"為光照貼圖.
"_Cub"為放射立方體貼圖.
//基於實際滾動主紋理
var scrollSpeed​​=0.5;
function Update(){
var offset=Time.time*scrollSpeed​​;
rendereer.material.SetTextureOffset("_MatrixTex", Vector2(offset,0));
}
參見:mainTextureOffset屬性,GetTextureOffset.
◆ function SetTextureScale(propertyName: string, scale: Vector2): void
描述:設置紋理propertyName的位置縮放.
Unity內置著色器使用的普通紋理名稱:
"_MainTex"為主射散紋理,這也能夠通過mainTexture屬性訪問.
"_BumapMap"為法線貼圖.
"_LightMap"為光照貼圖.
"_Cub"為放射立方體貼圖.
參見:mainTextureScale屬性,GetTextureScale.
function Update()
{
//以一個流行的放式動畫主紋理縮放!
var scaleX=Mathf.Cos(Time.time)*0.5+1;
var scaleY=Mathf.Sin(Time.time)*0.5+1;
rendereer.material.SetTextureScale("_MainTex", Vector2(ScaleX,ScaleY));
}
◆ function SetVector(propertyName: string, Vector: Vector4): void
描述:設置一個命名的向量值.
在Unity shader中四組件向量和顏色是相同的。 SetVector與SetColor完全相同,僅僅
是輸入數據類型不同(向量的xyzw變為顏色的rgba).
參見:SetColor, GetVector.
繼承的成員
繼承的變量
name 對象的名稱。
hideFlags 該物體是夠被隱藏,保存在場景中或被用戶修改?
繼承的函數
GetInstanceID 返回該物體的實例id。
繼承的類函數
operator bool 這個物體存在嗎?
Instantiate 克隆original物體並返回這個克隆。
Destroy 移除一個遊戲物體,組件或資源。
DestroyImmediate 立即銷毀物體obj。強烈建議使用Destroy代替。
FindObjectsOfType 返回所有類型為type的激活物體。
FindObjectsOfType 返回第一個類型為type的激活物體。
operator== 比較兩個物體是否相同。
operator != 比較兩個物體是否不相同。
DontDestroyOnLoad 加載新場景時確保物體target不被自動銷毀。
Mesh
類,繼承自Object
一個類允許你從腳本中創建或修改網格。
網格包含頂點和多個三角形數組。參考Procedural example project獲取石油網格接口的
例子。
三角數組只是頂點索引數組;三個索引為一個三角形。
對於每個頂點可以有一個法線,兩個紋理坐標,顏色和切線。這些都是可選的並可以
去掉。所有的頂點信息被存儲相同尺寸的不同數組中,因此如果的網格有10個頂點,你
應該有大小為10的數組用於法線和其他屬性。
可能有三件事,你可能想要使用可調整的網格。
1. 從頭開始構建網格:應該總是按照如下的順序:1)賦值vertices2)賦值triangles
function start(){
var mesh=new Mesh();
GetComponent(MeshFilter).mesh=mesh;
mesh.vertices=newVertices;
nesh.uv=newUV;
mesh.triangles=newTriangles;
}
2. 沒幀修改頂點屬性:1)獲取頂點,2)修改它們,3)將它們賦值回網格.
function Update(){
var mesh: mesh=GetComponent(MeshFilter).mesh;
var vertices=newVertices;
var normals=mesh.normals;
for(var i=0,i{
vertices[i]+=mormals{i}*Mathf.Sin(Time.time);
}
mesh.vertices=vertices;
}
3. 連續地改變網格三角形和頂點:1)調用Clear開始刷心,2)賦值頂點和其他屬性,3)賦
值三角形索引.
在賦值新的頂點或三角形時調用Clear是重要的。 Unity總是檢查提供的三角形索引,
它們是否沒有超出頂點邊界。電影Clear然後賦值頂點然後三角形,確保沒你沒有超出數據邊
界。
function Update(){
var mesh: mesh=GetComponent(MeshFilter).mesh;
mesh.Clear();
mesh.vertices=newVertices;
nesh.uv=newUV;
mesh.triangles=newTriangles;
}
變量
◆ var bindposes: Matrix4x4[]
描述:綁定的姿勢。每個索引的綁定姿勢使用具有相同的索引的骨骼。
當骨骼在綁定姿勢中時,綁定姿勢是骨骼變​​換矩陣的逆。
function Start(){
gameObject.AddComponent(Animation);
gameObject.AddComponent(SkinnedMeshRenderer);
var renderer: SkinnedMeshRenderer=GetComponent(SkinnedMeshRenderer);
//構建基本網格
var mesh: Mesh-new Mesh();
mesh.vertices=[Vector3(-1,0,0), Vector3(1,0,0), Vector3(-1,5,0), Vector3(1,5,0)];
mesh.uv=[Vector2(0,0), Vector2(1,0), Vector2(0,1), Vector2(1,1)];
mesh.triangles=[0,1,2,1,3,2];
mesh.RecalculateNormals();
//賦網格到網格過濾器和渲染器
renderer.material=new Material(Shader.Find("Diffuse"));
//賦骨骼權值到網格
//使用兩個骨骼. 一個用於上部的頂點,一個用於下部的頂點
var weights=new BoneWeight[4];
weights[0].boneIndex0=0;
weights[0].weight0=1;
weights[1].boneIndex0=0;
weights[1].weight0=1;
weights[2].boneIndex0=1;
weights[2].weight0=1;
weights[3].boneIndex0=1;
weights[3].weight0=1;
mesh.boneWeights=weights;
//創建骨骼變換並綁定姿勢
//一個骨骼在頂部一個在底部
var bones=new Transform[2];
var bindPoses=new Matrx4x4[2];
bones[0]=new GameObject("Lower").transform;
bones[0]parent=transform;
//設置相對於父的位置
bones[0].localRotation=Quaternion.identity;
bones[0].localPosition=Vector3.zero;
//綁定姿勢是骨骼的逆變換矩陣
//在這種情況下我們也要使這個矩陣市相對與根的
//這樣我們就能夠隨意移動根物體了
bindPose[0]=bones[0].worldToLocalMatrix*transform.localToWorldMatrix;
bones[1]=new GameObject("Upper").transform;
bones[1]parent=transform;
//設置相對於父的位置
bones[1].localRotation=Quaternion.identity;
bones[1].localPosition=Vector3.(0,5,0);
//綁定姿勢是骨骼的逆變換矩陣
//在這種情況下我們也要使這個矩陣市相對與根的
//這樣我們就能夠隨意移動根物體了
bindPose[1]=bones[1].worldToLocalMatrix*transform.localToWorldMatrix;
.mesh.bindposes=bindPoses;
.//賦值骨骼並綁定姿勢
.renderer.bones=bones;
.renderer.sharedMesh=mesh;
//賦值一個簡單的揮動動畫到底部的骨骼
var curve=new AnimationCurve();
curve.keys=[new Keyframe(0,0,0,0:,new Keyframe(1,3,0,0),new Keyframe(2,0.0,0,0,)];
//使用曲線創建剪輯
var clip=new AnimationClip();
clip.SetCurve("Lower", Transform,"m_LocalPosition.z", curve);
//添加並播放剪輯
animation.AddClip(clip, "test");
animation.Play("test"); }
◆ var boneWeights: BondWeight[]
描述:每個頂點的骨骼權重
數組的大小與vertexCount相同或為空。
每個頂點可以被至多4個不同骨骼影響。 4個骨骼的權值加和應該為1,
function Start(){
gameObject.AddComponent(Animation);
gameObject.AddComponent(SkinnedMeshRenderer);
var renderer: SkinnedMeshRenderer=GetComponent(SkinnedMeshRenderer);
//構建基本網格
var mesh: Mesh-new Mesh();
mesh.vertices=[Vector3(-1,0,0), Vector3(1,0,0), Vector3(-1,5,0), Vector3(1,5,0)];
mesh.uv=[Vector2(0,0), Vector2(1,0), Vector2(0,1), Vector2(1,1)];
mesh.triangles=[0,1,2,1,3,2];
mesh.RecalculateNormals();
//賦網格到網格過濾器和渲染器
renderer.material=new Material(Shader.Find("Diffuse"));
//賦骨骼權值到網格
//使用兩個骨骼. 一個用於上部的頂點,一個用於下部的頂點
var weights=new BoneWeight[4];
weights[0].boneIndex0=0;
weights[0].weight0=1;
weights[1].boneIndex0=0;
weights[1].weight0=1;
weights[2].boneIndex0=1;
weights[2].weight0=1;
weights[3].boneIndex0=1;
weights[3].weight0=1;
mesh.boneWeights=weights;
//創建骨骼變換並綁定姿勢
//一個骨骼在頂部一個在底部
var bones=new Transform[2];
var bindPoses=new Matrx4x4[2];
bones[0]=new GameObject("Lower").transform;
bones[0]parent=transform;
//設置相對於父的位置
bones[0].localRotation=Quaternion.identity;
bones[0].localPosition=Vector3.zero;
//綁定姿勢是骨骼的逆變換矩陣
//在這種情況下我們也要使這個矩陣市相對與根的
//這樣我們就能夠隨意移動根物體了
bindPose[0]=bones[0].worldToLocalMatrix*transform.localToWorldMatrix;
bones[1]=new GameObject("Upper").transform;
bones[1]parent=transform;
//設置相對於父的位置
bones[1].localRotation=Quaternion.identity;
bones[1].localPosition=Vector3.(0,5,0);
//綁定姿勢是骨骼的逆變換矩陣
//在這種情況下我們也要使這個矩陣市相對與根的
//這樣我們就能夠隨意移動根物體了
bindPose[1]=bones[1].worldToLocalMatrix*transform.localToWorldMatrix;
mesh.bindposes=bindPoses;
//賦值骨骼並綁定姿勢
renderer.bones=bones;
renderer.sharedMesh=mesh;
//賦值一個簡單的揮動動畫到底部的骨骼
var curve=new AnimationCurve();
curve.keys=[new Keyframe(0,0,0,0:,new Keyframe(1,3,0,0),new Keyframe(2,0.0,0,0,)];
//使用曲線創建剪輯
var clip=new AnimationClip();
clip.SetCurve("Lower", Transform,"m_LocalPosition.z", curve);
//添加並播放剪輯
animation.AddClip(clip, "test");
animation.Play("test");
}
◆ var bounds: Bounds
描述:網格的包圍體。
這個是在網格的局部坐標空間中軸對齊的包圍盒(不會受到變換的影響)參考世界空
間中的Renderer.Bounds屬性。
//產生一個屏幕UV坐標,這個與網格尺寸無關
//通過縮放包圍盒尺寸的頂點
function Start(){
var mesh: Mesh=GetComponent(MeshFilter).mesh;
var.vertices=mesh vertices;
var.uv=new Vector2[vertices.length];
var.bounds=mesh.bounds;

for (var i=0,iuvs[i]=Vector2(vertices[i].x/bounds.size.x,vertices[i].z/bounds.size.x);
}
mesh.uv=uvs;
}
參見:Bounds類,Renderer.Bounds屬性.
◆ var Colors: Color[]
描述:返回網格的頂點顏色。
如果沒有頂點顏色可用,一個空的數組將被返回。
//設置y=0的頂點位紅色,y=1的訂單為綠色.
//(注意大多數設置著色器不顯示頂點顏色,你可以
//使用例如,一個粒子渲染器來查看頂點顏色)
function Start(){
var mesh: Mesh=GetComponent(MeshFilter).mesh;
var.vertices=mesh vertices;
var.color=new Color[Vertices.Length];
for (var i=0,icolors[i]=Color.Lerp(Colored, Color.green, vertices[i].y);
}
mesh.colors=colors;
}
◆ var normals: Vectors[]
描述:網格的法線。
如果網格布包含發行,一個空的數組將被返回。
//以speed每幀旋轉法線
var speed=100.0;
function Update(){
var mesh: Mesh=GetComponent(MeshFilter).mesh;
var.normals=mesh.normals;
var rotation=Quaternion.AngleAxis(Time.deltaTime*speeed, Vector3.up);
for (var i=0,inormals[i]=rotation*normals[i];
}
mesh.normals=normals;
}
◆ var subMeshCount: int
描述:子網格數。每個材質有一個不同的三角形列表。
◆ var tangents: Vector4[]
描述:網格的切線。
切線主要用於bumpmap shader中。切線是一個單位長度向量,a沿著網格表面指向水平
(U)紋理方向。 Unity中的切線是由Vector4表示的,xyz組件定義向量,如果需要w用來翻
轉副法線。
Unity通過計算向量和切線之間的叉乘來計算表面的向量(副法線),並乘以
tangne​​nt.w.因此w應該是1或-1。
如果你想在網格上使用凹凸貼圖著色器,你需要自己計算切線。賦值normals或使用
RecalculateNormals之後計算切線。
◆ var tirangles: int[]
描述:一個數組包含網格中所有的三角形。

這個數組時包含頂點數組索引的三角形列表。三角形數組的大小總是3的倍數。頂點
可以通過簡單地索引同一頂點來共享。如果網格包含多個子網格(材質),三角形列表將包
含所有子網格的所有三角形。建議賦值頂點數組之後賦值一個三角形數組,以避免越界錯
誤。
//構建一個網格,這個網格包含一個帶有uv的三角形.
function start(){
gameObject.AddComponent("MeshFilter);
gameObject.AddComponent("MeshRenderer);
var.mesh: Mesh=GetComponent(MeshFilter).mesh;
mesh.Clear();
mesh.vertices=[Vector3(0,0,0), Vector3(0,1,0), Vector3(1,1,0)];
mesh.uv=[Vector2(0,0), Vector2(0,1), Vector2(1,1)];
mesh.triangles=[0,1,2];
}
◆ var uv: Vector2[]
描述:網格的基本紋理坐標。
//產生一個平面uv坐標
function start(){
var mesh: Mesh=GetComponent(MeshFilter).mesh;
var vertices=mesh.vertices;
var uvs=new Vector2[vertices.lenghth];
fpr(var i=0;iuvs[i]=Vector2(vertices[i].x, vertices[i].z);
}
mesh.uv=uvs;
}
◆ var uv2: Vector2[]
描述:網格的第二個紋理坐標集,如果提供。
//為第二個uv集產生一個平面uv坐標
function start(){
var mesh: Mesh=GetComponent(MeshFilter).mesh;
var vertices=mesh.vertices;
var uvs=new Vector2[vertices.lenghth];
fpr(var i=0;iuvs[i]=Vector2(vertices[i].x, vertices[i].z);
}
mesh.uv2=uvs;
}
◆ var vertexCount: int
描述:網格頂點數(只讀)
function start(){
var mesh=GetComponent(MeshFilter).sharedMesh;
print(mesh.vertexCount);
}
◆ var vertices: Vector3[]int
描述:返回一個頂點位置的拷貝或賦值一個新的頂點位置數組。
網格的頂點數可,以通過賦值一個不同數量的頂點數組來改變。注意,如果你調整了
頂點數組,那麼所有其他頂點屬性(法線,顏色,切線,UV)將被自動地調整大小。設置
頂點時,如果沒有頂點被賦值到這個網格那麼RecalculateBounds將自動被調用。
function start(){
var mesh=GetComponent(MeshFilter).sharedMesh;
var vertics=mesh vertices;

fpr(var i=0;i{
vertices[i]+=Vector3.up*Time.deltaTime;
}
mesh.vertices=vertices;
mesh.RecalculateBounds();
}
構造函數
◆ static function Mesh(): Mesh
描述:創建一個空的網格
//創建一個新的網格並將它賦給網格過濾器
function Start(){
var mesh=new Mesh();
GetComponent(MeshFilter).mesh=mesh;
}
函數
◆ function Clear(): void
描述:清除所有的頂點數據和所有的三角形索引。
你應該在重建triangles數組之間調用這個函數。
◆ function GetTriangles(submesh: int): int[]
描述:返回子網格的三角形列表。
一個子網格僅僅是一個獨立的三角形列表。當網格渲染器使用多個材質時,你應該確保
有盡可能多的子網格作為材質。
◆ function Optimize(): void
描述:優化網格以便顯示。
這個操作將花費一點時間但是會使幾何體顯示的更快。例如,它從三角形中產生三角形
帶。如果你從頭創建一個網格並且想在運行的時候取得更好的運行時性能而不是較高的加
載時間,你應該使用它。它三角帶化你的模型為每個頂點緩存位置優化三角形,對於導
載時間,你應該使用它。它三角帶化你的模型並為每個頂點緩存位置優化三角形。對於導
入的模型你不應該調用這個,因為導入流水線已經為你做了。
function Start(){
var mesh: Mesh=GetComponent(MeshFilter).mesh;
mesh.Optimize();
}
◆ function RecalculateBounds(): void
描述:從頂點重新計算網格的包圍提。
修改頂點之後你應該調用這個函數以確保包圍體式正確的。賦值三角形將自動計算
這個包圍體。
function Start(){
var mesh: Mesh=GetComponent(MeshFilter).mesh=mesh;
mesh.RecalculateBounds();
}
◆ function RecalculateNormals(): void
描述:從三角形和頂點重新計算網格的法線。
在調整頂點之後通常需要更新法線以便反映這個改變。法線是從所有共享的頂點來計
算的。導入的網格有時並不共享所有頂點。例如在UV法線接縫處的點將被分割成兩個點。因
而RecalculateNormals函數在uv接縫處將創建不平滑的法線,RecalculateNormals不會自動
產生切線,因此bumpmap著色器在調用RecalculateNormals之後不會工作。然而你可以提
取你自己的切線。
function Start(){
var mesh: Mesh=GetComponent(MeshFilter).mesh;
mesh.RecalculateNormals();
}
◆ function SetTriangles(triangles: int[], submesh: int): void
描述:為子網格設置多邊形列表
一個子網格僅僅是一個獨立的三角形列表。當網格渲染器使用多個材質時,你應該確保
有盡可能多的子網格作為材質。建議賦值頂點數組之後賦值一個三角形數組,以避免越界
錯誤。
繼承的成員
繼承的變量
name 對象的名稱
hideFlages 該物體是夠被隱藏,保存在場景中或被用戶修改?
繼承的函數
GetInstanceID 返回該物體的實例id。
繼承的類函數
operator bool 這個物體存在嗎?
Instantiate 克隆original物體並返回這個克隆。
Destroy 移除一個遊戲物體,緩存或資源。
DestroyImmediate 立即銷毀物體obj,強烈建議使用Destroy代替。
FindObjectsOfType 返回所有類型為type的激活物體。
FindObjectsOfType 返回第一個類型為type的激活物體。
operator== 比較兩個物體是否相同。
operator != 比較連個物體是否不相同。
DomDestroyOnLoad 卸載場景時確保物體target不被自動銷毀。
PhysicsMaterial
類,繼承自Object
載體材質描述:如何處理物體碰撞(摩擦,彈性)
參見:Collider
變量
◆ var bounceCombine: PhysicsMaterialCombine
描述:決定彈力是如何組合的。
傳統上彈性屬性依賴於兩種相互接觸的材質的組合。然而在遊戲中這是不切實的。可以
使用組合模式來調整兩個材質的彈性如何被組合。
collider.material.bounceCombine=FrictionCombineMode.Average;
◆ var bouncyness: float
描述:表面的彈力如何? 0值沒有彈力。 1值沒有能力損失的反彈。
collider.bouncyness=1;
◆ var dynamicFriction: float
描述:移動時候使用的摩擦力。這個值在0到1之間。
0值就像冰,1像橡膠。
collider.dynamicFriction=1;
◆ var dynamicFriction2: float
描述:如果有向摩擦力被啟用,dynamicFriction2將沿著FrictionDirection2使用。
collider.physicMaterial.dynamicFriction2=0;
◆ var frictionCombine: PhysicMaterialCombine
描述:決定摩擦力是如何組合的。
傳統上摩擦力屬性依賴於兩種相互接觸的材質的組合。然而在遊戲中這是不切實的。
你可以使用組合模式來調整兩個材質的摩擦力如何被組合。
collider.material.frictionCombine=physicMaterialCombine.Average;
◆ var frictionDirection2: Vector3
描述:有向性方向。如果這個矢量是非零,有向摩擦力被啟用。
dynamicFriction2和staticFriction2將沿著frictionDirection2被應用。有向性方向相對於
碰撞器的局部坐標系統。
//使碰撞向前滑動而不是側滑
collider.physicMaterial.frictionDirection2=Vector3.forward;
collider.physicMaterial.dynamicFriction2=0;
collider.physicMaterial.dynamicFriction=1;
◆ var staticFriction: float
描述:當一個物體靜止在一個表面上時使用的摩擦力。通常是0到1之間的值。
0值就像冰,1像橡膠。
collider.staticFriction=1;
◆ var staticFriction2: float
描述:如果有向摩擦力被啟用,staticFriction2將沿著frictionDirection2使用。
collider.physicMaterial.staticFriction2=0;
構造函數
◆ static function PhysicMaterial(): PhysicMaterial
描述:創建一個新的材質
通常只使用collider.material和直接修改附加的材質更加簡單。
//創建一個新的材質並附加它
function Start(){
var material=new PhysicMaterial();
material.dynamicfriction=1;
collider.material=material;
}
◆ static function PhysicMaterial(name: string): PhysicMaterial
描述:創建一個新的材質,命名為name.
//創建一個新的材質並附加它
function Start(){
var material=new PhysicMaterial("New Material");
material.dynamicfriction=1
collider.material=material;
}
繼承的成員
繼承的變量
name 對象的名稱
hideFlages 該物體是夠被隱藏,保存在場景中或被用戶修改?
繼承的函數
GetInstanceID 返回該物體的實例id。
繼承的類函數
operator bool 這個物體存在嗎?
Instantiate 克隆original物體並返回這個克隆。
Destroy 移除一個遊戲物體,緩存或資源。
DestroyImmediate 立即銷毀物體obj,強烈建議使用Destroy代替。
FindObjectsOfType 返回所有類型為type的激活物體。
FindObjectsOfType 返回第一個類型為type的激活物體。
operator== 比較兩個物體是否相同。
operator != 比較連個物體是否不相同。
DomDestroyOnLoad 卸載場景時確保物體target不被自動銷毀
ScriptableObject
類,繼承自Object
如果你想創建一個不需要附加到遊戲物體的對象,可以從這個類繼承、
這對於那些只存儲數據資源是組有用的。
消息傳遞
◆ function OnDisable(): void
描述:當可編輯物體超出範圍時調用這個函數
當物體被銷毀的時候這個函數也會被調用並可以用於任何清理的代碼。當腳本在編譯
結束後被加載時,OnDisable將被調用,然後腳本加載完成後OnDisable將被調用。
function OnDisable()
{
print(:script was removed");
}
OnDisable不能作為一個coroutine.
◆ function OnEnable(): void
描述:物體被加載時調用該函數
function OnEnable()
{
print(:script was enabled");
}
OnEnable不能作為一個coroutine.
類方法
◆ static function CreateInstance(className: string): ScriptableObject
描述:使用className創建一個可編程物體的實例.
繼承的成員
繼承的變量
name 對象的名稱
hideFlages 該物體是夠被隱藏,保存在場景中或被用戶修改?
繼承的函數
GetInstanceID 返回該物體的實例id。
繼承的類函數
operator bool 這個物體存在嗎?
Instantiate 克隆original物體並返回這個克隆。
Destroy 移除一個遊戲物體,緩存或資源。
DestroyImmediate 立即銷毀物體obj,強烈建議使用Destroy代替。
FindObjectsOfType 返回所有類型為type的激活物體。
FindObjectsOfType 返回第一個類型為type的激活物體。
operator== 比較兩個物體是否相同。
operator != 比較連個物體是否不相同。
DomDestroyOnLoad 卸載場景時確保物體target不被自動銷毀
GUISkin
類,繼承自ScriptableObject
變量
◆ var box: GUIStyle
描述:用於GUI.Box控件的缺省風格
◆ var button: GUIStyle
描述:用於GUI.Button控件的缺省風格
◆ var GUIStyle[i]:
描述:
◆ var font: Font
描述:用於所有風格的缺省字體。
◆ var horizo​​ntalScrollbar: GUIStyle
描述:
◆ var horizo​​ntalScrollbarLeftButton: GUIStyle
描述:
◆ var horizo​​ntalScrollbarRightButton: GUIStyle
描述:
◆ var horizo​​ntalScrollbarThumb: GUIStyle
描述:
◆ var horizo​​ntalSlider: GUIStyle
描述:用於GUI.Horizo​​ntalSlider控件背景部分的缺省風格.
用於決定滑塊可拖動區域尺寸的填充屬性。
◆ var horizo​​ntalSliderThumb: GUIStyle
描述:用於GUI.Horizo​​ntalSlider控件中可拖動滑塊的缺省風格.
用於決定滑塊尺寸的填充屬性。
◆ var label: GUIStyle
描述:用於GUI.Label控件的缺省風格.
◆ var scrollView: GUIStyle
描述:
◆ var settings: GUISettings
描述:使用這個皮膚的空間如何表現得通用設置。
◆ var textArea: GUIStyle
描述:用於GUI.TextArea控件的缺省風格。
◆ var textField: GUIStyle
描述:用於GUI.textField控件的缺省風格。
◆ var toggle: GUIStyle
描述:用於GUI.toggle控件的缺省風格。
◆ var verticalScrollbar: GUIStyle
描述:
◆ var verticalScrollbarDownButton: GUIStyle
描述:
◆ var verticalScrollbarThumb: GUIStyle
描述:
◆ var verticalScrollbarUpbutton: GUIStyle
描述:
◆ var verticalSlider: GUIStyle
描述:用於GUI.VerticalSlider控件背景部分的缺省風格.
用於決定滑塊可拖動區域尺寸的填充屬性。
◆ var verticalSliderThumb: GUIStyle
描述:用於GUI.VerticalSlider控件中可拖動滑塊的缺省風格.
用於決定滑塊尺寸的填充屬性。
◆ var window: GUIStyle
描述:用於GUI.Windows控件的缺省風格。
函數
◆ function FindStyle(styleName: string): GUIStyle
描述:獲取一個命名GUIStyle.
繼承的成員
繼承的變量
name 對象的名稱
hideFlages 該物體是夠被隱藏,保存在場景中或被用戶修改?
繼承的函數
GetInstanceID 返回該物體的實例id。
繼承的消息傳遞
OnEnable 物體被加載時調用該函數
OnDisable 可用編程物體超出範圍時調用這個函數
繼承的類函數
CreateInstance 使用className創建一個可編程物體的實例。
operator bool 這個物體存在嗎?
Instantiate 克隆original物體並返回這個克隆。
Destroy 移除一個遊戲物體,緩存或資源。
DestroyImmediate 立即銷毀物體obj,強烈建議使用Destroy代替。
FindObjectsOfType 返回所有類型為type的激活物體。
FindObjectsOfType 返回第一個類型為type的激活物體。
operator== 比較兩個物體是否相同。
operator != 比較連個物體是否不相同。
DomDestroyOnLoad 卸載場景時確保物體target不被自動銷毀。
Shader
類,繼承自Object
用於所以渲染的著色器腳本
大多數高級的渲染都是通過Material類控制的. Shader類類最常用於檢查一個著色器時
否能夠運行在用戶的硬件上(isSupported屬性)並根據名稱找到著色器(Find方法).
參見:Material類,Materials,ShaderLab documentation.
變量
◆ var isSupported: bool
描述:這個著色器能夠運行在端用戶的顯卡上? (只讀)
如果這個著色器重的設置和任何fallback函數被支持,返回真。在實現特定的效果時,
最常使用這個。例如,Unity Pro中的image effects,如果這個著色器不被支持那麼Unity將
自動禁用它們。
//如果材質的著色器不被支持,禁用渲染器
if(!renderer material.shader.isSupported)
renderer.enabled=false;
參見:Material類,ShaderLab documentation.
◆ var maximumLOD: int
描述:該shader的LOD等級
參見:Shader Level of Detail, Shder globalMaximumLOD.
◆ var renderQueue: int
描述:這個shader的渲染隊列(只讀)
參見:Material.renderQueue, RenderQueue tag.
類變量
◆ static var globalMaximumLOD: int
描述:所有shader的LOD等級.
參見:Shader Level of Detail, Shader.MaximumLOD.
類方法
◆ static function Find(name: string): Shader
描述:找到名為name的著色器。
Shader.Find能夠用來切換到另一個著色器,而不需要保持一個到該著色的引用。 name
為材質著色器下拉框中的名稱。通常的名稱是:"Diffuse", "Bumped Diffuse", "VertexLit",
"Transparent/Diffuse"等等。
在構建時,只包含那些使用中的shader或位置在"Resources"文件夾中shader。
//從腳本中改變shader
function Start()
{
//切換到透明散射著色器
renderer.material.shader=Shader.Find("Transparent/Diffuse");
}
//從代碼創建一個材質
function Start()
//使用透明散射著色器創建一個材質
var material=new Material(Shader.Find("Transparent//Diffuse");
material.color=Color.green;
//賦值這個材質到渲染器
renderer.material=material;
}
參見:Material類。
◆ static function PropertyToID(name: string): int
描述:為一個著色器屬性名獲取唯一標識。
著色器屬性表示被MaterialPropertyBlock函數使用。
在Unity中著色器屬性的每個名稱都(例如,_MainTex或_Color)被賦予一個唯一的整型
數,在整個遊戲中都不變。
參見:MaterialPropertyBlock.
◆ static function SetGlobalColor(propertyName: string, color: Color): void
描述:為所以著色器設置全局顏色屬性。
如果一個著色器需要而材質沒有定義它們將使用全局屬性(例如,如果著色器不在
Properties模塊中公開它們).
通常在你有一組定義的著色器並使用相同的"全局"顏色(例如,太陽的顏色)。然後
你可以從腳本中設置全局屬性,並不需要在所有的材質中設置相同的顏色。
參見:SetGlobalFloat,SetGlobalVector,SetGlobalTexture;Material類,ShaderLab
documentation.
◆ static function SetGlobalFloat(propertyName: string, value: float): void
描述:為所有著色器設置全局浮點數屬性。
如果一個著色器需要而材質沒有定義它們將使用全局屬性(例如,如果著色器不在
Properties模塊中公開它們).
通常在你有一組定義的著色器並使用相同的"全局"浮點z數(例如,自定義霧類型的
密度)。然後你可以從腳本中設置全局屬性,並不需要在所有的材質中設置相同的浮點數。
參見:SetGlobalColor,SetGlobalTexture;Material類,ShaderLab documentation.
◆ static function SetGlobalMatrix(propertyName: string, mat: Matrix4x4): void
描述:為所有著色器設置全局矩陣屬性。
如果一個著色器需要而材質沒有定義它們將使用全局屬性(例如,如果著色器不在
Properties模塊中公開它們).
參見:SetGlobalColor,SetGlobalFloat;Material類,ShaderLab documentation.
◆ static function SetGlobalTexture(propertyName: string, tex: Texture): void
描述:為所有的著色器設置全局紋理屬性。
如果一個著色器需要而材質沒有定義它們將使用全局屬性(例如,如果著色器不在
Properties模塊中公開它們).
通常在你有一組定義的著色器並使用相同的"全局"紋理(例如,自定義散射光照立方
貼圖)。然後你可以從腳本中設置全局屬性,並不需要在所有的材質中設置相同的紋理。
參見:SetGlobalColor,SetGlobalFloat;Material類,ShaderLab documentation.
◆ static function SetGlobalVector(propertyName: string, vec: Vector4): void
描述:為所有著色器設置全局向量屬性。
如果一個著色器需要而材質沒有定義它們將使用全局屬性(例如,如果著色器不在
Properties模塊中公開它們).
通常在你有一組定義的著色器並使用相同的"全局"向量(例如,風的方向)。然後你
可以從腳本中設置全局屬性,並不需要在所有的材質中設置相同的向量。
參見:SetGlobalFloat,SetGlobalColor,SetGlobalTexture;Material類,ShaderLab
documentation.
繼承的成員
繼承的變量
name 對象的名稱
hideFlages 該物體是夠被隱藏,保存在場景中或被用戶修改?
繼承的函數
GetInstanceID 返回該物體的實例id。
繼承的類函數
operator bool 這個物體存在嗎?
Instantiate 克隆original物體並返回這個克隆。
Destroy 移除一個遊戲物體,緩存或資源。
DestroyImmediate 立即銷毀物體obj,強烈建議使用Destroy代替。
FindObjectsOfType 返回所有類型為type的激活物體。
FindObjectsOfType 返回第一個類型為type的激活物體。
operator== 比較兩個物體是否相同。
operator != 比較連個物體是否不相同。
DomDestroyOnLoad 卸載場景時確保物體target不被自動銷毀。
TerrainData
類,繼承自Object
TerrainData類存儲高度圖,細節網格位置,樹實例,和地形紋理alph圖,
Terrain組件鏈接地形數據並渲染它。
變量
◆ var heightmapHeight: int
描述:採樣的地形高度(只讀)
◆ var heightmapWidth: int
描述:採樣的地形寬度(只讀)
◆ var size: Vector3
描述:地形在世界單位下的總大小
函數
◆ function GetHeights(xBase: int, yBase: int, width: int, height: int): float[,]
描述:獲取高度圖採樣的一個數組。
◆ function GetInterpolatedNormal(x: float, y: float): Vector3
描述:在一個給定的位置獲取插值法線。
/x/和y坐標被作為0...1之間正規化的坐標被指定。
◆ function SetHeights(xBase: int, yBase: int, height: float): float[,]): void
描述:設置高度圖採樣的一個數組。
繼承的成員
繼承的變量
name 對象的名稱
hideFlages 該物體是夠被隱藏,保存在場景中或被用戶修改?
繼承的函數
GetInstanceID 返回該物體的實例id。
繼承的類函數
operator bool 這個物體存在嗎?
Instantiate 克隆original物體並返回這個克隆。
Destroy 移除一個遊戲物體,緩存或資源。
DestroyImmediate 立即銷毀物體obj,強烈建議使用Destroy代替。
FindObjectsOfType 返回所有類型為type的激活物體。
FindObjectsOfType 返回第一個類型為type的激活物體。
operator== 比較兩個物體是否相同。
operator != 比較連個物體是否不相同。
DomDestroyOnLoad 卸載場景時確保物體target不被自動銷毀。
TextAsset
類,繼承自Object
文本文件資源。
你可以在你的工程中使用原始的.txt文件作為資源,並通過這個類獲取它們的內容。
變量
描述:文本資源的原始字節
//通過添加.txt擴展名到文件來加載一個.jpg或.png文件
//並拖動它到imageTextAsset
var image TextAsset: TextAsset
function Start(){
var tex=new Texture2D(4,4);
tex.LoadImage(imageTextAsset.bytes);
renderer.material.mainTexture=tex;
}
◆ var text: string
描述:.txt文件的文本內容作為一個字符串。
var asset: TextAsset;
function Start()
{
print(asset.text);
}
繼承的成員
繼承的變量
name 對象的名稱
hideFlages 該物體是夠被隱藏,保存在場景中或被用戶修改?
繼承的函數
GetInstanceID 返回該物體的實例id。
繼承的類函數
operator bool 這個物體存在嗎?
Instantiate 克隆original物體並返回這個克隆。
Destroy 移除一個遊戲物體,緩存或資源。
DestroyImmediate 立即銷毀物體obj,強烈建議使用Destroy代替。
FindObjectsOfType 返回所有類型為type的激活物體。
FindObjectsOfType 返回第一個類型為type的激活物體。
operator== 比較兩個物體是否相同。
operator != 比較連個物體是否不相同。
DomDestroyOnLoad 卸載場景時確保物體target不被自動銷毀。
Texture
類,繼承自Object
用於處理紋理的基類,包含的功能被Texture2D和RenderTexture類共用。
變量
◆ var anisoLevel: int
描述:紋理的各向異性過濾等級
反走樣過濾使紋理從一個較小的視角看時具有較好的效果,但是會帶來顯卡性能上的開
值。通常你可以將它用與地面,地板或路面紋理以使它看起來更好。參見:texture assets.
renderer.material.mainTexture.anisoLevel=2;
◆ var filterMode: FilterMode
描述:紋理的過濾模式
renderer.material.mainTexture.filterMode=FilterMode.trilinear;
參見:FilterMode, texture assets.
◆ var height: int
描述:紋理的像素高度(只讀)
//打印紋理尺寸到控制台
var texture: Texture;
function Start(){
print("Size is"+texture.width+"by"+texture.height);
}
◆ var mipMapBias: float
描述:紋理的mipMap偏移。
一個正的偏移使紋理顯得非常模糊,而一個負的偏移使紋理變得更加清晰。注意使用
大的負值會降低性能,因此不建議使用小於0.5的偏移。在大多數情況先,紋理的銳化可
以通過使用反走樣過濾來實現。
參見:texture.anisoLevel, texture assets.
renderer.material.mainTexture.mipMaoBias=0.5;
◆ var width: int
描述:紋理的像素寬度(只讀)
//打印紋理尺寸到控制台
var texture: Texture;
function Start(){
print("Size is"+texture.width+"by"+texture.height);
}
◆ var wrapMode: TextureWrapMode
描述:紋理的包裹模式(Repeat或Clamp)
使用TextureWrapMode.Clamp在邊界上設置紋理剪裁以避免包裹的不真實,或者用
TextureWrapMode.Repeat平鋪紋理。參見:TextureWrapMode, texture assets.
renderer.material.mainTexture.WrapMode=TextureWrapMode.Clamp;
繼承的成員
繼承的變量
name 對象的名稱
hideFlages 該物體是夠被隱藏,保存在場景中或被用戶修改?
繼承的函數
GetInstanceID 返回該物體的實例id。
繼承的類函數
operator bool 這個物體存在嗎?
Instantiate 克隆original物體並返回這個克隆。
Destroy 移除一個遊戲物體,緩存或資源。
DestroyImmediate 立即銷毀物體obj,強烈建議使用Destroy代替。
FindObjectsOfType 返回所有類型為type的激活物體。
FindObjectsOfType 返回第一個類型為type的激活物體。
operator== 比較兩個物體是否相同。
operator != 比較連個物體是否不相同。
DomDestroyOnLoad 卸載場景時確保物體target不被自動銷毀。
Cubemap
類,繼承自Texture
處理立方貼圖的類,用這個來創建或修改已有的cube map assets.
變量
◆ var format: TextureFormat
描述:紋理中像素數據的格式(只讀)
使用這個確定紋理的格式。
構造函數
◆ static function Cubemap(size: int. format: TextureFormat, mipmap: bool): Cubemap
描述:創建新的空立方貼圖紋理;
在每個面,紋理將是size大小的並且有或沒有mipmap.
通常你會想在創建它之後設置紋理的顏色,使用SetPixel和Apply函數.
function Start(){
//創建一個新的紋理並將它複製給渲染器材質
var texture=new Cubemap(128, TextureFormat.ARGB32, false)
renderer.material.mainTexture=Texture;
}
參見:SetPixel,Apply函數.
函數
◆ function Apply(updateMipmaps: bool=true): void
描述:應用所有面前的SetPixel改變.
如果updateMipMaps為true.mip等級也被重新計算.這是非常耗時的操作,因此你要在
Apply調用之間改變盡可能多的像素。參見:SetPixel函數.
◆ function GetPixel(face: CubemapFace, x: int, y: int): Color
描述:返回坐標(face, X, Y)處的像素顏色.
如果像素坐標超出邊界(大於寬/高或小於0),它將基於紋理的包裹模式來限製或重複。
該函數只工作再ARGB32,RGB24和Alpha8紋理格式上。對於其他格式,他總是返
回不透的白色。
◆ function GetPixels(face: CubemapFace, miplevel: int): Color[]
描述:返回立方貼圖一個面的像素顏色.
這個函數返回立方貼圖面上整個mip等級的像素顏色數組。
返回的數組被設置在2D數組中,這裡,像素被從左到右,從上到下放置(行序)數
組的大小是所使用的mip等級的寬乘高。默認的mip等級是零(基本紋理)在這種情況下
大小僅為紋理的大小。一般地,mip等級尺寸是mipSize=max(1,width>>miplevel)高度類似。
該函數只工作在ARGB32,RGB24和Alpha8紋理格式上。對於其他格式,GetPixels被
忽略.
使用GetPixels比重複調用GetPixel更快,尤其是對於大紋理,此外GetPixels可以訪
問單獨的mipmap等級.
參見:SetPixels,mipmapCount.
◆ function SetPixel(face: CubemapFace, x: int, y: int, color: Color): void
描述:在坐標(face,x,y)處設置像素顏色。
調用Apply來實際上載改變後的像素到顯卡, 上載是非常耗時的操作,因此你要在
Apply調用之間改變盡可能多的像素。
該函數只工作再ARGB32,RGB24和Alpha8紋理格式上。對於其他格式SetPixels被
忽略. 參見:Apply函數.
◆ function SetPixels(color: Color[], face: CubemapFace, mipmapFace, miplevel: int): void
描述:設置立方貼圖一個面的像素顏色。
這個函數取回並
aaa1218bbb
aaa1218bbb
社員
社員

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

https://design.666forum.com

回頂端 向下

回頂端


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