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