http://dong2008hong.blog.163.com/blog/static/4696882720140313545332/web
GameObject類,繼承自Object編程
Unity場景中全部實體的基類。
參見:Componentc#
變量數組
◆ var active: bool緩存
描述:遊戲物體是激活的?激活/不激活該遊戲物體,
//不激活該遊戲物體.
gameObject.active=false;網絡
◆ var animation: Animation編輯器
描述:附加到這個遊戲物體的動畫組件(只讀)(若是沒有爲null)
var other: GameObject;
other.animation.Play();ide
◆ var audio: AudioSource函數
描述:附加到這個遊戲物體的聲音組件(只讀)(若是沒有爲null)
var other: GameObject;
other.audio.Play();oop
◆ 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能夠用來選擇性的渲染或忽略投射.
//設置遊戲物體到忽略投射物體的層上
gameObject.layer=2;
◆ var light: Light
描述:附加到這個遊戲物體的光影(只讀)(若是沒有爲null)
var other: GameObject;
other.light.range=10;
◆ var networkView: NetworkView
描述:附加到這個遊戲物體的網絡視(只讀)(若是沒有爲null)
var other: GameObject;
other.networkView.RPC("MyFunction",RPCMode.All,"someValue");
◆ var particleEmitter: ParticleEmitter
描述:附加到這個遊戲物體的粒子發射器(只讀)(若是沒有爲null)
var other: GameObject;
other.particleEmitter.emite=true;
◆ var renderer: Renderer
描述:附加到這個遊戲物體的渲染器(只讀)(若是沒有爲null)
var other: GameObject;
other.renderer.material.color=Color.green;
◆ var rigidbody: Rigidbody
描述:附加到這個遊戲物體的剛體(只讀)(若是沒有爲null)
var other: GameObject;
other.rigidbody.AddForce(1,1,1);
◆ var tag: string
描述:這個遊戲物體的標籤。
標籤能夠用來標識一個遊戲物體。標籤在使用前必須在標籤管理器中定義。
gameObject.tag="Player";
◆ var transform: Transform
描述:附加到這物體的變換. (若是沒有爲null)
var other: GameObject;
other.transform.Translate(1,1,1);
構造函數
◆ static function GameObject(name:string): GameObject
描述:建立一個新的遊戲物體,命名爲name.
Transform老是被添加到該遊戲物體.
//建立一個名爲"Player"的遊戲物體
//並給他添加剛體和立方體碰撞器.
player=new GameObject("Player");
player.AddComponent("Rigidbody");
player.AddComponent("BoxCollider");
◆ static function GameObject(): GameObject
描述:建立一個新的遊戲物體.
Transform老是被添加到該遊戲物體.
//建立一個沒有名稱的遊戲物體
//並給他添加剛體和立方體碰撞器.
player=new GameObject();
player.AddComponent("Rigidbody");
player.AddComponent("BoxCollider");
◆ static function GameObject(name: string, params components: Type[]): GameObject
描述:建立一個遊戲物體並附加特定的組件.
函數
◆ function AddComponent(className: string): Component
描述:添加一個名爲className的組件類型到該遊戲物體.
使用這個函數來改變物體的行爲。你也能夠傳遞腳本的類名來添加腳本到遊戲物體。
有些組件也須要另外一些組件存在於同一個遊戲物體上。這個函數會自動添加須要的組
件,例如若是你添加一個HingeJoint也會自動添加一個Rigidbody.
//添加名爲FoobarScript的腳本到遊戲物體
gameObject.AddComponent("FoobarScript");
//添加球形碰撞器到遊戲物體
gameObject.AddComponent("FoobarCollider");
◆ function AddComponent(componentType: Type): Component
描述:添加一個名爲componentType類型的類到該遊戲物體.
gameObject.AddComponent("FoobarScript");
注意,沒有RemoveComponent(),來移除組件,使用Object.Destroy.
◆ function BroadcastMessage(methodName: string, parameter: object=mull, option:
SendMessageOption=SendMessageOptions.RequireReceiver): void
描述:在這個遊戲物體或其任何子上的每一個MonoBehaviour上調用methodName方法。
經過使用零參數,接收方法能夠選擇忽略parameter。若是options被設置爲
SendMessageOptions.RequireReceiver,那麼若是這個消息沒有被任何組件接收時將打印一個
錯誤消息。
///使用值5調用函數ApplyDamage
gameObject.BroadcastMessage("ApplyDamage",5);
//全部附加到該遊戲物體和其子物體上腳本中的
//ApplyDamage函數都將調用
function ApplyDamage(damage)
{
print(damage)
}
◆ function CompareTag(tag: string): bool
描述:這個遊戲物體被標籤爲tag?
//當即死亡觸發器
//銷燬任何進入到觸發器的碰撞器,這些碰撞器被標記爲Player.
function OnTriggerEnter(other: Collider)
{
if(other.gameObject.CompareTag("Player"))
{
Destroy(other.gameObject);
}
}
◆ function GetComponent(type: Type): bool
描述:若是遊戲物體有type類型的組件就返回它,不然返回null. 你可使用這個函數
訪問內置的組件或腳本.
GetComponent是防衛其餘組件的主要方法。對於Javascript腳本的類型老是腳本顯示
在工程視圖中的名稱。例如:
function Start()
{
var curTransform: Transform;
curTransform=gameObject.GetComponent(Transform);
//這等同於
curTransform=gameObject.transform;
}
function Update()
{
//爲訪問附加在同一遊戲物體上
//其餘腳本內的公用變量和函數
//(ScriptName爲Javascript文件名)
var other: ScriptName=gameObject.GetComponent(ScriptName);
//調用該腳本中的DoSomething函數
other DoSomething();
//設置其餘腳本實例中的另外一個變量
other.someVariable=5;
}
◆ function GetComponent(type: string): Component
描述:返回名爲type的組件,若是遊戲物體上附加了一個就返回它,若是沒有返回null.
出於性能的緣由最好用Type電影GetComponent而不是一個字符串。然而有時你可能
沒法獲得類型,例如當試圖從Javascript中訪問c#時。在那種狀況下你能夠簡單的經過名
稱而不是類型訪問這個組件。例如:
function Update()
{
//爲訪問附加在同一遊戲物體上
//其餘腳本內的公用變量和函數.
//(ScriptName爲Javascript文件名)
var other=gameObject.GetComponent("ScriptName");
//調用該腳本中的DoSomething函數
other.DoSomething().
//設置其餘腳本實例中的另外一個變量
other.someVariable=5;
}
◆ function GetComponentInChildren(type: Type): Component
描述:返回type類型的組件,這個組件位於這個遊戲物體或任何它的子物體上,使用
深度優先搜索。
只有激活的組件被返回。
var script: ScriptName=gameObject.GetComponentInChildren(ScriptName);
script.DoSomething();
◆ function GetComponents(type: Type): Component[]
描述:返回該遊戲物體上全部type類型的組件。
//在這個遊戲物體和全部它的子物體上
//的HingeJoints上禁用彈簧
var hingeJoints=gameObject.GetComponents(HingeJoint);
for(var joint: HingeJoint in hingeJoints)
{
joint.useSpring=false;
}
◆ function GetComponentsInChildren(type: Type, includeInactive: bool=false):
Component[]
描述:返回全部type類型的組件,這些組件位於該遊戲物體或任何它的子物體上。
只有激活的組件被返回。
//在這個遊戲物體和全部它的子物體上
//的全部HingeJoints上禁用彈簧
var hingeJoints=gameObject.GetComponentsInChildren(HingeJoint);
for(var joint: HingeJoint in hingeJoints)
{
joint.useSpring=false;
}
◆ function SampleAnimation(animation: AnimationClip, time: float): void
描述:在一個特定的時間採樣動畫,用於任何動畫目的。
出於性能考慮建議使用Animation接口,這將在給定的time採用animation,任何被動
化的組件屬性都將被這個採樣值替換,多數時候你會使用Animation.Play. SampleAnimation
用於當你須要以無序方式或給予一些特殊的輸入在幀之間跳躍時使用。參見:Aniamtion
//經過採樣每一幀或動畫剪輯
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上調用methodName方法。
經過使用零參數,接收方法能夠選擇忽略參數。若是options被設置爲
SendMessageOptions.RequireReceiver,那麼若是這個消息沒有被任何組件接收時將打印一個
錯誤消息。
//使用值5調用函數ApplyDamage
gameObject.SendMessage("ApplyDamage",5);
//因此附加到該遊戲物體上的腳本中的
//ApllyDamage函數都將調用
function.ApplyDamage(damage)
{
pring(damage);
}
◆ function SendMessageUpwards(methodName: string, value: object=null, options:
SendMessageOption=SendMessageOption.RequireReceiver): void
描述:在這個遊戲物體上的每一個MonoBehaviour和該行爲的祖先上調用名爲methodName
方法。
經過使用零參數,接收方法能夠選擇忽略參數。若是options被設置爲
SendMessageOptions.RequireReceiver,那麼若是這個消息沒有被任何組件接收時將打印一個
錯誤消息。
//使用值5調用函數ApplyDamage
gameObject.SendMessageUpwards("ApplyDamage",5);
//因此附加到該遊戲物體上的腳本中的
//ApllyDamage函數都將調用
function.ApplyDamage(damage)
{
pring(damage);
}
◆ function SetActiveRecursion(rotate: bool): void
描述:設置這個物體和因此子游戲物體的機會狀態。
gameObject.SetActiveRecursion(true);
類方法
◆ static function CreatePrimitive(type: PrimitiveType): GameObject
描述:用幾何的網格渲染器和適當的碰撞器建立一個遊戲物體。
///在場景中建立一個平面,球體和立方體
function Start()
{
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
描述:依據name查找物體並返回它.
若是沒有物體具備名稱name返回null. 若是name包含'/'字符它將像一個路徑名同樣穿
越層次,這個函數只返回激活的遊戲物體。
出於性能考慮建議不要在每幀中都是有該函數,而是在開始時調用並在成員變量中緩存結果
或者用GameObject.FindWithTag.
//這返回場景中名爲Hand的遊戲物體.
hand=GameObject.Find("Hand");
//這將返回名爲Hand的遊戲物體.
//在層次試圖中Hand也許沒有父!
hand=GameObject.Find("/Hand");
//這將返回名爲Hand的遊戲物體.
//它是Arm>Monster的子.
//在層次試圖中Monster也許沒有父!
hand=GameObject.Find("/Monster/Arm/Hand");
//這將返回名爲Hand的遊戲物體.
//它是Arm>Monster的子.
//Monster有父.
hand=GameObject.Find("/Monster/Arm/Hand");
這個函數最經常使用與在加載時自動連接引用到其餘物體,例如,在MonoBehaviour.Awake
或MonoBehaviour.Start內部. 處於性能考慮你不該該在每幀中調用這個函數,例如
MonoBehaviour.Update內. 一個通用的模式是在MonoBehaviour.Start內將一個遊戲物體賦給
一個變量. 並在MonoBehaviour.Update中使用這個變量.
//在Start中找到Hand並在每幀中選擇它
private var hand: GameObject;
function Start()
{
hand=GameObject.Find("/Monster/Arm/Hand");
}
function Update()
{
hand.transform.Rotate(0,100*Time.deltaTime,0);
}
◆ static function FindGameObjectsWithTag(tag: string): GameObject[]
描述:返回標記爲tag的激活物體列表,若是沒有發現返回null.
標籤在使用前必須在標籤管理中定義。
//在全部標記爲"Respawn"的物體位置處
//實例化respawnPrefab
var respawnPrefab: GameObject;
var respawns=GameObject.FindGameObjectsWithTag("Respawn");
for(var respawn in respawns)
Instantiate(respawnPrefab, respawn.position, respawn.rotation);
//打印最接近的敵人的名稱
print(FindClosestEnemy().name);
//找到最近的敵人的名稱
function FindClosestEnemy(): GameObject
{
//找到因此標記爲Enemy的遊戲物體
var gos: GameObject[]
gos=GameObject.FindGameObjectsWithTag("Enemy");
var closest: GameObject;
var distance=Mathf.Infinity;
var position=transform.position;
//遍歷它們找到最近的一個
for(var go: GameObject in gos)
{
var diff=(go.transform.position-position);
var curDistance=diff.sqrMagnitude;
if(curDistance<distance)
{
closest=go;
distance=curDistance;
}
}
return closest;
}
◆ static function FindGWithTag(tag: string): GameObject
描述:返回標記爲tag的一個激活遊戲物體,若是沒有發現返回null.
標籤在使用前必須在標籤管理中定義。
//在標記爲"Respawn"的物體位置處
//實例化一個respawnPrefab
var respawnPrefab: GameObject;
var respawns=GameObject.FindWithTag("Respawn");
Instantiate(respawnPrefab, respawn.position, respawn.rotation);
繼承的成員
繼承的變量
name 對象的名稱。
hideFlags 該物體是夠被隱藏,保存在場景中或被用戶修改?
繼承的函數
GetInstanceID 返回該物體的實例id。
繼承的類函數
operator bool 這個物體存在嗎?
Instantiate 克隆original物體並返回這個克隆。
Destroy 移除一個遊戲物體,組件或資源。
DestroyImmediate 當即銷燬物體obj。強烈建議使用Destroy代替。
FindObjectsOfType 返回全部類型爲type的激活物體。
FindObjectsOfType 返回第一個類型爲type的激活物體。
operator== 比較兩個物體是否相同。
operator != 比較兩個物體是否不相同。
DontDestroyOnLoad 加載新場景時確保物體target不被自動銷燬。
這與使用帶有"_MainTex"名稱的GetTextureOffset或SetTextureOffset相同。
//基於時間滾動主紋理
var scrollSpeed=0.5;
function Update()
{
var offset=Time.time*scrollspeed;
renderer.material.mainTextureOffset=Vector2(offset,0);
}
參見:SetTextureOffset.GetTextureOffset.
◆ var mainTextureScale: Vector2
描述:主材質的紋理縮放。
這與使用帶有"_MainTex"名稱的GetTextureScale或SetTextureScale相同。
function Update()
{
var scalex=Mathf.Cus(Timetime)*0.5+1;
var scaleY=Mathf.Sin(Timetime)*0.5+1;
renderer.material.mainTextureScale=Vector2(scaleX,scaleY);
}
參見:SetTextureScale.GetTextureScale.
◆ var passCount: int
描述:在這個材質中有多少個pass(只讀).
這個最經常使用在使用GL類之間繪製的代碼中(只限於Unity Pro). 例如,Image Effects使用
材質來實現屏幕後期處理. 對材質中的每個pass(參考SetPass)它們激活並繪製一個全屏
四邊形。
這裏是一個全屏圖形效果的例子,它反轉顏色。添加這個腳本到相機並在播放模式中
查看。
private var mat: Material;
function Start()
{
mat=new Material(
"Shader"Hidden/Invert"{"+
"SubShader{"+
"Pass{"+
"ZTestAlways Cull Off ZWrite Off"+
"SetTexture[_RenderTex]{combine one-texture}"+
"}"+
"{"+
"}"+
);
}
function OnRenderImage(source: RenderTexture, dest: RenderTexture){
RenderTexture.active=dest;
source.SetGlobalShaderProperty("_RenderTex");
GL.PushMatrix();
GL.LoadOrtho();
//對於材質中的每一個pass(這裏只有一個)
for(var i=0; i<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函數,GL類,ShaderLab documentation.
◆ var renderQueue: int
描述:這個材質的渲染隊列(只讀)
默認地材質使用shader的render queue,你可使用這個變量重載該渲染隊列。注意一
旦渲染隊列在該材質上被設置,它將保持這個值,集市之後shader被改變爲不一樣的一個值。
渲染隊列值須要時正的才能正常工做。
參見:Shader.renderQueue, RenderQueue tag.
◆ var shader: Shader
描述:該材質使用的着色器。
//按下空格鍵時,
//在Diffuse和Transparent/Diffuse着色器之間切換
private var shader1=Shader.Find("Diffuse");
private var shader2=Shader.Find("Transparent/Diffuse");
function Update()
{
if(Input.GetButtonDown("Jump"))
{
if(renderer.material.shader--shader1)
rendere.material.shader=shader2;
else
renderer.material.shader=shader1;
}
}
參見:Shader.Find方法,Material, ShaderLab documentation.
構造函數
◆ static function Material(contents: string): Material
描述:從一個源shader字符串建立一個材質。
若是你有一個實現自定義特效的腳本,你須要使用着色器和材質實現全部的圖像設置。
在你的腳本內使用這個函數建立一個自定義的着色器和材質。在建立材質後,使用SetColor,
SetTexture, SetFloat, SetVector, SetMatrix來設置着色器屬性值。
//建立一個附加混合材質並用它來渲染
var color=Color.white;
function Start()
{
var shader Text=
"shader"Alpha Additive"{"+
Properties{_Color("Main Color", Color)=(1,1,1,0)}"+
"SubShader {"+
"Tags {"Queue"="Transparent"}"+
"Pass {"+
"Blend One One ZWrite Off ColorMask RGB"+
"Material {Diffuse[_Color]Ambient[_Color]}"+
"Lighting On"+
"SetTexture[_Dummy]{combine primary double, primary}"+
"}"+
"}"+
"}";
renderer.material=new Material(shaderText);
renderer.material.color=color;
}
參見:ShaderLab documentation.
函數
◆ function CopyPropertiesFormMaterial(mat: Material): void
描述:從其餘材質拷貝屬性到這個材質。
◆ function GetColor(propertyName: string): Color
描述:獲取一個命名的顏色值。
數多shader使用超過一個顏色,使用GetColor來獲取propertyName顏色。
Unity內置着色器使用的普通顏色名稱;
"_Color"爲材質的主顏色。這也可以經過color屬性訪問。
"_SpecColor"爲材質的反射顏色(在specular/glossy/vertexlit着色器中使用)。
"_Emission"爲材質的散射顏色(用在reflective着色器中使用)。
print(renderder.material.GetColor("_SpecColor));
參見:color屬性,SetColor.
◆ function GetFloat(propertyName: string): float
描述:獲取一個命名的浮點值。
參見:SetFloat, Materials, ShaderLab documentation.
◆ function GetMatrix(propertyName: string): Matrix4x4
描述:從該shader中獲取命名矩陣的值。
這個最經常使用於自定義的shader,其中須要額外的矩陣參數,矩陣參數不須要在材質檢
視面板中公開,可是可以在腳本中經過SetMatrix和GetMatrix來設置和查詢。
參見:SetMatrix, Materials, ShaderLab documentation.
◆ function GetTag(taf: string, searchFallbacks: bool, defaultValue: string=""): string
描述:獲取材質的shader標籤值。
若是材質的shader沒有定義標籤,defaultValue被返回。
若是searchFallbacks爲true那麼這個函數將在全部的子shader和全部後備中查找標籤。
若是searchFallbacks爲false只在當前查詢的子shader中查找這個標籤。
使用不搜索後備的GetTag能夠檢視如今使用的是哪一個子shader:添加一個自定義具備
不一樣值的標籤到每一個子shader,而後再運行時查詢這個值。例如,Unity Pro的水使用這個
函數來檢測shader什麼時候退化爲沒有反射,而後關閉反射相機。
◆ function GetTexture(propertyNmae: string): Texture
描述:獲取一個命名紋理。
數多shader使用超過一個紋理。使用GetTexture來獲取propertyName紋理。
Unity內置着色器使用的普通紋理名稱;
"_MainTex"爲主散射紋理. 這也可以經過mainTexture屬性訪問。
"_BumpMap"爲法線貼圖。
"_LightMap"爲光照貼圖。
"_Cube"爲發射立方體貼圖。
function Start()
{
var tex=renderer.material.GetTexture("_BumpMap");
if(tex)
print("My bumpmap is "+ tex.name);
else
print("I have no bumpmap!");
}
參見:mainTexture屬性,SetTexture.
◆ function GetTextureOffset(propertyName: string): Vector2
描述:獲取紋理propertyName的位置偏移。
Unity內置着色器使用的普通紋理名稱;
"_MainTex"爲主散射紋理. 這也可以經過mainTextureOffset屬性訪問。
"_BumpMap"爲法線貼圖。
"_LightMap"爲光照貼圖。
"_Cube"爲發射立方體貼圖。
參見:mainTextureOffset屬性,SetTextureOffset.
◆ function GetTextureScale(propertyName: string): Vector2
描述:獲取紋理propertyName的位置縮放。
Unity內置着色器使用的普通紋理名稱;
"_MainTex"爲主散射紋紋理. 這也可以經過mainTextureOffset屬性訪問。
"_BumpMap"爲法線貼圖。
"_LightMap"爲光照貼圖。
"_Cube"爲發射立方體貼圖。
參見:mainTextureScale屬性,SetTextureScale.
◆ function GetVector(propertyName: string): Vector4
描述:獲取一個命名向量的值。
在Unity shader中四組件向量和顏色是相同的。GetVector does exactly the same as
GetColor just the input data type is different(xyzw in the vector becomes rgba in the color).
See Also: GetColor, SetVector.
◆ function HasProperty(propertyName: string): bool
描述:檢查材質的shader是否有給定名稱的屬性。
參見:mainTextureScale屬性,SetTextureScale.
◆ function Lerp(Start: Material, end: Material, t: float): void
描述:在兩個材質間插值屬性。
使一個材質的全部顏色和浮點值從start到end基於t來插值。
當t爲0,全部的值爲start。
當t爲1,全部的值爲end。
一般你想要插值的兩個材質是相同的(使用相同的着色器和紋理)除了顏色和浮點值。
而後你使用Lerp來混合它們。
//混合兩個材質
var material1: Material;
var material2: Material;
var duration=2.0;
function Start()
{
//首先使用第一個材質
renderer.material=material[];
}
function Update()
{
//隨着時間來回變化材質
var lerp=Mathf.PingPong(Time.time, duration)/duration;
renderer.material.Lerp(material1, materail2, lerp);
}
參見:Material.
◆ function SetColor(propertyName: string, color: Color): void
描述:設置一個命名的顏色值。
數多shader使用超過一個顏色。使用SetColor來獲取propertyName顏色.
Unity內置着色器使用的普通顏色名稱;
"_Color"爲材質的主顏色. 這也可以經過color屬性訪問.
"_SpecColor"爲材質的反射顏色(在specular/glossy/vertexlit着色器中使用).
"_Emission"爲材質的散射顏色(用在vertexlit着色器中).
"_ReflectColor"爲材質的反射顏色(用在reflective着色器中).
function Start()
{
//設置Glossy着色器這樣可使用反射顏色
renderer.material.shader=Shader.Find("Glossy");
//設置紅色的高光
renderer.material.SetColor("_SpecColor", Color.red);
}
參見:color屬性,GetColor.
◆ function SetFloat(propertyName: string, value: float): void
描述:設置一個命名的浮點值。
function Start()
{
//在這個材質上使用Glossy着色器
renderer.material.shader=Shader.Find("Glossy");
}
function 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設置一個命名矩陣。
這個最經常使用於自定義的shader,其中須要額外的矩陣參數,矩陣參數不須要在材質檢
視面板中公開,可是可以在腳本中經過SetMatrix和GetMatrix來設置和查詢。
var rotateSpeed=30;
var texture: Texture;
function Start(){
//用於一個着色器建立一個新的材質
//這個着色器旋轉紋理
var m=new Material
(
"Shader"Rotation Texture"{"+
"Properties{_Main Tex("Base",2D)="white"{}}"+
"SubShader{"+
"Pass{"+
"Material{Diffuse(1,1,0)Ambient(1,1,1,0)}"+
"Lighting On"+
"SetTexture[_MainTex]{"+
"matrix[_Rotation]"+
"combing texture*primary double.texture"+
"{"+
"}"+
"{"+
"}"
);
m.mainTexture=texture;
renderer.material=m;
}
function Update()
}
//爲這個着色器構建一個旋轉矩陣並設置它
var rot=Quaternion, Euler(0,0,Time.time*rotateSpeed);
var m=Matrix4x4.TRS(Vector3.zero,rot.Vector3(1,1,1));
renderer.material.SetMatrix(*_Rotation", m);
}
///////////////////////////////////////////////////
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使用
材質來實現屏幕後期處理,對材質中的每個pass它們激活並繪製一個全屏四邊形。
若是SetPass返回假,你不該該渲染任何東西。
這裏是一個全屏圖像效果的例子,它反轉顏色,添加這個腳本到相機並在播放模式中
查看。
private var mat: Material;
function Start()
{
mat=new Material(
"Shader"Hidden/Invert"{"+
"SubShader{"+
"Pass{"+
"ZTest Always Cull Off ZWrite Off"+
"SetTexture[_RenderTex]{combine one-texture}"+
"}"+
"}"+
"}"
);
}
function OnRenderImage(source: RenderTexrure, dest: RenderTexture){
RenderTexture.active=dest;
source.SetGlobalShaderProperty("_RenderTex");
GL.PushMatrix();
GL.LoadOrtho();
//激活第一個pass(這裏咱們知道它只有僅有的pass)
mat.SetPass(0);
//繪製一個四邊形
GL..Begin(GL.QUADS);
GL..TexCoord2(0,0);GL..Vertex3(0,0,0.1);
GL..TexCoord2(1,0);GL..Vertex3(1,0,0.1);
GL..TexCoord2(1,1);GL..Vertex3(1,1,0.1);
GL..TexCoord2(0,1);GL..Vertex3(0,1,0.1);
GL..End();
GL.PopMatrix();
}
參見:passCount屬性,GL類,ShaderLab documentation.
◆ function SetTexture(propertyName: string, texture: Texture): void
描述:設置一個命名紋理.
數多shader使用超過一個紋理。使用SetTexture來改變propertyName紋理。
Unity內置着色器使用的普通紋理名稱:
"_MainTex"爲主射散紋理,這也可以經過mainTexture屬性訪問.
"_BumapMap"爲法線貼圖.
"_LightMap"爲光照貼圖.
"_Cub"爲放射立方體貼圖.
//基於實際滾動主紋理
var scrollSpeed=0.5;
function Update(){
var offset=Time.time*scrollSpeed;
rendereer.material.SetTextureOffset("_MatrixTex", Vector2(offset,0));
}
參見:mainTextureOffset屬性,GetTextureOffset.
◆ function SetTextureScale(propertyName: string, scale: Vector2): void
描述:設置紋理propertyName的位置縮放.
Unity內置着色器使用的普通紋理名稱:
"_MainTex"爲主射散紋理,這也可以經過mainTexture屬性訪問.
"_BumapMap"爲法線貼圖.
"_LightMap"爲光照貼圖.
"_Cub"爲放射立方體貼圖.
參見:mainTextureScale屬性,GetTextureScale.
function Update()
{
//以一個流行的放式動畫主紋理縮放!
var scaleX=Mathf.Cos(Time.time)*0.5+1;
var scaleY=Mathf.Sin(Time.time)*0.5+1;
rendereer.material.SetTextureScale("_MainTex", Vector2(ScaleX,ScaleY));
}
◆ function SetVector(propertyName: string, Vector: Vector4): void
描述:設置一個命名的向量值.
在Unity shader中四組件向量和顏色是相同的。SetVector與SetColor徹底相同,僅僅
是輸入數據類型不一樣(向量的xyzw變爲顏色的rgba).
參見:SetColor, GetVector.
繼承的成員
繼承的變量
name 對象的名稱。
hideFlags 該物體是夠被隱藏,保存在場景中或被用戶修改?
繼承的函數
GetInstanceID 返回該物體的實例id。
繼承的類函數
operator bool 這個物體存在嗎?
Instantiate 克隆original物體並返回這個克隆。
Destroy 移除一個遊戲物體,組件或資源。
DestroyImmediate 當即銷燬物體obj。強烈建議使用Destroy代替。
FindObjectsOfType 返回全部類型爲type的激活物體。
FindObjectsOfType 返回第一個類型爲type的激活物體。
operator== 比較兩個物體是否相同。
operator != 比較兩個物體是否不相同。
DontDestroyOnLoad 加載新場景時確保物體target不被自動銷燬。
Mesh
類,繼承自Object
一個類容許你從腳本中建立或修改網格。
網格包含頂點和多個三角形數組。參考Procedural example project獲取石油網格接口的
例子。
三角數組只是頂點索引數組;三個索引爲一個三角形。
對於每一個頂點能夠有一個法線,兩個紋理座標,顏色和切線。這些都是可選的並能夠
去掉。全部的頂點信息被存儲相同尺寸的不一樣數組中,所以若是的網格有10個頂點,你
應該有大小爲10的數組用於法線和其餘屬性。
可能有三件事,你可能想要使用可調整的網格。
1. 從頭開始構建網格:應該老是按照以下的順序:1)賦值vertices2)賦值triangles
function start(){
var mesh=new Mesh();
GetComponent(MeshFilter).mesh=mesh;
mesh.vertices=newVertices;
nesh.uv=newUV;
mesh.triangles=newTriangles;
}
2. 沒幀修改頂點屬性:1)獲取頂點,2)修改它們,3)將它們賦值回網格.
function Update(){
var mesh: mesh=GetComponent(MeshFilter).mesh;
var vertices=newVertices;
var normals=mesh.normals;
for(var i=0,i<vertices.length,i++)
{
vertices[i]+=mormals{i}*Mathf.Sin(Time.time);
}
mesh.vertices=vertices;
}
3. 連續地改變網格三角形和頂點:1)調用Clear開始刷心,2)賦值頂點和其餘屬性,3)賦
值三角形索引.
在賦值新的頂點或三角形時調用Clear是重要的。Unity老是檢查提供的三角形索引,
它們是否沒有超出頂點邊界。電影Clear而後賦值頂點而後三角形,確保沒你沒有超出數據邊
界。
function Update(){
var mesh: mesh=GetComponent(MeshFilter).mesh;
mesh.Clear();
mesh.vertices=newVertices;
nesh.uv=newUV;
mesh.triangles=newTriangles;
}
變量
◆ var bindposes: Matrix4x4[]
描述:綁定的姿式。每一個索引的綁定姿式使用具備相同的索引的骨骼。
當骨骼在綁定姿式中時,綁定姿式是骨骼變換矩陣的逆。
function Start(){
gameObject.AddComponent(Animation);
gameObject.AddComponent(SkinnedMeshRenderer);
var renderer: SkinnedMeshRenderer=GetComponent(SkinnedMeshRenderer);
//構建基本網格
var mesh: Mesh-new Mesh();
mesh.vertices=[Vector3(-1,0,0), Vector3(1,0,0), Vector3(-1,5,0), Vector3(1,5,0)];
mesh.uv=[Vector2(0,0), Vector2(1,0), Vector2(0,1), Vector2(1,1)];
mesh.triangles=[0,1,2,1,3,2];
mesh.RecalculateNormals();
//賦網格到網格過濾器和渲染器
renderer.material=new Material(Shader.Find("Diffuse"));
//賦骨骼權值到網格
//使用兩個骨骼. 一個用於上部的頂點,一個用於下部的頂點
var weights=new BoneWeight[4];
weights[0].boneIndex0=0;
weights[0].weight0=1;
weights[1].boneIndex0=0;
weights[1].weight0=1;
weights[2].boneIndex0=1;
weights[2].weight0=1;
weights[3].boneIndex0=1;
weights[3].weight0=1;
mesh.boneWeights=weights;
//建立骨骼變換並綁定姿式
//一個骨骼在頂部一個在底部
var bones=new Transform[2];
var bindPoses=new Matrx4x4[2];
bones[0]=new GameObject("Lower").transform;
bones[0]parent=transform;
//設置相對於父的位置
bones[0].localRotation=Quaternion.identity;
bones[0].localPosition=Vector3.zero;
//綁定姿式是骨骼的逆變換矩陣
//在這種狀況下咱們也要使這個矩陣市相對與根的
//這樣咱們就可以隨意移動根物體了
bindPose[0]=bones[0].worldToLocalMatrix*transform.localToWorldMatrix;
bones[1]=new GameObject("Upper").transform;
bones[1]parent=transform;
//設置相對於父的位置
bones[1].localRotation=Quaternion.identity;
bones[1].localPosition=Vector3.(0,5,0);
//綁定姿式是骨骼的逆變換矩陣
//在這種狀況下咱們也要使這個矩陣市相對與根的
//這樣咱們就可以隨意移動根物體了
bindPose[1]=bones[1].worldToLocalMatrix*transform.localToWorldMatrix;
.mesh.bindposes=bindPoses;
.//賦值骨骼並綁定姿式
.renderer.bones=bones;
.renderer.sharedMesh=mesh;
//賦值一個簡單的揮動動畫到底部的骨骼
var curve=new AnimationCurve();
curve.keys=[new Keyframe(0,0,0,0:,new Keyframe(1,3,0,0),new Keyframe(2,0.0,0,0,)];
//使用曲線建立剪輯
var clip=new AnimationClip();
clip.SetCurve("Lower", Transform,"m_LocalPosition.z", curve);
//添加並播放剪輯
animation.AddClip(clip, "test");
animation.Play("test"); }
◆ var boneWeights: BondWeight[]
描述:每一個頂點的骨骼權重
數組的大小與vertexCount相同或爲空。
每一個頂點能夠被至多4個不一樣骨骼影響。4個骨骼的權值加和應該爲1,
function Start(){
gameObject.AddComponent(Animation);
gameObject.AddComponent(SkinnedMeshRenderer);
var renderer: SkinnedMeshRenderer=GetComponent(SkinnedMeshRenderer);
//構建基本網格
var mesh: Mesh-new Mesh();
mesh.vertices=[Vector3(-1,0,0), Vector3(1,0,0), Vector3(-1,5,0), Vector3(1,5,0)];
mesh.uv=[Vector2(0,0), Vector2(1,0), Vector2(0,1), Vector2(1,1)];
mesh.triangles=[0,1,2,1,3,2];
mesh.RecalculateNormals();
//賦網格到網格過濾器和渲染器
renderer.material=new Material(Shader.Find("Diffuse"));
//賦骨骼權值到網格
//使用兩個骨骼. 一個用於上部的頂點,一個用於下部的頂點
var weights=new BoneWeight[4];
weights[0].boneIndex0=0;
weights[0].weight0=1;
weights[1].boneIndex0=0;
weights[1].weight0=1;
weights[2].boneIndex0=1;
weights[2].weight0=1;
weights[3].boneIndex0=1;
weights[3].weight0=1;
mesh.boneWeights=weights;
//建立骨骼變換並綁定姿式
//一個骨骼在頂部一個在底部
var bones=new Transform[2];
var bindPoses=new Matrx4x4[2];
bones[0]=new GameObject("Lower").transform;
bones[0]parent=transform;
//設置相對於父的位置
bones[0].localRotation=Quaternion.identity;
bones[0].localPosition=Vector3.zero;
//綁定姿式是骨骼的逆變換矩陣
//在這種狀況下咱們也要使這個矩陣市相對與根的
//這樣咱們就可以隨意移動根物體了
bindPose[0]=bones[0].worldToLocalMatrix*transform.localToWorldMatrix;
bones[1]=new GameObject("Upper").transform;
bones[1]parent=transform;
//設置相對於父的位置
bones[1].localRotation=Quaternion.identity;
bones[1].localPosition=Vector3.(0,5,0);
//綁定姿式是骨骼的逆變換矩陣
//在這種狀況下咱們也要使這個矩陣市相對與根的
//這樣咱們就可以隨意移動根物體了
bindPose[1]=bones[1].worldToLocalMatrix*transform.localToWorldMatrix;
mesh.bindposes=bindPoses;
//賦值骨骼並綁定姿式
renderer.bones=bones;
renderer.sharedMesh=mesh;
//賦值一個簡單的揮動動畫到底部的骨骼
var curve=new AnimationCurve();
curve.keys=[new Keyframe(0,0,0,0:,new Keyframe(1,3,0,0),new Keyframe(2,0.0,0,0,)];
//使用曲線建立剪輯
var clip=new AnimationClip();
clip.SetCurve("Lower", Transform,"m_LocalPosition.z", curve);
//添加並播放剪輯
animation.AddClip(clip, "test");
animation.Play("test");
}
◆ var bounds: Bounds
描述:網格的包圍體。
這個是在網格的局部座標空間中軸對齊的包圍盒(不會受到變換的影響)參考世界空
間中的Renderer.Bounds屬性。
//產生一個屏幕UV座標,這個與網格尺寸無關
//經過縮放包圍盒尺寸的頂點
function Start(){
var mesh: Mesh=GetComponent(MeshFilter).mesh;
var.vertices=mesh vertices;
var.uv=new Vector2[vertices.length];
var.bounds=mesh.bounds;
for (var i=0,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[]
描述:返回網格的頂點顏色。
若是沒有頂點顏色可用,一個空的數組將被返回。
//設置y=0的頂點位紅色,y=1的訂單爲綠色.
//(注意大多數設置着色器不顯示頂點顏色,你能夠
//使用例如,一個粒子渲染器來查看頂點顏色)
function Start(){
var mesh: Mesh=GetComponent(MeshFilter).mesh;
var.vertices=mesh vertices;
var.color=new Color[Vertices.Length];
for (var i=0,i<vertices.length;i++){
colors[i]=Color.Lerp(Colored, Color.green, vertices[i].y);
}
mesh.colors=colors;
}
◆ var normals: Vectors[]
描述:網格的法線。
若是網格布包含發行,一個空的數組將被返回。
//以speed每幀旋轉法線
var speed=100.0;
function Update(){
var mesh: Mesh=GetComponent(MeshFilter).mesh;
var.normals=mesh.normals;
var rotation=Quaternion.AngleAxis(Time.deltaTime*speeed, Vector3.up);
for (var i=0,i<normals.length;i++){
normals[i]=rotation*normals[i];
}
mesh.normals=normals;
}
◆ var subMeshCount: int
描述:子網格數。每一個材質有一個不一樣的三角形列表。
◆ var tangents: Vector4[]
描述:網格的切線。
切線主要用於bumpmap shader中。切線是一個單位長度向量,a沿着網格表面指向水平
(U)紋理方向。Unity中的切線是由Vector4表示的,x.y.z組件定義向量,若是須要w用來翻
轉副法線。
Unity經過計算向量和切線之間的叉乘來計算表面的向量(副法線),並乘以
tangnent.w.所以w應該是1或-1。
若是你想在網格上使用凹凸貼圖着色器,你須要本身計算切線。賦值normals或使用
RecalculateNormals以後計算切線。
◆ var tirangles: int[]
描述:一個數組包含網格中全部的三角形。
這個數組時包含頂點數組索引的三角形列表。三角形數組的大小老是3的倍數。頂點
能夠經過簡單地索引同一頂點來共享。若是網格包含多個子網格(材質),三角形列表將包
含全部子網格的全部三角形。建議賦值頂點數組以後賦值一個三角形數組,以免越界錯
誤。
//構建一個網格,這個網格包含一個帶有uv的三角形.
function start(){
gameObject.AddComponent("MeshFilter);
gameObject.AddComponent("MeshRenderer);
var.mesh: Mesh=GetComponent(MeshFilter).mesh;
mesh.Clear();
mesh.vertices=[Vector3(0,0,0), Vector3(0,1,0), Vector3(1,1,0)];
mesh.uv=[Vector2(0,0), Vector2(0,1), Vector2(1,1)];
mesh.triangles=[0,1,2];
}
◆ var uv: Vector2[]
描述:網格的基本紋理座標。
//產生一個平面uv座標
function start(){
var mesh: Mesh=GetComponent(MeshFilter).mesh;
var vertices=mesh.vertices;
var uvs=new Vector2[vertices.lenghth];
fpr(var i=0;i<uvs.Length,i++){
uvs[i]=Vector2(vertices[i].x, vertices[i].z);
}
mesh.uv=uvs;
}
◆ var uv2: Vector2[]
描述:網格的第二個紋理座標集,若是提供。
//爲第二個uv集產生一個平面uv座標
function start(){
var mesh: Mesh=GetComponent(MeshFilter).mesh;
var vertices=mesh.vertices;
var uvs=new Vector2[vertices.lenghth];
fpr(var i=0;i<uvs.Length,i++){
uvs[i]=Vector2(vertices[i].x, vertices[i].z);
}
mesh.uv2=uvs;
}
◆ var vertexCount: int
描述:網格頂點數(只讀)
function start(){
var mesh=GetComponent(MeshFilter).sharedMesh;
print(mesh.vertexCount);
}
◆ var vertices: Vector3[]int
描述:返回一個頂點位置的拷貝或賦值一個新的頂點位置數組。
網格的頂點數可,以經過賦值一個不一樣數量的頂點數組來改變。注意,若是你調整了
頂點數組,那麼全部其餘頂點屬性(法線,顏色,切線,UV)將被自動地調整大小。設置
頂點時,若是沒有頂點被賦值到這個網格那麼RecalculateBounds將自動被調用。
function start(){
var mesh=GetComponent(MeshFilter).sharedMesh;
var vertics=mesh vertices;
fpr(var i=0;i<vertices.Length,i++)
{
vertices[i]+=Vector3.up*Time.deltaTime;
}
mesh.vertices=vertices;
mesh.RecalculateBounds();
}
構造函數
◆ static function Mesh(): Mesh
描述:建立一個空的網格
//建立一個新的網格並將它賦給網格過濾器
function Start(){
var mesh=new Mesh();
GetComponent(MeshFilter).mesh=mesh;
}
函數
◆ function Clear(): void
描述:清除全部的頂點數據和全部的三角形索引。
你應該在重建triangles數組之間調用這個函數。
◆ function GetTriangles(submesh: int): int[]
描述:返回子網格的三角形列表。
一個子網格僅僅是一個獨立的三角形列表。當網格渲染器使用多個材質時,你應該確保
有儘量多的子網格做爲材質。
◆ function Optimize(): void
描述:優化網格以便顯示。
這個操做將花費一點時間可是會使幾何體顯示的更快。例如,它從三角形中產生三角形
帶。若是你從頭建立一個網格而且想在運行的時候取得更好的運行時性能而不是較高的加
載時間,你應該使用它。它三角帶化你的模型爲每一個頂點緩存位置優化三角形,對於導
載時間,你應該使用它。它三角帶化你的模型併爲每一個頂點緩存位置優化三角形。對於導
入的模型你不該該調用這個,由於導入流水線已經爲你作了。
function Start(){
var mesh: Mesh=GetComponent(MeshFilter).mesh;
mesh.Optimize();
}
◆ function RecalculateBounds(): void
描述:從頂點從新計算網格的包圍提。
修改頂點以後你應該調用這個函數以確保包圍體式正確的。賦值三角形將自動計算
這個包圍體。
function Start(){
var mesh: Mesh=GetComponent(MeshFilter).mesh=mesh;
mesh.RecalculateBounds();
}
◆ function RecalculateNormals(): void
描述:從三角形和頂點從新計算網格的法線。
在調整頂點以後一般須要更新法線以便反映這個改變。法線是從全部共享的頂點來計
算的。導入的網格有時並不共享全部頂點。例如在UV法線接縫處的點將被分割成兩個點。因
而RecalculateNormals函數在uv接縫處將建立不平滑的法線,RecalculateNormals不會自動
產生切線,所以bumpmap着色器在調用RecalculateNormals以後不會工做。然而你能夠提
取你本身的切線。
function Start(){
var mesh: Mesh=GetComponent(MeshFilter).mesh;
mesh.RecalculateNormals();
}
◆ function SetTriangles(triangles: int[], submesh: int): void
描述:爲子網格設置多邊形列表
一個子網格僅僅是一個獨立的三角形列表。當網格渲染器使用多個材質時,你應該確保
有儘量多的子網格做爲材質。建議賦值頂點數組以後賦值一個三角形數組,以免越界
錯誤。
繼承的成員
繼承的變量
name 對象的名稱
hideFlages 該物體是夠被隱藏,保存在場景中或被用戶修改?
繼承的函數
GetInstanceID 返回該物體的實例id。
繼承的類函數
operator bool 這個物體存在嗎?
Instantiate 克隆original物體並返回這個克隆。
Destroy 移除一個遊戲物體,緩存或資源。
DestroyImmediate 當即銷燬物體obj,強烈建議使用Destroy代替。
FindObjectsOfType 返回全部類型爲type的激活物體。
FindObjectsOfType 返回第一個類型爲type的激活物體。
operator== 比較兩個物體是否相同。
operator != 比較連個物體是否不相同。
DomDestroyOnLoad 卸載場景時確保物體target不被自動銷燬。
PhysicsMaterial
類,繼承自Object
載體材質描述:如何處理物體碰撞(摩擦,彈性)
參見:Collider
變量
◆ var bounceCombine: PhysicsMaterialCombine
描述:決定彈力是如何組合的。
傳統上彈性屬性依賴於兩種相互接觸的材質的組合。然而在遊戲中這是不切實的。能夠
使用組合模式來調整兩個材質的彈性如何被組合。
collider.material.bounceCombine=FrictionCombineMode.Average;
◆ var bouncyness: float
描述:表面的彈力如何?0值沒有彈力。1值沒有能力損失的反彈。
collider.bouncyness=1;
◆ var dynamicFriction: float
描述:移動時候使用的摩擦力。這個值在0到1之間。
0值就像冰,1像橡膠。
collider.dynamicFriction=1;
◆ var dynamicFriction2: float
描述:若是有向摩擦力被啓用,dynamicFriction2將沿着FrictionDirection2使用。
collider.physicMaterial.dynamicFriction2=0;
◆ var frictionCombine: PhysicMaterialCombine
描述:決定摩擦力是如何組合的。
傳統上摩擦力屬性依賴於兩種相互接觸的材質的組合。然而在遊戲中這是不切實的。
你可使用組合模式來調整兩個材質的摩擦力如何被組合。
collider.material.frictionCombine=physicMaterialCombine.Average;
◆ var frictionDirection2: Vector3
描述:有向性方向。若是這個矢量是非零,有向摩擦力被啓用。
dynamicFriction2和staticFriction2將沿着frictionDirection2被應用。有向性方向相對於
碰撞器的局部座標系統。
//使碰撞向前滑動而不是側滑
collider.physicMaterial.frictionDirection2=Vector3.forward;
collider.physicMaterial.dynamicFriction2=0;
collider.physicMaterial.dynamicFriction=1;
◆ var staticFriction: float
描述:當一個物體靜止在一個表面上時使用的摩擦力。一般是0到1之間的值。
0值就像冰,1像橡膠。
collider.staticFriction=1;
◆ var staticFriction2: float
描述:若是有向摩擦力被啓用,staticFriction2將沿着frictionDirection2使用。
collider.physicMaterial.staticFriction2=0;
構造函數
◆ static function PhysicMaterial(): PhysicMaterial
描述:建立一個新的材質
一般只使用collider.material和直接修改附加的材質更加簡單。
//建立一個新的材質並附加它
function Start(){
var material=new PhysicMaterial();
material.dynamicfriction=1;
collider.material=material;
}
◆ static function PhysicMaterial(name: string): PhysicMaterial
描述:建立一個新的材質,命名爲name.
//建立一個新的材質並附加它
function Start(){
var material=new PhysicMaterial("New Material");
material.dynamicfriction=1
collider.material=material;
}
繼承的成員
繼承的變量
name 對象的名稱
hideFlages 該物體是夠被隱藏,保存在場景中或被用戶修改?
繼承的函數
GetInstanceID 返回該物體的實例id。
繼承的類函數
operator bool 這個物體存在嗎?
Instantiate 克隆original物體並返回這個克隆。
Destroy 移除一個遊戲物體,緩存或資源。
DestroyImmediate 當即銷燬物體obj,強烈建議使用Destroy代替。
FindObjectsOfType 返回全部類型爲type的激活物體。
FindObjectsOfType 返回第一個類型爲type的激活物體。
operator== 比較兩個物體是否相同。
operator != 比較連個物體是否不相同。
DomDestroyOnLoad 卸載場景時確保物體target不被自動銷燬
ScriptableObject
類,繼承自Object
若是你想建立一個不須要附加到遊戲物體的對象,能夠從這個類繼承、
這對於那些只存儲數據資源是組有用的。
消息傳遞
◆ function OnDisable(): void
描述:當可編輯物體超出範圍時調用這個函數
當物體被銷燬的時候這個函數也會被調用並能夠用於任何清理的代碼。當腳本在編譯
結束後被加載時,OnDisable將被調用,而後腳本加載完成後OnDisable將被調用。
function OnDisable()
{
print(:script was removed");
}
OnDisable不能做爲一個coroutine.
◆ function OnEnable(): void
描述:物體被加載時調用該函數
function OnEnable()
{
print(:script was enabled");
}
OnEnable不能做爲一個coroutine.
類方法
◆ static function CreateInstance(className: string): ScriptableObject
描述:使用className建立一個可編程物體的實例.
繼承的成員
繼承的變量
name 對象的名稱
hideFlages 該物體是夠被隱藏,保存在場景中或被用戶修改?
繼承的函數
GetInstanceID 返回該物體的實例id。
繼承的類函數
operator bool 這個物體存在嗎?
Instantiate 克隆original物體並返回這個克隆。
Destroy 移除一個遊戲物體,緩存或資源。
DestroyImmediate 當即銷燬物體obj,強烈建議使用Destroy代替。
FindObjectsOfType 返回全部類型爲type的激活物體。
FindObjectsOfType 返回第一個類型爲type的激活物體。
operator== 比較兩個物體是否相同。
operator != 比較連個物體是否不相同。
DomDestroyOnLoad 卸載場景時確保物體target不被自動銷燬
GUISkin
類,繼承自ScriptableObject
變量
◆ var box: GUIStyle
描述:用於GUI.Box控件的缺省風格
◆ var button: GUIStyle
描述:用於GUI.Button控件的缺省風格
◆ var GUIStyle[i]:
描述:
◆ var font: Font
描述:用於全部風格的缺省字體。
◆ var horizontalScrollbar: GUIStyle
描述:
◆ var horizontalScrollbarLeftButton: GUIStyle
描述:
◆ var horizontalScrollbarRightButton: GUIStyle
描述:
◆ var horizontalScrollbarThumb: GUIStyle
描述:
◆ var horizontalSlider: GUIStyle
描述:用於GUI.HorizontalSlider控件背景部分的缺省風格.
用於決定滑塊可拖動區域尺寸的填充屬性。
◆ var horizontalSliderThumb: GUIStyle
描述:用於GUI.HorizontalSlider控件中可拖動滑塊的缺省風格.
用於決定滑塊尺寸的填充屬性。
◆ var label: GUIStyle
描述:用於GUI.Label控件的缺省風格.
◆ var scrollView: GUIStyle
描述:
◆ var settings: GUISettings
描述:使用這個皮膚的空間如何表現得通用設置。
◆ var textArea: GUIStyle
描述:用於GUI.TextArea控件的缺省風格。
◆ var textField: GUIStyle
描述:用於GUI.textField控件的缺省風格。
◆ var toggle: GUIStyle
描述:用於GUI.toggle控件的缺省風格。
◆ var verticalScrollbar: GUIStyle
描述:
◆ var verticalScrollbarDownButton: GUIStyle
描述:
◆ var verticalScrollbarThumb: GUIStyle
描述:
◆ var verticalScrollbarUpbutton: GUIStyle
描述:
◆ var verticalSlider: GUIStyle
描述:用於GUI.VerticalSlider控件背景部分的缺省風格.
用於決定滑塊可拖動區域尺寸的填充屬性。
◆ var verticalSliderThumb: GUIStyle
描述:用於GUI.VerticalSlider控件中可拖動滑塊的缺省風格.
用於決定滑塊尺寸的填充屬性。
◆ var window: GUIStyle
描述:用於GUI.Windows控件的缺省風格。
函數
◆ function FindStyle(styleName: string): GUIStyle
描述:獲取一個命名GUIStyle.
繼承的成員
繼承的變量
name 對象的名稱
hideFlages 該物體是夠被隱藏,保存在場景中或被用戶修改?
繼承的函數
GetInstanceID 返回該物體的實例id。
繼承的消息傳遞
OnEnable 物體被加載時調用該函數
OnDisable 可用編程物體超出範圍時調用這個函數
繼承的類函數
CreateInstance 使用className建立一個可編程物體的實例。
operator bool 這個物體存在嗎?
Instantiate 克隆original物體並返回這個克隆。
Destroy 移除一個遊戲物體,緩存或資源。
DestroyImmediate 當即銷燬物體obj,強烈建議使用Destroy代替。
FindObjectsOfType 返回全部類型爲type的激活物體。
FindObjectsOfType 返回第一個類型爲type的激活物體。
operator== 比較兩個物體是否相同。
operator != 比較連個物體是否不相同。
DomDestroyOnLoad 卸載場景時確保物體target不被自動銷燬。
Shader
類,繼承自Object
用於因此渲染的着色器腳本
大多數高級的渲染都是經過Material類控制的. Shader類類最經常使用於檢查一個着色器時
否可以運行在用戶的硬件上(isSupported屬性)並根據名稱找到着色器(Find方法).
參見:Material類,Materials,ShaderLab documentation.
變量
◆ var isSupported: bool
描述:這個着色器可以運行在端用戶的顯卡上?(只讀)
若是這個着色器重的設置和任何fallback函數被支持,返回真。在實現特定的效果時,
最常使用這個。例如,Unity Pro中的image effects,若是這個着色器不被支持那麼Unity將
自動禁用它們。
//若是材質的着色器不被支持,禁用渲染器
if(!renderer material.shader.isSupported)
renderer.enabled=false;
參見:Material類,ShaderLab documentation.
◆ var maximumLOD: int
描述:該shader的LOD等級
參見:Shader Level of Detail, Shder globalMaximumLOD.
◆ var renderQueue: int
描述:這個shader的渲染隊列(只讀)
參見:Material.renderQueue, RenderQueue tag.
類變量
◆ static var globalMaximumLOD: int
描述:全部shader的LOD等級.
參見:Shader Level of Detail, Shader.MaximumLOD.
類方法
◆ static function Find(name: string): Shader
描述:找到名爲name的着色器。
Shader.Find可以用來切換到另外一個着色器,而不須要保持一個到該着色的引用。name
爲材質着色器下拉框中的名稱。一般的名稱是:"Diffuse", "Bumped Diffuse", "VertexLit",
"Transparent/Diffuse"等等。
在構建時,只包含那些使用中的shader或位置在"Resources"文件夾中shader。
//從腳本中改變shader
function Start()
{
//切換到透明散射着色器
renderer.material.shader=Shader.Find("Transparent/Diffuse");
}
//從代碼建立一個材質
function Start()
//使用透明散射着色器建立一個材質
var material=new Material(Shader.Find("Transparent//Diffuse");
material.color=Color.green;
//賦值這個材質到渲染器
renderer.material=material;
}
參見:Material類。
◆ static function PropertyToID(name: string): int
描述:爲一個着色器屬性名獲取惟一標識。
着色器屬性表示被MaterialPropertyBlock函數使用。
在Unity中着色器屬性的每一個名稱都(例如,_MainTex或_Color)被賦予一個惟一的整型
數,在整個遊戲中都不變。
參見:MaterialPropertyBlock.
◆ static function SetGlobalColor(propertyName: string, color: Color): void
描述:爲因此着色器設置全局顏色屬性。
若是一個着色器須要而材質沒有定義它們將使用全局屬性(例如,若是着色器不在
Properties模塊中公開它們).
一般在你有一組定義的着色器並使用相同的"全局"顏色(例如,太陽的顏色)。而後
你能夠從腳本中設置全局屬性,並不須要在全部的材質中設置相同的顏色。
參見:SetGlobalFloat,SetGlobalVector,SetGlobalTexture;Material類,ShaderLab
documentation.
◆ static function SetGlobalFloat(propertyName: string, value: float): void
描述:爲全部着色器設置全局浮點數屬性。
若是一個着色器須要而材質沒有定義它們將使用全局屬性(例如,若是着色器不在
Properties模塊中公開它們).
一般在你有一組定義的着色器並使用相同的"全局"浮點z數(例如,自定義霧類型的
密度)。而後你能夠從腳本中設置全局屬性,並不須要在全部的材質中設置相同的浮點數。
參見:SetGlobalColor,SetGlobalTexture;Material類,ShaderLab documentation.
◆ static function SetGlobalMatrix(propertyName: string, mat: Matrix4x4): void
描述:爲全部着色器設置全局矩陣屬性。
若是一個着色器須要而材質沒有定義它們將使用全局屬性(例如,若是着色器不在
Properties模塊中公開它們).
參見:SetGlobalColor,SetGlobalFloat;Material類,ShaderLab documentation.
◆ static function SetGlobalTexture(propertyName: string, tex: Texture): void
描述:爲全部的着色器設置全局紋理屬性。
若是一個着色器須要而材質沒有定義它們將使用全局屬性(例如,若是着色器不在
Properties模塊中公開它們).
一般在你有一組定義的着色器並使用相同的"全局"紋理(例如,自定義散射光照立方
貼圖)。而後你能夠從腳本中設置全局屬性,並不須要在全部的材質中設置相同的紋理。
參見:SetGlobalColor,SetGlobalFloat;Material類,ShaderLab documentation.
◆ static function SetGlobalVector(propertyName: string, vec: Vector4): void
描述:爲全部着色器設置全局向量屬性。
若是一個着色器須要而材質沒有定義它們將使用全局屬性(例如,若是着色器不在
Properties模塊中公開它們).
一般在你有一組定義的着色器並使用相同的"全局"向量(例如,風的方向)。而後你
能夠從腳本中設置全局屬性,並不須要在全部的材質中設置相同的向量。
參見:SetGlobalFloat,SetGlobalColor,SetGlobalTexture;Material類,ShaderLab
documentation.
繼承的成員
繼承的變量
name 對象的名稱
hideFlages 該物體是夠被隱藏,保存在場景中或被用戶修改?
繼承的函數
GetInstanceID 返回該物體的實例id。
繼承的類函數
operator bool 這個物體存在嗎?
Instantiate 克隆original物體並返回這個克隆。
Destroy 移除一個遊戲物體,緩存或資源。
DestroyImmediate 當即銷燬物體obj,強烈建議使用Destroy代替。
FindObjectsOfType 返回全部類型爲type的激活物體。
FindObjectsOfType 返回第一個類型爲type的激活物體。
operator== 比較兩個物體是否相同。
operator != 比較連個物體是否不相同。
DomDestroyOnLoad 卸載場景時確保物體target不被自動銷燬。
TerrainData
類,繼承自Object
TerrainData類存儲高度圖,細節網格位置,樹實例,和地形紋理alph圖,
Terrain組件連接地形數據並渲染它。
變量
◆ var heightmapHeight: int
描述:採樣的地形高度(只讀)
◆ var heightmapWidth: int
描述:採樣的地形寬度(只讀)
◆ var size: Vector3
描述:地形在世界單位下的總大小
函數
◆ function GetHeights(xBase: int, yBase: int, width: int, height: int): float[,]
描述:獲取高度圖採樣的一個數組。
◆ function GetInterpolatedNormal(x: float, y: float): Vector3
描述:在一個給定的位置獲取插值法線。
/x/和y座標被做爲0...1之間正規化的座標被指定。
◆ function SetHeights(xBase: int, yBase: int, height: float): float[,]): void
描述:設置高度圖採樣的一個數組。
繼承的成員
繼承的變量
name 對象的名稱
hideFlages 該物體是夠被隱藏,保存在場景中或被用戶修改?
繼承的函數
GetInstanceID 返回該物體的實例id。
繼承的類函數
operator bool 這個物體存在嗎?
Instantiate 克隆original物體並返回這個克隆。
Destroy 移除一個遊戲物體,緩存或資源。
DestroyImmediate 當即銷燬物體obj,強烈建議使用Destroy代替。
FindObjectsOfType 返回全部類型爲type的激活物體。
FindObjectsOfType 返回第一個類型爲type的激活物體。
operator== 比較兩個物體是否相同。
operator != 比較連個物體是否不相同。
DomDestroyOnLoad 卸載場景時確保物體target不被自動銷燬。
TextAsset
類,繼承自Object
文本文件資源。
你能夠在你的工程中使用原始的.txt文件做爲資源,並經過這個類獲取它們的內容。
變量
描述:文本資源的原始字節
//經過添加.txt擴展名到文件來加載一個.jpg或.png文件
//並拖動它到imageTextAsset
var image TextAsset: TextAsset
function Start(){
var tex=new Texture2D(4,4);
tex.LoadImage(imageTextAsset.bytes);
renderer.material.mainTexture=tex;
}
◆ var text: string
描述:.txt文件的文本內容做爲一個字符串。
var asset: TextAsset;
function Start()
{
print(asset.text);
}
繼承的成員
繼承的變量
name 對象的名稱
hideFlages 該物體是夠被隱藏,保存在場景中或被用戶修改?
繼承的函數
GetInstanceID 返回該物體的實例id。
繼承的類函數
operator bool 這個物體存在嗎?
Instantiate 克隆original物體並返回這個克隆。
Destroy 移除一個遊戲物體,緩存或資源。
DestroyImmediate 當即銷燬物體obj,強烈建議使用Destroy代替。
FindObjectsOfType 返回全部類型爲type的激活物體。
FindObjectsOfType 返回第一個類型爲type的激活物體。
operator== 比較兩個物體是否相同。
operator != 比較連個物體是否不相同。
DomDestroyOnLoad 卸載場景時確保物體target不被自動銷燬。
Texture
類,繼承自Object
用於處理紋理的基類,包含的功能被Texture2D和RenderTexture類共用。
變量
◆ var anisoLevel: int
描述:紋理的各向異性過濾等級
反走樣過濾使紋理從一個較小的視角看時具備較好的效果,可是會帶來顯卡性能上的開
值。一般你能夠將它用與地面,地板或路面紋理以使它看起來更好。參見:texture assets.
renderer.material.mainTexture.anisoLevel=2;
◆ var filterMode: FilterMode
描述:紋理的過濾模式
renderer.material.mainTexture.filterMode=FilterMode.trilinear;
參見:FilterMode, texture assets.
◆ var height: int
描述:紋理的像素高度(只讀)
//打印紋理尺寸到控制檯
var texture: Texture;
function Start(){
print("Size is"+texture.width+"by"+texture.height);
}
◆ var mipMapBias: float
描述:紋理的mipMap偏移。
一個正的偏移使紋理顯得很是模糊,而一個負的偏移使紋理變得更加清晰。注意使用
大的負值會下降性能,所以不建議使用小於0.5的偏移。在大多數狀況先,紋理的銳化可
以經過使用反走樣過濾來實現。
參見:texture.anisoLevel, texture assets.
renderer.material.mainTexture.mipMaoBias=0.5;
◆ var width: int
描述:紋理的像素寬度(只讀)
//打印紋理尺寸到控制檯
var texture: Texture;
function Start(){
print("Size is"+texture.width+"by"+texture.height);
}
◆ var wrapMode: TextureWrapMode
描述:紋理的包裹模式(Repeat或Clamp)
使用TextureWrapMode.Clamp在邊界上設置紋理剪裁以免包裹的不真實,或者用
TextureWrapMode.Repeat平鋪紋理。參見:TextureWrapMode, texture assets.
renderer.material.mainTexture.WrapMode=TextureWrapMode.Clamp;
繼承的成員
繼承的變量
name 對象的名稱
hideFlages 該物體是夠被隱藏,保存在場景中或被用戶修改?
繼承的函數
GetInstanceID 返回該物體的實例id。
繼承的類函數
operator bool 這個物體存在嗎?
Instantiate 克隆original物體並返回這個克隆。
Destroy 移除一個遊戲物體,緩存或資源。
DestroyImmediate 當即銷燬物體obj,強烈建議使用Destroy代替。
FindObjectsOfType 返回全部類型爲type的激活物體。
FindObjectsOfType 返回第一個類型爲type的激活物體。
operator== 比較兩個物體是否相同。
operator != 比較連個物體是否不相同。
DomDestroyOnLoad 卸載場景時確保物體target不被自動銷燬。
Cubemap
類,繼承自Texture
處理立方貼圖的類,用這個來建立或修改已有的cube map assets.
變量
◆ var format: TextureFormat
描述:紋理中像素數據的格式(只讀)
使用這個肯定紋理的格式。
構造函數
◆ static function Cubemap(size: int. format: TextureFormat, mipmap: bool): Cubemap
描述:建立新的空立方貼圖紋理;
在每一個面,紋理將是size大小的而且有或沒有mipmap.
一般你會想在建立它以後設置紋理的顏色,使用SetPixel和Apply函數.
function Start(){
//建立一個新的紋理並將它複製給渲染器材質
var texture=new Cubemap(128, TextureFormat.ARGB32, false)
renderer.material.mainTexture=Texture;
}
參見:SetPixel,Apply函數.
函數
◆ function Apply(updateMipmaps: bool=true): void
描述:應用全部面前的SetPixel改變.
若是updateMipMaps爲true.mip等級也被從新計算.這是很是耗時的操做,所以你要在
Apply調用之間改變儘量多的像素。參見:SetPixel函數.
◆ function GetPixel(face: CubemapFace, x: int, y: int): Color
描述:返回座標(face, X, Y)處的像素顏色.
若是像素座標超出邊界(大於寬/高或小於0),它將基於紋理的包裹模式來限制或重複。
該函數只工做再ARGB32,RGB24和Alpha8紋理格式上。對於其餘格式,他老是返
回不透的白色。
◆ function GetPixels(face: CubemapFace, miplevel: int): Color[]
描述:返回立方貼圖一個面的像素顏色.
這個函數返回立方貼圖面上整個mip等級的像素顏色數組。
返回的數組被設置在2D數組中,這裏,像素被從左到右,從上到下放置(行序)數
組的大小是所使用的mip等級的寬乘高。默認的mip等級是零(基本紋理)在這種狀況下
大小僅爲紋理的大小。通常地,mip等級尺寸是mipSize=max(1,width>>miplevel)高度相似。
該函數只工做在ARGB32,RGB24和Alpha8紋理格式上。對於其餘格式,GetPixels被
忽略.
使用GetPixels比重複調用GetPixel更快,尤爲是對於大紋理,此外GetPixels能夠訪
問單獨的mipmap等級.
參見:SetPixels,mipmapCount.
◆ function SetPixel(face: CubemapFace, x: int, y: int, color: Color): void
描述:在座標(face,x,y)處設置像素顏色。
調用Apply來實際上載改變後的像素到顯卡, 上載是很是耗時的操做,所以你要在
Apply調用之間改變儘量多的像素。
該函數只工做再ARGB32,RGB24和Alpha8紋理格式上。對於其餘格式SetPixels被
忽略. 參見:Apply函數.
◆ function SetPixels(color: Color[], face: CubemapFace, mipmapFace, miplevel: int): void
描述:設置立方貼圖一個面的像素顏色。
這個函數取回並改變整個立方貼圖面的像素顏色數組。調用Apply來實際上載改變後
的像素到顯卡.
colors數組被放置在2D數組中,這裏,像素被從左到右,從上到下放置(行序)數組
的大小必須至少是所使用的mip等級的寬乘高。默認的mip等級是零(基本紋理)在這種
狀況下大小僅爲紋理的大小。通常地,mip等級尺寸是mipSize=max(1,width>>miplevel)高
度相似。
該函數只工做在ARGB32,RGB24和Alpha8紋理格式上。對於其餘格式,GetPixels被
忽略.
參見:GetPixel, Apply, mipmapCount.
繼承的成員
繼承的變量
name 對象的名稱
hideFlages 該物體是夠被隱藏,保存在場景中或被用戶修改?
繼承的函數
GetInstanceID 返回該物體的實例id。
繼承的類函數
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
描述:若是電影是從網站上下載的,這個返回是夠已經下載了足夠的數據以便可以不一樣
版的播放它。
對於不是來自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
描述:這個爲真時電影循環。
函數
◆ function Pause(): void
描述:暫停播放電影。
function Start(){
renderer.material.mainTexture.Pause();
}
◆ function Play(): void
描述:開始播放電影。
注意運行的MovieTexture將使用大量的CPU資源,而且它將持續運行直到它被手、
動中止或加載一個新的關卡。參見:stop
function Start(){
renderer.material.mainTexture.Play();
}
繼承的成員
繼承的變量
width 紋理的像素寬度(只讀)
height 紋理像素高度(只讀)
filterMode 紋理的過濾模式
anisoLevel 紋理的各向異性過濾等級
wrapMode 紋理的包裹模式(Repeat或Clamp)
mipMapBias 紋理的mipMap便宜。
name 對象的名稱
hideFlages 該物體是夠被隱藏,保存在場景中或被用戶修改?
繼承的函數
描述:渲染紋理的尺寸限制爲2的冪次?
當建立圖像後刷處理效果時,你應該老是設置這個爲false由於這容許四面
ReaderTexture大小問任意屏幕大小。
當爲普通的材質和shader使用RenderTexture時,你應該老是設置這個爲true由於這允
許像普通紋理同樣使用一個RenderTexture.
◆ var useMipMap: bool
描述:生成mipmap等級?
當設置爲true,渲染到這個紋理將建立並生成mipmap等級面膜人的渲染紋理沒有
mipmap.
這個這斃用於2的冪次方尺寸的渲染紋理(參考isPowerOfTwo).
◆ var width: int
描述:渲染紋理的像素寬度。
注意不像Texture.height屬性,這個是可讀寫的,設置一個值來改變大小
構造函數
◆ static function ReaderTexture(width: int, height: int, depth: int): ReaderTexture
描述:建立一個新的RenderTexture對象。
渲染紋理使用width x height尺寸建立,深度緩存爲depth位(深度能夠是0,16或24)
渲染紋理或設置爲非2的冪次紋理並使用默認的color format
注意建立一個RenderTexture不會當即建立硬件表示。實際的渲染紋理是第一次使用
是建立或當Create被手動調用時建立。所以在建立渲染紋理以後,你能夠設置額外的變量,如
isPowerOfTwo, format, isCubemap等等。
參見:isPowerOfTwo變量, format變量.
函數
◆ function Create(): bool
描述:實際建立RenderTexture。
RenderTexture構造函數實際上並無建立硬件紋理:默認的紋理第一次建立時被設置
爲active,調用Create來建立它。若是紋理已經被建立Create不作任何事。
參見:Release,isCreated函數.
◆ function IsCreate(): bool
描述:渲染紋理產生了?
RenderTexture構造函數實際上並無建立硬件紋理:默認的紋理第一次建立時被設置
爲active,若是用於渲染的的硬件資源被建立了,IsCreate返回ture.
參見:Create,Release函數.
◆ function Release(): void
描述:釋放RenderTexture。
這個函數釋放由這個渲染紋理使用的硬件資源,紋理自己並不被銷燬,並在使用的時候
被自動再次建立。
參見:Create,IsCreate函數.
◆ function SetBorderColor(color: Color): void
描述:爲這個渲染紋理設置爲邊框顏色。
若是顯卡支持"剪裁到邊界",那麼任何超出0...1UV範圍的紋理採樣將返回邊界顏色。
◆ function SetGlobalShaderProperty(propertyName: string): void
描述:賦值這個RenderTexture爲一個名爲propertyName的全局shader屬性。
類變量
◆ static var active: RenderTexture
描述:激活的渲染紋理。
全部的渲染將進入激活的RenderTexture若是活動的RenderTexture未null全部的東西都
被渲染到主窗口.
當你一個RenderTexture變爲激活,若是它尚未被建立,硬件渲染內容將被自動建立。
類方法
◆ static function GetTemporary(width: int, height: int, depthBuffer: int, format:
RenderTextureFormat=RenderTextureFormat.ARGB32): RenderTexture
描述:分配一個臨時的渲染紋理。
這個函數被優化,用於當你需呀一個快速RenderTexture來作一些臨時計算時,一旦完
成使用ReleaseTemporary釋放它,這樣,若是須要,另外一個調用可以開始重用它。
◆ static function ReleaseTemporary(temp: RenderTexture): void
描述:釋放一個由GetTemporary分配的臨時紋理。
若是可能,以後調用GetTemporary將重用前面建立的RenderTexture,若是沒有請來臨
時RenderTexture,幾幀後它將被銷燬。
繼承的成員
繼承的變量
width 紋理的像素寬度(只讀)
height 紋理像素高度(只讀)
filterMode 紋理的過濾模式
anisoLevel 紋理的各向異性過濾等級
wrapMode 紋理的包裹模式(Repeat或Clamp)
mipMapBias 紋理的mipMap便宜。
name 對象的名稱
hideFlages 該物體是夠被隱藏,保存在場景中或被用戶修改?
繼承的函數
GetInstanceID 返回該物體的實例id。
繼承的類函數
operator bool 這個物體存在嗎?
Instantiate 克隆original物體並返回這個克隆。
Destroy 移除一個遊戲物體,緩存或資源。
DestroyImmediate 當即銷燬物體obj,強烈建議使用Destroy代替。
FindObjectsOfType 返回全部類型爲type的激活物體。
FindObjectsOfType 返回第一個類型爲type的激活物體。
operator== 比較兩個物體是否相同。
operator != 比較連個物體是否不相同。
DomDestroyOnLoad 卸載場景時確保物體target不被自動銷燬。
Texture2D
類,繼承自Texture
用於處理紋理的類。使用這個來建立臨時的紋理或修改已經存在的texture assets
變量
◆ var format: TextureFormat
描述:紋理中像素數據的格式(只讀)
使用這個肯定紋理的格式。
◆ var mipmapCount: int
描述:在這個紋理中有多少Mipmap等級(只讀)
返回值也包含基本等級,所以他老是1或更大。
若是你使用GetPixels或SetPixels來取回或修改不一樣的mip等級時,須要使用
mipmapCount. 例如,你能夠改變一個紋理以便每一個mip等級以不一樣的顏色修改. 而後再遊
戲中你能夠看到那個mip等級被實際使用了。
參見:GetPixels函數,SetPixels函數。
構造函數
◆ static function Texture2D(width: int, height: int): Texture2D
描述:建立新的空紋理;
紋理爲width乘height大小,TextureFormat爲ARGB32帶有mipmap.
一般你會想到在建立它以後設置紋理的顏色,使用SetPixel,SetPixels和Apply函數。
function Start(){
//建立一個新的紋理並將它賦給渲染器材質
var texture=new Texture2D(128,128);
renderer.material.mainTexture=texture;
}
參見:SetPixel,SetPixels,Apply函數.
◆ static function Texture2D(width: int, height: int, format: TextureFormat, mipmap: bool):
Texture2D
描述:建立新的空紋理;
紋理爲width乘height大小,具備給定的format有或沒有miamap.
一般你會想到在建立它以後設置紋理的顏色,使用SetPixel,SetPixels和Apply函數。
建立不容許有壓縮紋理格式的貼圖。
function Start(){
//建立一個新的紋理並將它賦給渲染器材質
var texture=new Texture2D(128,128, TextureFofrmat.AGRB32, false);
renderer.material.mainTexture=texture;
}
參見:SetPixel,SetPixels,Apply函數.
函數
◆ function Apply(updateMipmaps: bool=true): void
描述:實際地應用前面的SetPixel和SetPixels改變.
若是updateMipmaps爲true,mipmap等級也被從新計算,使用基本等級做爲源.一般
你會想在全部的狀況下使用true,除非你已經使用SetPixels修改了mip等級。
這是很是耗時的操做,所以你要在Apply調用之間改變儘量多的像素。
function Start(){
//建立一個新的紋理並賦值它到渲染器材質
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);
}
}
//應用全部的SetPixel調用
texture.Apply();
}
參見:SetPixel,SetPixels函數.
◆ function Compress(highQuality: bool): void
描述:壓縮紋理問DXT格式。
使用這個來壓縮在運行時生成的紋理。壓縮後的紋理使用較少的顯存並能夠更快地被
渲染。
壓縮以後,若是原始紋理沒有alpha通道紋理將是DXT1格式,若是它有alpha通道紋理
將是DXT5格式.
傳遞true到highQuality將在壓縮過程當中抖動源紋理,這能夠幫助提升壓縮質量可是會
有一些慢。
若是顯卡不支持壓縮或者紋理已是壓縮格式,那麼Compress將不作任何事情。
參見:SetPixels函數.
◆ function EncodeToPNG(): byte[]
描述:編碼這個紋理爲PNG格式。
返回的字節數組是PNG"文件"。你能夠將它們寫在鍵盤上以便獲取PNG文件,並通
過網格發送它們。
該函數只工做在ARGB32和RGB24紋理格式上。對於ARGB32紋理編碼的PNG數
據將包含alpha通道。對於RGB24紋理不包含alpha通道。PNG數據將不包含伽馬矯正或顏
色配置信息。
//存儲截屏爲PNG文件。
import System.1();
//當即截屏
function Start(){
UploadPNG();
}
function UploadPNG(){
//只在渲染完成後讀取屏幕緩存
yield WaitForEndOfFrame();
//建立一個屏幕大小的紋理,RGB24格式
var width=Screen.width;
var height=Screen.height;
var tex=new Texture2D(width, height, TextureFormat.RGB24, false);
//讀取屏幕內容到紋理
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);
//建立一個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.