|
GameObject類,繼承自O(shè)bject
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.relativeForce=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可以用來選擇性的渲染或忽略投射.
//設(shè)置游戲物體到忽略投射物體的層上
gameObject.layer=2;
◆ var light: Light
描述:附加到這個游戲物體的光影(只讀)(如果沒有為null)
var other: GameObject;
other.light.range=10;
◆ var networkView: NetworkView
描述:附加到這個游戲物體的網(wǎng)絡(luò)視(只讀)(如果沒有為null)
var other: GameObject;
other.networkView.RPC("MyFunction",RPCMode.All,"someValue");
◆ var particleEmitter: ParticleEmitter
描述:附加到這個游戲物體的粒子發(fā)射器(只讀)(如果沒有為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);
構(gòu)造函數(shù)
◆ static function GameObject(name:string): GameObject
描述:創(chuàng)建一個新的游戲物體,命名為name.
Transform總是被添加到該游戲物體.
//創(chuàng)建一個名為"Player"的游戲物體
//并給他添加剛體和立方體碰撞器.
player=new GameObject("Player");
player.AddComponent("Rigidbody");
player.AddComponent("BoxCollider");
◆ static function
GameObject(): GameObject
描述:創(chuàng)建一個新的游戲物體.
Transform總是被添加到該游戲物體.
//創(chuàng)建一個沒有名稱的游戲物體
//并給他添加剛體和立方體碰撞器.
player=new GameObject();
player.AddComponent("Rigidbody");
player.AddComponent("BoxCollider");
◆ static function GameObject(name: string, params
components: Type[]): GameObject
描述:創(chuàng)建一個游戲物體并附加特定的組件.
函數(shù)
◆ function AddComponent(className: string):
Component
描述:添加一個名為className的組件類型到該游戲物體.
使用這個函數(shù)來改變物體的行為。你也可以傳遞腳本的類名來添加腳本到游戲物體。
有些組件也需要另一些組件存在于同一個游戲物體上。這個函數(shù)會自動添加需要的組
件,例如如果你添加一個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上調(diào)用methodName方法。
通過使用零參數(shù),接收方法可以選擇忽略parameter。如果options被設(shè)置為
SendMessageOptions.RequireReceiver,那么如果這個消息沒有被任何組件接收時將打印一個
錯誤消息。
///使用值5調(diào)用函數(shù)ApplyDamage gameObject.BroadcastMessage("ApplyDamage",5);
//所有附加到該游戲物體和其子物體上腳本中的
//ApplyDamage函數(shù)都將調(diào)用
function ApplyDamage(damage)
{
print(damage)
}
◆ function CompareTag(tag: string): bool
描述:這個游戲物體被標簽為tag?
//立即死亡觸發(fā)器
//銷毀任何進入到觸發(fā)器的碰撞器,這些碰撞器被標記為Player.
function OnTriggerEnter(other:
Collider)
{
if(other.gameObject.CompareTag("Player"))
{
Destroy(other.gameObject);
}
}
◆ function GetComponent(type: Type): bool
描述:如果游戲物體有type類型的組件就返回它,否則返回null. 你可以使用這個函數(shù)
訪問內(nèi)置的組件或腳本.
GetComponent是防衛(wèi)其他組件的主要方法。對于Javascript腳本的類型總是腳本顯示
在工程視圖中的名稱。例如:
function Start()
{
var curTransform: Transform;
curTransform=gameObject.GetComponent(Transform);
//這等同于
curTransform=gameObject.transform;
}
function Update()
{
//為訪問附加在同一游戲物體上
//其他腳本內(nèi)的公用變量和函數(shù)
//(ScriptName為Javascript文件名)
var other: ScriptName=gameObject.GetComponent(ScriptName);
//調(diào)用該腳本中的DoSomething函數(shù)
other DoSomething();
//設(shè)置其他腳本實例中的另一個變量
other.someVariable=5;
}
◆ function GetComponent(type: string):
Component
描述:返回名為type的組件,如果游戲物體上附加了一個就返回它,如果沒有返回null.
出于性能的原因最好用Type電影GetComponent而不是一個字符串。然而有時你可能
無法得到類型,例如當試圖從Javascript中訪問c#時。在那種情況下你可以簡單的通過名
稱而不是類型訪問這個組件。例如:
function Update()
{
//為訪問附加在同一游戲物體上
//其他腳本內(nèi)的公用變量和函數(shù).
//(ScriptName為Javascript文件名)
var other=gameObject.GetComponent("ScriptName");
//調(diào)用該腳本中的DoSomething函數(shù)
other.DoSomething().
//設(shè)置其他腳本實例中的另一個變量
other.someVariable=5;
}
◆ function
GetComponentInChildren(type: Type): Component
描述:返回type類型的組件,這個組件位于這個游戲物體或任何它的子物體上,使用
深度優(yōu)先搜索。
只有激活的組件被返回。
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,任何被動
化的組件屬性都將被這個采樣值替換,多數(shù)時候你會使用Animation.Play. SampleAnimation
用于當你需要以無序方式或給予一些特殊的輸入在幀之間跳躍時使用。參見:Aniamtion
//通過采樣每一幀或動畫剪輯
var clip.AniamtionClip
function Update()
{
gameObject.sampleAnimation(clip, clip.length-Time.time);
}
◆ function SendMessage(methodName: string, value:
object=null, options:
SendMessageOption=SendMessageOption.RequireReceiver):
void
描述:在這個游戲物體上的每個MonoBehaviour上調(diào)用methodName方法。
通過使用零參數(shù),接收方法可以選擇忽略參數(shù)。如果options被設(shè)置為
SendMessageOptions.RequireReceiver,那么如果這個消息沒有被任何組件接收時將打印一個
錯誤消息。
//使用值5調(diào)用函數(shù)ApplyDamage
gameObject.SendMessage("ApplyDamage",5);
//所以附加到該游戲物體上的腳本中的
//ApllyDamage函數(shù)都將調(diào)用
function.ApplyDamage(damage)
{
pring(damage);
}
◆ function SendMessageUpwards(methodName: string, value:
object=null, options:
SendMessageOption=SendMessageOption.RequireReceiver):
void
描述:在這個游戲物體上的每個MonoBehaviour和該行為的祖先上調(diào)用名為methodName
方法。
通過使用零參數(shù),接收方法可以選擇忽略參數(shù)。如果options被設(shè)置為
SendMessageOptions.RequireReceiver,那么如果這個消息沒有被任何組件接收時將打印一個
錯誤消息。
//使用值5調(diào)用函數(shù)ApplyDamage
gameObject.SendMessageUpwards("ApplyDamage",5);
//所以附加到該游戲物體上的腳本中的
//ApllyDamage函數(shù)都將調(diào)用
function.ApplyDamage(damage)
{
pring(damage);
}
◆ function SetActiveRecursion(rotate: bool):
void
描述:設(shè)置這個物體和所以子游戲物體的機會狀態(tài)。
gameObject.SetActiveRecursion(true);
類方法
◆ static function CreatePrimitive(type: PrimitiveType):
GameObject
描述:用幾何的網(wǎng)格渲染器和適當?shù)呐鲎财鲃?chuàng)建一個游戲物體。
///在場景中創(chuàng)建一個平面,球體和立方體
function Start()
{
var plane:GameObject= 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
描述:依據(jù)name查找物體并返回它.
如果沒有物體具有名稱name返回null. 如果name包含'/'字符它將像一個路徑名一樣穿
越層次,這個函數(shù)只返回激活的游戲物體。
出于性能考慮建議不要在每幀中都是有該函數(shù),而是在開始時調(diào)用并在成員變量中緩存結(jié)果
或者用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"); 這個函數(shù)最常用與在加載時自動鏈接引用到其他物體,例如,在MonoBehaviour.Awake
或MonoBehaviour.Start內(nèi)部. 處于性能考慮你不應(yīng)該在每幀中調(diào)用這個函數(shù),例如
MonoBehaviour.Update內(nèi). 一個通用的模式是在MonoBehaviour.Start內(nèi)將一個游戲物體賦給
一個變量. 并在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的激活物體列表,如果沒有發(fā)現(xiàn)返回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(curDistance<distance)
{
closest=go;
distance=curDistance;
}
}
return closest;
}
◆
static function FindGWithTag(tag: string): GameObject
描述:返回標記為tag的一個激活游戲物體,如果沒有發(fā)現(xiàn)返回null.
標簽在使用前必須在標簽管理中定義。
//在標記為"Respawn"的物體位置處
//實例化一個respawnPrefab var
respawnPrefab: GameObject;
var respawns=GameObject.FindWithTag("Respawn");
Instantiate(respawnPrefab, respawn.position,
respawn.rotation);
繼承的成員
繼承的變量
name 對象的名稱。
hideFlags 該物體是夠被隱藏,保存在場景中或被用戶修改?
繼承的函數(shù)
GetInstanceID 返回該物體的實例id。
繼承的類函數(shù)
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
描述:主材質(zhì)的紋理縮放。
這與使用帶有"_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
描述:在這個材質(zhì)中有多少個pass(只讀).
這個最常用在使用GL類之間繪制的代碼中(只限于Unity Pro). 例如,Image Effects使用
材質(zhì)來實現(xiàn)屏幕后期處理. 對材質(zhì)中的每一個pass(參考SetPass)它們激活并繪制一個全屏
四邊形。
這里是一個全屏圖形效果的例子,它反轉(zhuǎn)顏色。添加這個腳本到相機并在播放模式中
查看。
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();
//對于材質(zhì)中的每個pass(這里只有一個)
for(var i=0; i<mat.passCount; ++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函數(shù),GL類,ShaderLab documentation.
◆ var renderQueue: int
描述:這個材質(zhì)的渲染隊列(只讀)
默認地材質(zhì)使用shader的render queue,你可以使用這個變量重載該渲染隊列。注意一
旦渲染隊列在該材質(zhì)上被設(shè)置,它將保持這個值,集市以后shader被改變?yōu)椴煌囊粋€值。
渲染隊列值需要時正的才能正常工作。
參見:Shader.renderQueue, RenderQueue tag.
◆ var shader: Shader
描述:該材質(zhì)使用的著色器。
//按下空格鍵時,
//在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.
構(gòu)造函數(shù)
◆ static function Material(contents: string):
Material
描述:從一個源shader字符串創(chuàng)建一個材質(zhì)。
如果你有一個實現(xiàn)自定義特效的腳本,你需要使用著色器和材質(zhì)實現(xiàn)所有的圖像設(shè)置。
在你的腳本內(nèi)使用這個函數(shù)創(chuàng)建一個自定義的著色器和材質(zhì)。在創(chuàng)建材質(zhì)后,使用SetColor,
SetTexture, SetFloat, SetVector, SetMatrix來設(shè)置著色器屬性值。
//創(chuàng)建一個附加混合材質(zhì)并用它來渲染 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.
函數(shù)
◆ function CopyPropertiesFormMaterial(mat: Material):
void
描述:從其他材質(zhì)拷貝屬性到這個材質(zhì)。
◆ function GetColor(propertyName: string):
Color
描述:獲取一個命名的顏色值。
數(shù)多shader使用超過一個顏色,使用GetColor來獲取propertyName顏色。
Unity內(nèi)置著色器使用的普通顏色名稱;
"_Color"為材質(zhì)的主顏色。這也能夠通過color屬性訪問。
"_SpecColor"為材質(zhì)的反射顏色(在specular/glossy/vertexlit著色器中使用)。
"_Emission"為材質(zhì)的散射顏色(用在reflective著色器中使用)。
print(renderder.material.GetColor("_SpecColor));
參見:color屬性,SetColor.
◆ function GetFloat(propertyName: string):
float
描述:獲取一個命名的浮點值。
參見:SetFloat, Materials, ShaderLab documentation.
◆ function GetMatrix(propertyName: string):
Matrix4x4
描述:從該shader中獲取命名矩陣的值。
這個最常用于自定義的shader,其中需要額外的矩陣參數(shù),矩陣參數(shù)不需要在材質(zhì)檢
視面板中公開,但是能夠在腳本中通過SetMatrix和GetMatrix來設(shè)置和查詢。
參見:SetMatrix, Materials, ShaderLab documentation.
◆ function GetTag(taf: string, searchFallbacks: bool,
defaultValue: string=""): string
描述:獲取材質(zhì)的shader標簽值。
如果材質(zhì)的shader沒有定義標簽,defaultValue被返回。
如果searchFallbacks為true那么這個函數(shù)將在所有的子shader和所有后備中查找標簽。
如果searchFallbacks為false只在當前查詢的子shader中查找這個標簽。
使用不搜索后備的GetTag可以檢視現(xiàn)在使用的是哪個子shader:添加一個自定義具有
不同值的標簽到每個子shader,然后再運行時查詢這個值。例如,Unity Pro的水使用這個
函數(shù)來檢測shader何時退化為沒有反射,然后關(guān)閉反射相機。
◆ function GetTexture(propertyNmae: string): Texture
描述:獲取一個命名紋理。
數(shù)多shader使用超過一個紋理。使用GetTexture來獲取propertyName紋理。
Unity內(nèi)置著色器使用的普通紋理名稱;
"_MainTex"為主散射紋理. 這也能夠通過mainTexture屬性訪問。
"_BumpMap"為法線貼圖。
"_LightMap"為光照貼圖。
"_Cube"為發(fā)射立方體貼圖。
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內(nèi)置著色器使用的普通紋理名稱;
"_MainTex"為主散射紋理. 這也能夠通過mainTextureOffset屬性訪問。
"_BumpMap"為法線貼圖。
"_LightMap"為光照貼圖。
"_Cube"為發(fā)射立方體貼圖。
參見:mainTextureOffset屬性,SetTextureOffset.
◆ function GetTextureScale(propertyName: string):
Vector2
描述:獲取紋理propertyName的位置縮放。
Unity內(nèi)置著色器使用的普通紋理名稱;
"_MainTex"為主散射紋紋理. 這也能夠通過mainTextureOffset屬性訪問。
"_BumpMap"為法線貼圖。
"_LightMap"為光照貼圖。
"_Cube"為發(fā)射立方體貼圖。
參見: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
描述:檢查材質(zhì)的shader是否有給定名稱的屬性。
參見:mainTextureScale屬性,SetTextureScale.
◆ function Lerp(Start: Material, end: Material, t: float):
void
描述:在兩個材質(zhì)間插值屬性。
使一個材質(zhì)的所有顏色和浮點值從start到end基于t來插值。
當t為0,所有的值為start。
當t為1,所有的值為end。
通常你想要插值的兩個材質(zhì)是相同的(使用相同的著色器和紋理)除了顏色和浮點值。
然后你使用Lerp來混合它們。
//混合兩個材質(zhì)
var material1: Material;
var material2: Material;
var duration=2.0;
function Start()
{
//首先使用第一個材質(zhì)
renderer.material=material[];
}
function Update()
{
//隨著時間來回變化材質(zhì)
var
lerp=Mathf.PingPong(Time.time, duration)/duration;
renderer.material.Lerp(material1, materail2, lerp);
} 參見:Material.
◆ function SetColor(propertyName: string, color: Color):
void
描述:設(shè)置一個命名的顏色值。
數(shù)多shader使用超過一個顏色。使用SetColor來獲取propertyName顏色.
Unity內(nèi)置著色器使用的普通顏色名稱;
"_Color"為材質(zhì)的主顏色. 這也能夠通過color屬性訪問.
"_SpecColor"為材質(zhì)的反射顏色(在specular/glossy/vertexlit著色器中使用).
"_Emission"為材質(zhì)的散射顏色(用在vertexlit著色器中).
"_ReflectColor"為材質(zhì)的反射顏色(用在reflective著色器中).
function Start()
{
//設(shè)置Glossy著色器這樣可以使用反射顏色
renderer.material.shader=Shader.Find("Glossy");
//設(shè)置紅色的高光
renderer.material.SetColor("_SpecColor", Color.red);
}
參見:color屬性,GetColor.
◆ function SetFloat(propertyName: string, value: float):
void
描述:設(shè)置一個命名的浮點值。
function Start()
{
//在這個材質(zhì)上使用Glossy著色器
renderer.material.shader=Shader.Find("Glossy");
}
function Update()
{
//動畫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設(shè)置一個命名矩陣。
這個最常用于自定義的shader,其中需要額外的矩陣參數(shù),矩陣參數(shù)不需要在材質(zhì)檢
視面板中公開,但是能夠在腳本中通過SetMatrix和GetMatrix來設(shè)置和查詢。
var rotateSpeed=30;
var texture: Texture;
function Start(){
//用于一個著色器創(chuàng)建一個新的材質(zhì)
//這個著色器旋轉(zhuǎn)紋理
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()
}
//為這個著色器構(gòu)建一個旋轉(zhuǎn)矩陣并設(shè)置它
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);
}
///////////////////////////////////////////////////
var rotateSpeed =
30;
var texture :
Texture;
function Start() {
// Create a new material with a
shader // that rotates the texture.
Texture rotation // is performed with a _Rotation
matrix. var m : Material = new Material (
"Shader
"Rotating
Texture\" {" +
"Properties { _MainTex
("Base\", 2D) =
"white\" {} }" +
"SubShader {" +
" Pass {" +
" Material { Diffuse (1,1,1,0) Ambient
(1,1,1,0) }" +
" Lighting On" +
" SetTexture [_MainTex] {" +
" matrix [_Rotation]" +
" combine texture * primary double,
texture" +
" }" +
" }" +
"}" +
"}"
);
m.mainTexture = texture;
renderer.material = m;
}
function Update() {
// Construct a rotation matrix and set it
for the shader 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使用
材質(zhì)來實現(xiàn)屏幕后期處理,對材質(zhì)中的每一個pass它們激活并繪制一個全屏四邊形。
如果SetPass返回假,你不應(yīng)該渲染任何東西。
這里是一個全屏圖像效果的例子,它反轉(zhuǎn)顏色,添加這個腳本到相機并在播放模式中
查看。
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
描述:設(shè)置一個命名紋理.
數(shù)多shader使用超過一個紋理。使用SetTexture來改變propertyName紋理。
Unity內(nèi)置著色器使用的普通紋理名稱:
"_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
描述:設(shè)置紋理propertyName的位置縮放.
Unity內(nèi)置著色器使用的普通紋理名稱:
"_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
描述:設(shè)置一個命名的向量值.
在Unity shader中四組件向量和顏色是相同的。SetVector與SetColor完全相同,僅僅
是輸入數(shù)據(jù)類型不同(向量的xyzw變?yōu)轭伾膔gba).
參見:SetColor, GetVector.
繼承的成員
繼承的變量
name 對象的名稱。
hideFlags 該物體是夠被隱藏,保存在場景中或被用戶修改?
繼承的函數(shù)
GetInstanceID 返回該物體的實例id。
繼承的類函數(shù)
operator bool 這個物體存在嗎?
Instantiate 克隆original物體并返回這個克隆。
Destroy 移除一個游戲物體,組件或資源。
DestroyImmediate 立即銷毀物體obj。強烈建議使用Destroy代替。
FindObjectsOfType 返回所有類型為type的激活物體。
FindObjectsOfType 返回第一個類型為type的激活物體。
operator== 比較兩個物體是否相同。
operator != 比較兩個物體是否不相同。
DontDestroyOnLoad 加載新場景時確保物體target不被自動銷毀。
Mesh
類,繼承自O(shè)bject
一個類允許你從腳本中創(chuàng)建或修改網(wǎng)格。
網(wǎng)格包含頂點和多個三角形數(shù)組。參考Procedural example project獲取石油網(wǎng)格接口的
例子。
三角數(shù)組只是頂點索引數(shù)組;三個索引為一個三角形。
對于每個頂點可以有一個法線,兩個紋理坐標,顏色和切線。這些都是可選的并可以
去掉。所有的頂點信息被存儲相同尺寸的不同數(shù)組中,因此如果的網(wǎng)格有10個頂點,你
應(yīng)該有大小為10的數(shù)組用于法線和其他屬性。
可能有三件事,你可能想要使用可調(diào)整的網(wǎng)格。
1. 從頭開始構(gòu)建網(wǎng)格:應(yīng)該總是按照如下的順序: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)將它們賦值回網(wǎng)格.
function Update(){
var mesh: mesh=GetComponent(MeshFilter).mesh;
var vertices=newVertices;
var normals=mesh.normals;
for(var i=0,i<vertices.length,i++)
{
vertices[i]+=mormals{i}*Mathf.Sin(Time.time);
}
mesh.vertices=vertices;
}
3. 連續(xù)地改變網(wǎng)格三角形和頂點:1)調(diào)用Clear開始刷心,2)賦值頂點和其他屬性,3)賦
值三角形索引.
在賦值新的頂點或三角形時調(diào)用Clear是重要的。Unity總是檢查提供的三角形索引,
它們是否沒有超出頂點邊界。電影Clear然后賦值頂點然后三角形,確保沒你沒有超出數(shù)據(jù)邊
界。
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);
//構(gòu)建基本網(wǎng)格
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();
//賦網(wǎng)格到網(wǎng)格過濾器和渲染器
renderer.material=new Material(Shader.Find("Diffuse"));
//賦骨骼權(quán)值到網(wǎng)格
//使用兩個骨骼. 一個用于上部的頂點,一個用于下部的頂點
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;
//創(chuàng)建骨骼變換并綁定姿勢
//一個骨骼在頂部一個在底部
var bones=new Transform[2];
var bindPoses=new Matrx4x4[2];
bones[0]=new GameObject("Lower").transform;
bones[0]parent=transform;
//設(shè)置相對于父的位置
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;
//設(shè)置相對于父的位置
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,)];
//使用曲線創(chuàng)建剪輯
var clip=new AnimationClip();
clip.SetCurve("Lower", Transform,"m_LocalPosition.z", curve);
//添加并播放剪輯
animation.AddClip(clip, "test");
animation.Play("test"); }
◆ var boneWeights: BondWeight[]
描述:每個頂點的骨骼權(quán)重
數(shù)組的大小與vertexCount相同或為空。
每個頂點可以被至多4個不同骨骼影響。4個骨骼的權(quán)值加和應(yīng)該為1,
function Start(){
gameObject.AddComponent(Animation);
gameObject.AddComponent(SkinnedMeshRenderer);
var renderer:
SkinnedMeshRenderer=GetComponent(SkinnedMeshRenderer);
//構(gòu)建基本網(wǎng)格
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();
//賦網(wǎng)格到網(wǎng)格過濾器和渲染器
renderer.material=new Material(Shader.Find("Diffuse"));
//賦骨骼權(quán)值到網(wǎng)格
//使用兩個骨骼. 一個用于上部的頂點,一個用于下部的頂點
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;
//創(chuàng)建骨骼變換并綁定姿勢
//一個骨骼在頂部一個在底部
var bones=new Transform[2];
var bindPoses=new Matrx4x4[2];
bones[0]=new GameObject("Lower").transform;
bones[0]parent=transform;
//設(shè)置相對于父的位置
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;
//設(shè)置相對于父的位置
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,)];
//使用曲線創(chuàng)建剪輯
var clip=new AnimationClip();
clip.SetCurve("Lower", Transform,"m_LocalPosition.z", curve);
//添加并播放剪輯
animation.AddClip(clip, "test");
animation.Play("test");
}
◆ var bounds: Bounds
描述:網(wǎng)格的包圍體。
這個是在網(wǎng)格的局部坐標空間中軸對齊的包圍盒(不會受到變換的影響)參考世界空
間中的Renderer.Bounds屬性。
//產(chǎn)生一個屏幕UV坐標,這個與網(wǎng)格尺寸無關(guān)
//通過縮放包圍盒尺寸的頂點
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,i<uvs.length;i++){
uvs[i]=Vector2(vertices[i].x/bounds.size.x,vertices[i].z/bounds.size.x);
}
mesh.uv=uvs;
}
參見:Bounds類,Renderer.Bounds屬性.
◆ var Colors: Color[]
描述:返回網(wǎng)格的頂點顏色。
如果沒有頂點顏色可用,一個空的數(shù)組將被返回。
//設(shè)置y=0的頂點位紅色,y=1的訂單為綠色.
//(注意大多數(shù)設(shè)置著色器不顯示頂點顏色,你可以
//使用例如,一個粒子渲染器來查看頂點顏色)
function Start(){
var mesh: Mesh=GetComponent(MeshFilter).mesh;
var.vertices=mesh vertices;
var.color=new Color[Vertices.Length];
for (var i=0,i<vertices.length;i++){
colors[i]=Color.Lerp(Colored, Color.green, vertices[i].y);
}
mesh.colors=colors;
}
◆ var normals: Vectors[]
描述:網(wǎng)格的法線。
如果網(wǎng)格布包含發(fā)行,一個空的數(shù)組將被返回。
//以speed每幀旋轉(zhuǎn)法線
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,i<normals.length;i++){
normals[i]=rotation*normals[i];
}
mesh.normals=normals;
}
◆ var subMeshCount: int
描述:子網(wǎng)格數(shù)。每個材質(zhì)有一個不同的三角形列表。
◆ var tangents: Vector4[]
描述:網(wǎng)格的切線。
切線主要用于bumpmap shader中。切線是一個單位長度向量,a沿著網(wǎng)格表面指向水平
(U)紋理方向。Unity中的切線是由Vector4表示的,x.y.z組件定義向量,如果需要w用來翻
轉(zhuǎn)副法線。
Unity通過計算向量和切線之間的叉乘來計算表面的向量(副法線),并乘以
tangnent.w.因此w應(yīng)該是1或-1。
如果你想在網(wǎng)格上使用凹凸貼圖著色器,你需要自己計算切線。賦值normals或使用
RecalculateNormals之后計算切線。
◆ var tirangles: int[]
描述:一個數(shù)組包含網(wǎng)格中所有的三角形。
這個數(shù)組時包含頂點數(shù)組索引的三角形列表。三角形數(shù)組的大小總是3的倍數(shù)。頂點
可以通過簡單地索引同一頂點來共享。如果網(wǎng)格包含多個子網(wǎng)格(材質(zhì)),三角形列表將包
含所有子網(wǎng)格的所有三角形。建議賦值頂點數(shù)組之后賦值一個三角形數(shù)組,以避免越界錯
誤。
//構(gòu)建一個網(wǎng)格,這個網(wǎng)格包含一個帶有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[]
描述:網(wǎng)格的基本紋理坐標。
//產(chǎn)生一個平面uv坐標
function start(){
var mesh: Mesh=GetComponent(MeshFilter).mesh;
var vertices=mesh.vertices;
var uvs=new Vector2[vertices.lenghth];
fpr(var i=0;i<uvs.Length,i++){
uvs[i]=Vector2(vertices[i].x, vertices[i].z);
}
mesh.uv=uvs;
}
◆ var uv2: Vector2[]
描述:網(wǎng)格的第二個紋理坐標集,如果提供。
//為第二個uv集產(chǎn)生一個平面uv坐標
function start(){
var mesh: Mesh=GetComponent(MeshFilter).mesh;
var vertices=mesh.vertices;
var uvs=new Vector2[vertices.lenghth];
fpr(var i=0;i<uvs.Length,i++){
uvs[i]=Vector2(vertices[i].x, vertices[i].z);
}
mesh.uv2=uvs;
}
◆ var vertexCount: int
描述:網(wǎng)格頂點數(shù)(只讀)
function start(){
var mesh=GetComponent(MeshFilter).sharedMesh;
print(mesh.vertexCount);
}
◆ var vertices: Vector3[]int
描述:返回一個頂點位置的拷貝或賦值一個新的頂點位置數(shù)組。
網(wǎng)格的頂點數(shù)可,以通過賦值一個不同數(shù)量的頂點數(shù)組來改變。注意,如果你調(diào)整了
頂點數(shù)組,那么所有其他頂點屬性(法線,顏色,切線,UV)將被自動地調(diào)整大小。設(shè)置
頂點時,如果沒有頂點被賦值到這個網(wǎng)格那么RecalculateBounds將自動被調(diào)用。
function start(){
var mesh=GetComponent(MeshFilter).sharedMesh;
var vertics=mesh vertices;
fpr(var i=0;i<vertices.Length,i++)
{
vertices[i]+=Vector3.up*Time.deltaTime;
}
mesh.vertices=vertices;
mesh.RecalculateBounds();
}
構(gòu)造函數(shù)
◆ static function Mesh(): Mesh
描述:創(chuàng)建一個空的網(wǎng)格
//創(chuàng)建一個新的網(wǎng)格并將它賦給網(wǎng)格過濾器
function Start(){
var mesh=new Mesh();
GetComponent(MeshFilter).mesh=mesh;
}
函數(shù)
◆ function Clear(): void
描述:清除所有的頂點數(shù)據(jù)和所有的三角形索引。
你應(yīng)該在重建triangles數(shù)組之間調(diào)用這個函數(shù)。
◆ function GetTriangles(submesh: int): int[]
描述:返回子網(wǎng)格的三角形列表。
一個子網(wǎng)格僅僅是一個獨立的三角形列表。當網(wǎng)格渲染器使用多個材質(zhì)時,你應(yīng)該確保
有盡可能多的子網(wǎng)格作為材質(zhì)。
◆ function Optimize(): void
描述:優(yōu)化網(wǎng)格以便顯示。
這個操作將花費一點時間但是會使幾何體顯示的更快。例如,它從三角形中產(chǎn)生三角形
帶。如果你從頭創(chuàng)建一個網(wǎng)格并且想在運行的時候取得更好的運行時性能而不是較高的加
載時間,你應(yīng)該使用它。它三角帶化你的模型為每個頂點緩存位置優(yōu)化三角形,對于導(dǎo)
載時間,你應(yīng)該使用它。它三角帶化你的模型并為每個頂點緩存位置優(yōu)化三角形。對于導(dǎo)
入的模型你不應(yīng)該調(diào)用這個,因為導(dǎo)入流水線已經(jīng)為你做了。
function Start(){
var mesh: Mesh=GetComponent(MeshFilter).mesh;
mesh.Optimize();
}
◆ function RecalculateBounds(): void
描述:從頂點重新計算網(wǎng)格的包圍提。
修改頂點之后你應(yīng)該調(diào)用這個函數(shù)以確保包圍體式正確的。賦值三角形將自動計算
這個包圍體。
function Start(){
var mesh: Mesh=GetComponent(MeshFilter).mesh=mesh;
mesh.RecalculateBounds();
}
◆ function RecalculateNormals(): void
描述:從三角形和頂點重新計算網(wǎng)格的法線。
在調(diào)整頂點之后通常需要更新法線以便反映這個改變。法線是從所有共享的頂點來計
算的。導(dǎo)入的網(wǎng)格有時并不共享所有頂點。例如在UV法線接縫處的點將被分割成兩個點。因
而RecalculateNormals函數(shù)在uv接縫處將創(chuàng)建不平滑的法線,RecalculateNormals不會自動
產(chǎn)生切線,因此bumpmap著色器在調(diào)用RecalculateNormals之后不會工作。然而你可以提
取你自己的切線。
function Start(){
var mesh: Mesh=GetComponent(MeshFilter).mesh;
mesh.RecalculateNormals();
}
◆ function SetTriangles(triangles: int[], submesh: int): void
描述:為子網(wǎng)格設(shè)置多邊形列表
一個子網(wǎng)格僅僅是一個獨立的三角形列表。當網(wǎng)格渲染器使用多個材質(zhì)時,你應(yīng)該確保
有盡可能多的子網(wǎng)格作為材質(zhì)。建議賦值頂點數(shù)組之后賦值一個三角形數(shù)組,以避免越界
錯誤。
繼承的成員
繼承的變量
name 對象的名稱
hideFlages 該物體是夠被隱藏,保存在場景中或被用戶修改?
繼承的函數(shù)
GetInstanceID 返回該物體的實例id。
繼承的類函數(shù)
operator bool 這個物體存在嗎?
Instantiate 克隆original物體并返回這個克隆。
Destroy 移除一個游戲物體,緩存或資源。
DestroyImmediate 立即銷毀物體obj,強烈建議使用Destroy代替。
FindObjectsOfType 返回所有類型為type的激活物體。
FindObjectsOfType 返回第一個類型為type的激活物體。
operator== 比較兩個物體是否相同。
operator != 比較連個物體是否不相同。
DomDestroyOnLoad 卸載場景時確保物體target不被自動銷毀。
PhysicsMaterial
類,繼承自O(shè)bject
載體材質(zhì)描述:如何處理物體碰撞(摩擦,彈性)
參見:Collider
變量
◆ var bounceCombine: PhysicsMaterialCombine
描述:決定彈力是如何組合的。
傳統(tǒng)上彈性屬性依賴于兩種相互接觸的材質(zhì)的組合。然而在游戲中這是不切實的??梢?br>
使用組合模式來調(diào)整兩個材質(zhì)的彈性如何被組合。
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
描述:決定摩擦力是如何組合的。
傳統(tǒng)上摩擦力屬性依賴于兩種相互接觸的材質(zhì)的組合。然而在游戲中這是不切實的。
你可以使用組合模式來調(diào)整兩個材質(zhì)的摩擦力如何被組合。
collider.material.frictionCombine=physicMaterialCombine.Average;
◆ var frictionDirection2: Vector3
描述:有向性方向。如果這個矢量是非零,有向摩擦力被啟用。
dynamicFriction2和staticFriction2將沿著frictionDirection2被應(yīng)用。有向性方向相對于
碰撞器的局部坐標系統(tǒng)。
//使碰撞向前滑動而不是側(cè)滑
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;
構(gòu)造函數(shù)
◆ static function PhysicMaterial(): PhysicMaterial
描述:創(chuàng)建一個新的材質(zhì)
通常只使用collider.material和直接修改附加的材質(zhì)更加簡單。
//創(chuàng)建一個新的材質(zhì)并附加它
function Start(){
var material=new PhysicMaterial();
material.dynamicfriction=1;
collider.material=material;
}
◆ static function PhysicMaterial(name: string):
PhysicMaterial
描述:創(chuàng)建一個新的材質(zhì),命名為name.
//創(chuàng)建一個新的材質(zhì)并附加它
function Start(){
var material=new PhysicMaterial("New Material");
material.dynamicfriction=1
collider.material=material;
}
繼承的成員
繼承的變量
name 對象的名稱
hideFlages 該物體是夠被隱藏,保存在場景中或被用戶修改?
繼承的函數(shù)
GetInstanceID 返回該物體的實例id。
繼承的類函數(shù)
operator bool 這個物體存在嗎?
Instantiate 克隆original物體并返回這個克隆。
Destroy 移除一個游戲物體,緩存或資源。
DestroyImmediate 立即銷毀物體obj,強烈建議使用Destroy代替。
FindObjectsOfType 返回所有類型為type的激活物體。
FindObjectsOfType 返回第一個類型為type的激活物體。
operator== 比較兩個物體是否相同。
operator != 比較連個物體是否不相同。
DomDestroyOnLoad 卸載場景時確保物體target不被自動銷毀
ScriptableObject
類,繼承自O(shè)bject
如果你想創(chuàng)建一個不需要附加到游戲物體的對象,可以從這個類繼承、
這對于那些只存儲數(shù)據(jù)資源是組有用的。
消息傳遞
◆ function OnDisable(): void
描述:當可編輯物體超出范圍時調(diào)用這個函數(shù)
當物體被銷毀的時候這個函數(shù)也會被調(diào)用并可以用于任何清理的代碼。當腳本在編譯
結(jié)束后被加載時,OnDisable將被調(diào)用,然后腳本加載完成后OnDisable將被調(diào)用。
function OnDisable()
{
print(:script was removed");
}
OnDisable不能作為一個coroutine.
◆ function OnEnable(): void
描述:物體被加載時調(diào)用該函數(shù)
function OnEnable()
{
print(:script was enabled");
}
OnEnable不能作為一個coroutine.
類方法
◆ static function CreateInstance(className: string):
ScriptableObject
描述:使用className創(chuàng)建一個可編程物體的實例.
繼承的成員
繼承的變量
name 對象的名稱
hideFlages 該物體是夠被隱藏,保存在場景中或被用戶修改?
繼承的函數(shù)
GetInstanceID 返回該物體的實例id。
繼承的類函數(shù)
operator bool 這個物體存在嗎?
Instantiate 克隆original物體并返回這個克隆。
Destroy 移除一個游戲物體,緩存或資源。
DestroyImmediate 立即銷毀物體obj,強烈建議使用Destroy代替。
FindObjectsOfType 返回所有類型為type的激活物體。
FindObjectsOfType 返回第一個類型為type的激活物體。
operator== 比較兩個物體是否相同。
operator != 比較連個物體是否不相同。
DomDestroyOnLoad 卸載場景時確保物體target不被自動銷毀
GUISkin
類,繼承自ScriptableObject
變量
◆ var box: GUIStyle
描述:用于GUI.Box控件的缺省風(fēng)格
◆ var button: GUIStyle
描述:用于GUI.Button控件的缺省風(fēng)格
◆ var GUIStyle[i]:
描述:
◆ var font: Font
描述:用于所有風(fēng)格的缺省字體。
◆ var horizontalScrollbar: GUIStyle
描述:
◆ var horizontalScrollbarLeftButton: GUIStyle
描述:
◆ var horizontalScrollbarRightButton: GUIStyle
描述:
◆ var horizontalScrollbarThumb: GUIStyle
描述:
◆ var horizontalSlider: GUIStyle
描述:用于GUI.HorizontalSlider控件背景部分的缺省風(fēng)格.
用于決定滑塊可拖動區(qū)域尺寸的填充屬性。
◆ var horizontalSliderThumb: GUIStyle
描述:用于GUI.HorizontalSlider控件中可拖動滑塊的缺省風(fēng)格.
用于決定滑塊尺寸的填充屬性。
◆ var label: GUIStyle
描述:用于GUI.Label控件的缺省風(fēng)格.
◆ var scrollView: GUIStyle
描述:
◆ var settings: GUISettings
描述:使用這個皮膚的空間如何表現(xiàn)得通用設(shè)置。
◆ var textArea: GUIStyle
描述:用于GUI.TextArea控件的缺省風(fēng)格。
◆ var textField: GUIStyle
描述:用于GUI.textField控件的缺省風(fēng)格。
◆ var toggle: GUIStyle
描述:用于GUI.toggle控件的缺省風(fēng)格。
◆ var verticalScrollbar: GUIStyle
描述:
◆ var verticalScrollbarDownButton: GUIStyle
描述:
◆ var verticalScrollbarThumb: GUIStyle
描述:
◆ var verticalScrollbarUpbutton: GUIStyle
描述:
◆ var verticalSlider: GUIStyle
描述:用于GUI.VerticalSlider控件背景部分的缺省風(fēng)格.
用于決定滑塊可拖動區(qū)域尺寸的填充屬性。
◆ var verticalSliderThumb: GUIStyle
描述:用于GUI.VerticalSlider控件中可拖動滑塊的缺省風(fēng)格.
用于決定滑塊尺寸的填充屬性。
◆ var window: GUIStyle
描述:用于GUI.Windows控件的缺省風(fēng)格。
函數(shù)
◆ function FindStyle(styleName: string): GUIStyle
描述:獲取一個命名GUIStyle.
繼承的成員
繼承的變量
name 對象的名稱
hideFlages 該物體是夠被隱藏,保存在場景中或被用戶修改?
繼承的函數(shù)
GetInstanceID 返回該物體的實例id。
繼承的消息傳遞
OnEnable 物體被加載時調(diào)用該函數(shù)
OnDisable 可用編程物體超出范圍時調(diào)用這個函數(shù)
繼承的類函數(shù)
CreateInstance 使用className創(chuàng)建一個可編程物體的實例。
operator bool 這個物體存在嗎?
Instantiate 克隆original物體并返回這個克隆。
Destroy 移除一個游戲物體,緩存或資源。
DestroyImmediate 立即銷毀物體obj,強烈建議使用Destroy代替。
FindObjectsOfType 返回所有類型為type的激活物體。
FindObjectsOfType 返回第一個類型為type的激活物體。
operator== 比較兩個物體是否相同。
operator != 比較連個物體是否不相同。
DomDestroyOnLoad 卸載場景時確保物體target不被自動銷毀。
Shader
類,繼承自O(shè)bject
用于所以渲染的著色器腳本
大多數(shù)高級的渲染都是通過Material類控制的. Shader類類最常用于檢查一個著色器時
否能夠運行在用戶的硬件上(isSupported屬性)并根據(jù)名稱找到著色器(Find方法).
參見:Material類,Materials,ShaderLab documentation.
變量
◆ var isSupported: bool
描述:這個著色器能夠運行在端用戶的顯卡上?(只讀)
如果這個著色器重的設(shè)置和任何fallback函數(shù)被支持,返回真。在實現(xiàn)特定的效果時,
最常使用這個。例如,Unity Pro中的image effects,如果這個著色器不被支持那么Unity將
自動禁用它們。
//如果材質(zhì)的著色器不被支持,禁用渲染器
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
為材質(zhì)著色器下拉框中的名稱。通常的名稱是:"Diffuse", "Bumped Diffuse",
"VertexLit",
"Transparent/Diffuse"等等。
在構(gòu)建時,只包含那些使用中的shader或位置在"Resources"文件夾中shader。
//從腳本中改變shader
function Start()
{
//切換到透明散射著色器
renderer.material.shader=Shader.Find("Transparent/Diffuse");
}
//從代碼創(chuàng)建一個材質(zhì)
function Start()
//使用透明散射著色器創(chuàng)建一個材質(zhì)
var material=new
Material(Shader.Find("Transparent//Diffuse");
material.color=Color.green;
//賦值這個材質(zhì)到渲染器
renderer.material=material;
}
參見:Material類。
◆ static function PropertyToID(name: string): int
描述:為一個著色器屬性名獲取唯一標識。
著色器屬性表示被MaterialPropertyBlock函數(shù)使用。
在Unity中著色器屬性的每個名稱都(例如,_MainTex或_Color)被賦予一個唯一的整型
數(shù),在整個游戲中都不變。
參見:MaterialPropertyBlock.
◆ static function SetGlobalColor(propertyName: string, color:
Color): void
描述:為所以著色器設(shè)置全局顏色屬性。
如果一個著色器需要而材質(zhì)沒有定義它們將使用全局屬性(例如,如果著色器不在
Properties模塊中公開它們).
通常在你有一組定義的著色器并使用相同的"全局"顏色(例如,太陽的顏色)。然后
你可以從腳本中設(shè)置全局屬性,并不需要在所有的材質(zhì)中設(shè)置相同的顏色。
參見:SetGlobalFloat,SetGlobalVector,SetGlobalTexture;Material類,ShaderLab
documentation.
◆ static function SetGlobalFloat(propertyName: string, value:
float): void
描述:為所有著色器設(shè)置全局浮點數(shù)屬性。
如果一個著色器需要而材質(zhì)沒有定義它們將使用全局屬性(例如,如果著色器不在
Properties模塊中公開它們).
通常在你有一組定義的著色器并使用相同的"全局"浮點z數(shù)(例如,自定義霧類型的
密度)。然后你可以從腳本中設(shè)置全局屬性,并不需要在所有的材質(zhì)中設(shè)置相同的浮點數(shù)。
參見:SetGlobalColor,SetGlobalTexture;Material類,ShaderLab
documentation.
◆ static function SetGlobalMatrix(propertyName: string, mat:
Matrix4x4): void
描述:為所有著色器設(shè)置全局矩陣屬性。
如果一個著色器需要而材質(zhì)沒有定義它們將使用全局屬性(例如,如果著色器不在
Properties模塊中公開它們).
參見:SetGlobalColor,SetGlobalFloat;Material類,ShaderLab
documentation.
◆ static function SetGlobalTexture(propertyName: string, tex:
Texture): void
描述:為所有的著色器設(shè)置全局紋理屬性。
如果一個著色器需要而材質(zhì)沒有定義它們將使用全局屬性(例如,如果著色器不在
Properties模塊中公開它們).
通常在你有一組定義的著色器并使用相同的"全局"紋理(例如,自定義散射光照立方
貼圖)。然后你可以從腳本中設(shè)置全局屬性,并不需要在所有的材質(zhì)中設(shè)置相同的紋理。
參見:SetGlobalColor,SetGlobalFloat;Material類,ShaderLab
documentation.
◆ static function SetGlobalVector(propertyName: string, vec:
Vector4): void
描述:為所有著色器設(shè)置全局向量屬性。
如果一個著色器需要而材質(zhì)沒有定義它們將使用全局屬性(例如,如果著色器不在
Properties模塊中公開它們).
通常在你有一組定義的著色器并使用相同的"全局"向量(例如,風(fēng)的方向)。然后你
可以從腳本中設(shè)置全局屬性,并不需要在所有的材質(zhì)中設(shè)置相同的向量。
參見:SetGlobalFloat,SetGlobalColor,SetGlobalTexture;Material類,ShaderLab
documentation.
繼承的成員
繼承的變量
name 對象的名稱
hideFlages 該物體是夠被隱藏,保存在場景中或被用戶修改?
繼承的函數(shù)
GetInstanceID 返回該物體的實例id。
繼承的類函數(shù)
operator bool 這個物體存在嗎?
Instantiate 克隆original物體并返回這個克隆。
Destroy 移除一個游戲物體,緩存或資源。
DestroyImmediate 立即銷毀物體obj,強烈建議使用Destroy代替。
FindObjectsOfType 返回所有類型為type的激活物體。
FindObjectsOfType 返回第一個類型為type的激活物體。
operator== 比較兩個物體是否相同。
operator != 比較連個物體是否不相同。
DomDestroyOnLoad 卸載場景時確保物體target不被自動銷毀。
TerrainData
類,繼承自O(shè)bject
TerrainData類存儲高度圖,細節(jié)網(wǎng)格位置,樹實例,和地形紋理alph圖,
Terrain組件鏈接地形數(shù)據(jù)并渲染它。
變量
◆ var heightmapHeight: int
描述:采樣的地形高度(只讀)
◆ var heightmapWidth: int
描述:采樣的地形寬度(只讀)
◆ var size: Vector3
描述:地形在世界單位下的總大小
函數(shù)
◆ function GetHeights(xBase: int, yBase: int, width: int, height:
int): float[,]
描述:獲取高度圖采樣的一個數(shù)組。
◆ function GetInterpolatedNormal(x: float, y: float): Vector3
描述:在一個給定的位置獲取插值法線。
/x/和y坐標被作為0...1之間正規(guī)化的坐標被指定。
◆ function SetHeights(xBase: int, yBase: int, height: float):
float[,]): void
描述:設(shè)置高度圖采樣的一個數(shù)組。
繼承的成員
繼承的變量
name 對象的名稱
hideFlages 該物體是夠被隱藏,保存在場景中或被用戶修改?
繼承的函數(shù)
GetInstanceID 返回該物體的實例id。
繼承的類函數(shù)
operator bool 這個物體存在嗎?
Instantiate 克隆original物體并返回這個克隆。
Destroy 移除一個游戲物體,緩存或資源。
DestroyImmediate 立即銷毀物體obj,強烈建議使用Destroy代替。
FindObjectsOfType 返回所有類型為type的激活物體。
FindObjectsOfType 返回第一個類型為type的激活物體。
operator== 比較兩個物體是否相同。
operator != 比較連個物體是否不相同。
DomDestroyOnLoad 卸載場景時確保物體target不被自動銷毀。
TextAsset
類,繼承自O(shè)bject
文本文件資源。
你可以在你的工程中使用原始的.txt文件作為資源,并通過這個類獲取它們的內(nèi)容。
變量
描述:文本資源的原始字節(jié)
//通過添加.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文件的文本內(nèi)容作為一個字符串。
var asset: TextAsset;
function Start()
{
print(asset.text);
}
繼承的成員
繼承的變量
name 對象的名稱
hideFlages 該物體是夠被隱藏,保存在場景中或被用戶修改?
繼承的函數(shù)
GetInstanceID 返回該物體的實例id。
繼承的類函數(shù)
operator bool 這個物體存在嗎?
Instantiate 克隆original物體并返回這個克隆。
Destroy 移除一個游戲物體,緩存或資源。
DestroyImmediate 立即銷毀物體obj,強烈建議使用Destroy代替。
FindObjectsOfType 返回所有類型為type的激活物體。
FindObjectsOfType 返回第一個類型為type的激活物體。
operator== 比較兩個物體是否相同。
operator != 比較連個物體是否不相同。
DomDestroyOnLoad 卸載場景時確保物體target不被自動銷毀。
Texture
類,繼承自O(shè)bject
用于處理紋理的基類,包含的功能被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的偏移。在大多數(shù)情況先,紋理的銳化可
以通過使用反走樣過濾來實現(xiàn)。
參見: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在邊界上設(shè)置紋理剪裁以避免包裹的不真實,或者用
TextureWrapMode.Repeat平鋪紋理。參見:TextureWrapMode, texture
assets.
renderer.material.mainTexture.WrapMode=TextureWrapMode.Clamp;
繼承的成員
繼承的變量
name 對象的名稱
hideFlages 該物體是夠被隱藏,保存在場景中或被用戶修改?
繼承的函數(shù)
GetInstanceID 返回該物體的實例id。
繼承的類函數(shù)
operator bool 這個物體存在嗎?
Instantiate 克隆original物體并返回這個克隆。
Destroy 移除一個游戲物體,緩存或資源。
DestroyImmediate 立即銷毀物體obj,強烈建議使用Destroy代替。
FindObjectsOfType 返回所有類型為type的激活物體。
FindObjectsOfType 返回第一個類型為type的激活物體。
operator== 比較兩個物體是否相同。
operator != 比較連個物體是否不相同。
DomDestroyOnLoad 卸載場景時確保物體target不被自動銷毀。
Cubemap
類,繼承自Texture
處理立方貼圖的類,用這個來創(chuàng)建或修改已有的cube map assets.
變量
◆ var format: TextureFormat
描述:紋理中像素數(shù)據(jù)的格式(只讀)
使用這個確定紋理的格式。
構(gòu)造函數(shù)
◆ static function Cubemap(size: int. format: TextureFormat, mipmap:
bool): Cubemap
描述:創(chuàng)建新的空立方貼圖紋理;
在每個面,紋理將是size大小的并且有或沒有mipmap.
通常你會想在創(chuàng)建它之后設(shè)置紋理的顏色,使用SetPixel和Apply函數(shù).
function Start(){
//創(chuàng)建一個新的紋理并將它復(fù)制給渲染器材質(zhì)
var texture=new Cubemap(128, TextureFormat.ARGB32, false)
renderer.material.mainTexture=Texture;
}
參見:SetPixel,Apply函數(shù).
函數(shù)
◆ function Apply(updateMipmaps: bool=true): void
描述:應(yīng)用所有面前的SetPixel改變.
如果updateMipMaps為true.mip等級也被重新計算.這是非常耗時的操作,因此你要在
Apply調(diào)用之間改變盡可能多的像素。參見:SetPixel函數(shù).
◆ function GetPixel(face: CubemapFace, x: int, y: int): Color
描述:返回坐標(face, X, Y)處的像素顏色.
如果像素坐標超出邊界(大于寬/高或小于0),它將基于紋理的包裹模式來限制或重復(fù)。
該函數(shù)只工作再ARGB32,RGB24和Alpha8紋理格式上。對于其他格式,他總是返
回不透的白色。
◆ function GetPixels(face: CubemapFace, miplevel: int):
Color[]
描述:返回立方貼圖一個面的像素顏色.
這個函數(shù)返回立方貼圖面上整個mip等級的像素顏色數(shù)組。
返回的數(shù)組被設(shè)置在2D數(shù)組中,這里,像素被從左到右,從上到下放置(行序)數(shù)
組的大小是所使用的mip等級的寬乘高。默認的mip等級是零(基本紋理)在這種情況下
大小僅為紋理的大小。一般地,mip等級尺寸是mipSize=max(1,width>>miplevel)高度類似。
該函數(shù)只工作在ARGB32,RGB24和Alpha8紋理格式上。對于其他格式,GetPixels被
忽略.
使用GetPixels比重復(fù)調(diào)用GetPixel更快,尤其是對于大紋理,此外GetPixels可以訪
問單獨的mipmap等級.
參見:SetPixels,mipmapCount.
◆ function SetPixel(face: CubemapFace, x: int, y: int, color:
Color): void
描述:在坐標(face,x,y)處設(shè)置像素顏色。
調(diào)用Apply來實際上載改變后的像素到顯卡, 上載是非常耗時的操作,因此你要在
Apply調(diào)用之間改變盡可能多的像素。
該函數(shù)只工作再ARGB32,RGB24和Alpha8紋理格式上。對于其他格式SetPixels被
忽略. 參見:Apply函數(shù).
◆ function SetPixels(color: Color[], face: CubemapFace, mipmapFace,
miplevel: int): void
描述:設(shè)置立方貼圖一個面的像素顏色。
這個函數(shù)取回并改變整個立方貼圖面的像素顏色數(shù)組。調(diào)用Apply來實際上載改變后
的像素到顯卡.
colors數(shù)組被放置在2D數(shù)組中,這里,像素被從左到右,從上到下放置(行序)數(shù)組
的大小必須至少是所使用的mip等級的寬乘高。默認的mip等級是零(基本紋理)在這種
情況下大小僅為紋理的大小。一般地,mip等級尺寸是mipSize=max(1,width>>miplevel)高
度類似。
該函數(shù)只工作在ARGB32,RGB24和Alpha8紋理格式上。對于其他格式,GetPixels被
忽略.
參見:GetPixel, Apply, mipmapCount.
繼承的成員
繼承的變量
name 對象的名稱
hideFlages 該物體是夠被隱藏,保存在場景中或被用戶修改?
繼承的函數(shù)
GetInstanceID 返回該物體的實例id。
繼承的類函數(shù)
operator bool 這個物體存在嗎?
Instantiate 克隆original物體并返回這個克隆。
Destroy 移除一個游戲物體,緩存或資源。
DestroyImmediate 立即銷毀物體obj,強烈建議使用Destroy代替。
FindObjectsOfType 返回所有類型為type的激活物體。
FindObjectsOfType 返回第一個類型為type的激活物體。
operator== 比較兩個物體是否相同。
operator != 比較連個物體是否不相同。
DomDestroyOnLoad 卸載場景時確保物體target不被自動銷毀。
MovieTexture
類,繼承自Texture
Movie Textures是可以播放電影的紋理
它們可以用于過場動畫電影序列,或者渲染電影到場景中。
變量
◆ var audioClip: AudioClip
描述:返回屬于MovieTexture的AudioClip.
注意這是一個特定的AudioClip它總是與電影同步播放音頻。在編輯器重如果你將電影
的audioClip附加到一個源上,它將在電影播放的時候自動開始播放,否則你必須收動開
始它,剪輯只能被附加到一個AudioSource。
◆ var isPlaying: bool
描述:返回電影是否在播放
◆ var isReadyToPlay: bool
描述:如果電影是從網(wǎng)站上下載的,這個返回是夠已經(jīng)下載了足夠的數(shù)據(jù)以便能夠不同
版的播放它。
對于不是來自web的流的電影,這個值是返回真。
function Start(){
www=new WWW(url);
guiTexture.texture=www.movie;
}
function Update(){
if(!guiTexture.texture.isPlaying&&guiTexture.texture.isReadyToPlay)
guiTexture.texture.Play();
}
◆ var loop: bool
描述:這個為真時電影循環(huán)。
函數(shù)
◆ function Pause(): void
描述:暫停播放電影。
function Start(){
renderer.material.mainTexture.Pause();
}
◆ function Play(): void
描述:開始播放電影。
注意運行的MovieTexture將使用大量的CPU資源,并且它將持續(xù)運行直到它被手、
動停止或加載一個新的關(guān)卡。參見:stop
function Start(){
renderer.material.mainTexture.Play();
}
繼承的成員
繼承的變量
width 紋理的像素寬度(只讀)
height 紋理像素高度(只讀)
filterMode 紋理的過濾模式
anisoLevel 紋理的各向異性過濾等級
wrapMode 紋理的包裹模式(Repeat或Clamp)
mipMapBias 紋理的mipMap便宜。
name 對象的名稱
hideFlages 該物體是夠被隱藏,保存在場景中或被用戶修改?
繼承的函數(shù)
描述:渲染紋理的尺寸限制為2的冪次?
當創(chuàng)建圖像后刷處理效果時,你應(yīng)該總是設(shè)置這個為false因為這允許四面
ReaderTexture大小問任意屏幕大小。
當為普通的材質(zhì)和shader使用RenderTexture時,你應(yīng)該總是設(shè)置這個為true因為這允
許像普通紋理一樣使用一個RenderTexture.
◆ var useMipMap: bool
描述:生成mipmap等級?
當設(shè)置為true,渲染到這個紋理將創(chuàng)建并生成mipmap等級面膜人的渲染紋理沒有
mipmap.
這個這斃用于2的冪次方尺寸的渲染紋理(參考isPowerOfTwo).
◆ var width: int
描述:渲染紋理的像素寬度。
注意不像Texture.height屬性,這個是可讀寫的,設(shè)置一個值來改變大小
構(gòu)造函數(shù)
◆ static function ReaderTexture(width: int, height: int, depth:
int): ReaderTexture
描述:創(chuàng)建一個新的RenderTexture對象。
渲染紋理使用width x height尺寸創(chuàng)建,深度緩存為depth位(深度可以是0,16或24)
渲染紋理或設(shè)置為非2的冪次紋理并使用默認的color format
注意創(chuàng)建一個RenderTexture不會立即創(chuàng)建硬件表示。實際的渲染紋理是第一次使用
是創(chuàng)建或當Create被手動調(diào)用時創(chuàng)建。因此在創(chuàng)建渲染紋理之后,你可以設(shè)置額外的變量,如
isPowerOfTwo, format, isCubemap等等。
參見:isPowerOfTwo變量, format變量.
函數(shù)
◆ function Create(): bool
描述:實際創(chuàng)建RenderTexture。
RenderTexture構(gòu)造函數(shù)實際上并沒有創(chuàng)建硬件紋理:默認的紋理第一次創(chuàng)建時被設(shè)置
為active,調(diào)用Create來創(chuàng)建它。如果紋理已經(jīng)被創(chuàng)建Create不做任何事。
參見:Release,isCreated函數(shù).
◆ function IsCreate(): bool
描述:渲染紋理產(chǎn)生了?
RenderTexture構(gòu)造函數(shù)實際上并沒有創(chuàng)建硬件紋理:默認的紋理第一次創(chuàng)建時被設(shè)置
為active,如果用于渲染的的硬件資源被創(chuàng)建了,IsCreate返回ture.
參見:Create,Release函數(shù).
◆ function Release(): void
描述:釋放RenderTexture。
這個函數(shù)釋放由這個渲染紋理使用的硬件資源,紋理本身并不被銷毀,并在使用的時候
被自動再次創(chuàng)建。
參見:Create,IsCreate函數(shù).
◆ function SetBorderColor(color: Color): void
描述:為這個渲染紋理設(shè)置為邊框顏色。
如果顯卡支持"剪裁到邊界",那么任何超出0...1UV范圍的紋理采樣將返回邊界顏色。
◆ function SetGlobalShaderProperty(propertyName: string):
void
描述:賦值這個RenderTexture為一個名為propertyName的全局shader屬性。
類變量
◆ static var active: RenderTexture
描述:激活的渲染紋理。
所有的渲染將進入激活的RenderTexture如果活動的RenderTexture未null所有的東西都
被渲染到主窗口.
當你一個RenderTexture變?yōu)榧せ睿绻€沒有被創(chuàng)建,硬件渲染內(nèi)容將被自動創(chuàng)建。
類方法
◆ static function GetTemporary(width: int, height: int,
depthBuffer: int, format:
RenderTextureFormat=RenderTextureFormat.ARGB32):
RenderTexture
描述:分配一個臨時的渲染紋理。
這個函數(shù)被優(yōu)化,用于當你需呀一個快速RenderTexture來做一些臨時計算時,一旦完
成使用ReleaseTemporary釋放它,這樣,如果需要,另一個調(diào)用能夠開始重用它。
◆ static function ReleaseTemporary(temp: RenderTexture): void
描述:釋放一個由GetTemporary分配的臨時紋理。
如果可能,之后調(diào)用GetTemporary將重用前面創(chuàng)建的RenderTexture,如果沒有請來臨
時RenderTexture,幾幀后它將被銷毀。
繼承的成員
繼承的變量
width 紋理的像素寬度(只讀)
height 紋理像素高度(只讀)
filterMode 紋理的過濾模式
anisoLevel 紋理的各向異性過濾等級
wrapMode 紋理的包裹模式(Repeat或Clamp)
mipMapBias 紋理的mipMap便宜。
name 對象的名稱
hideFlages 該物體是夠被隱藏,保存在場景中或被用戶修改?
繼承的函數(shù)
GetInstanceID 返回該物體的實例id。
繼承的類函數(shù)
operator bool 這個物體存在嗎?
Instantiate 克隆original物體并返回這個克隆。
Destroy 移除一個游戲物體,緩存或資源。
DestroyImmediate 立即銷毀物體obj,強烈建議使用Destroy代替。
FindObjectsOfType 返回所有類型為type的激活物體。
FindObjectsOfType 返回第一個類型為type的激活物體。
operator== 比較兩個物體是否相同。
operator != 比較連個物體是否不相同。
DomDestroyOnLoad 卸載場景時確保物體target不被自動銷毀。
Texture2D
類,繼承自Texture
用于處理紋理的類。使用這個來創(chuàng)建臨時的紋理或修改已經(jīng)存在的texture assets
變量
◆ var format: TextureFormat
描述:紋理中像素數(shù)據(jù)的格式(只讀)
使用這個確定紋理的格式。
◆ var mipmapCount: int
描述:在這個紋理中有多少Mipmap等級(只讀)
返回值也包含基本等級,因此他總是1或更大。
如果你使用GetPixels或SetPixels來取回或修改不同的mip等級時,需要使用
mipmapCount. 例如,你可以改變一個紋理以便每個mip等級以不同的顏色修改. 然后再游
戲中你可以看到那個mip等級被實際使用了。
參見:GetPixels函數(shù),SetPixels函數(shù)。
構(gòu)造函數(shù)
◆ static function Texture2D(width: int, height: int):
Texture2D
描述:創(chuàng)建新的空紋理;
紋理為width乘height大小,TextureFormat為ARGB32帶有mipmap.
通常你會想到在創(chuàng)建它之后設(shè)置紋理的顏色,使用SetPixel,SetPixels和Apply函數(shù)。
function Start(){
//創(chuàng)建一個新的紋理并將它賦給渲染器材質(zhì)
var texture=new Texture2D(128,128);
renderer.material.mainTexture=texture;
}
參見:SetPixel,SetPixels,Apply函數(shù).
◆ static function Texture2D(width: int, height: int, format:
TextureFormat, mipmap: bool):
Texture2D
描述:創(chuàng)建新的空紋理;
紋理為width乘height大小,具有給定的format有或沒有miamap.
通常你會想到在創(chuàng)建它之后設(shè)置紋理的顏色,使用SetPixel,SetPixels和Apply函數(shù)。
創(chuàng)建不允許有壓縮紋理格式的貼圖。
function Start(){
//創(chuàng)建一個新的紋理并將它賦給渲染器材質(zhì)
var texture=new Texture2D(128,128, TextureFofrmat.AGRB32,
false);
renderer.material.mainTexture=texture;
}
參見:SetPixel,SetPixels,Apply函數(shù).
函數(shù)
◆ function Apply(updateMipmaps: bool=true): void
描述:實際地應(yīng)用前面的SetPixel和SetPixels改變.
如果updateMipmaps為true,mipmap等級也被重新計算,使用基本等級作為源.通常
你會想在所有的情況下使用true,除非你已經(jīng)使用SetPixels修改了mip等級。
這是非常耗時的操作,因此你要在Apply調(diào)用之間改變盡可能多的像素。
function Start(){
//創(chuàng)建一個新的紋理并賦值它到渲染器材質(zhì)
var texture=new Texture2D(128,128);
renderer.material.mainTexture=texture;
//用Sierpinski分形模式填充!
for(y=0; y<texture.height; ++y) {
for(x=0; x<texture.width; ++x) {
var color=(x&y)? Color.white: Color.gray;
texture.SetPixel(x, y, color);
}
}
//應(yīng)用所有的SetPixel調(diào)用
texture.Apply();
}
參見:SetPixel,SetPixels函數(shù).
◆ function Compress(highQuality: bool): void
描述:壓縮紋理問DXT格式。
使用這個來壓縮在運行時生成的紋理。壓縮后的紋理使用較少的顯存并可以更快地被
渲染。
壓縮之后,如果原始紋理沒有alpha通道紋理將是DXT1格式,如果它有alpha通道紋理
將是DXT5格式.
傳遞true到highQuality將在壓縮過程中抖動源紋理,這可以幫助提高壓縮質(zhì)量但是會
有一些慢。
如果顯卡不支持壓縮或者紋理已經(jīng)是壓縮格式,那么Compress將不做任何事情。
參見:SetPixels函數(shù).
◆ function EncodeToPNG(): byte[]
描述:編碼這個紋理為PNG格式。
返回的字節(jié)數(shù)組是PNG"文件"。你可以將它們寫在鍵盤上以便獲取PNG文件,并通
過網(wǎng)格發(fā)送它們。
該函數(shù)只工作在ARGB32和RGB24紋理格式上。對于ARGB32紋理編碼的PNG數(shù)
據(jù)將包含alpha通道。對于RGB24紋理不包含alpha通道。PNG數(shù)據(jù)將不包含伽馬矯正或顏
色配置信息。
//存儲截屏為PNG文件。
import System.1();
//立即截屏
function Start(){
UploadPNG();
}
function UploadPNG(){
//只在渲染完成后讀取屏幕緩存
yield WaitForEndOfFrame();
//創(chuàng)建一個屏幕大小的紋理,RGB24格式
var width=Screen.width;
var height=Screen.height;
var tex=new Texture2D(width, height, TextureFormat.RGB24,
false);
//讀取屏幕內(nèi)容到紋理
tex ReadPixels(Rect(0, 0, width, height), 0, 0);
tex.Apply();
//編碼紋理為PNG文件
var bytes=tex.EncodeToPNG();
Destroy(tex);
//處于測試目的,也在工程文件夾中寫一個文件
//File.WriteAllBytes(Application.dataPath+"/../SavedScreen.png",
bytes);
//創(chuàng)建一個Web表單
var form=new WWWForm();
form.AddField("frameCount", Time.frameCount.ToString());
form.AddBinaryData("fileUpload",bytes);
//上傳到一個CGI腳本
var w=WWW("http://localhost/cgi-bin/env.cgi?post",form);
yield w;
if(w.error!=null)
{
print(w.error);
}
else{
print("Finished Uploading Screenshot");
}
}
參見:ReadPixels, WaitForEndOfFrame, LoadImage.
|