unity脚本编程3

类方法
◆ static void LayerToName(layer :in):string
描述:给定一个层的数字。返回内置的或在tag Maneger中定义的层名称。
◆ static void NameToLayer(layerName :string):int
描述:给定一个层的名字。返回内置的或在tag Maneger中定义的层索引。
◆ static implicit void LayerMask(intva1:int):layermask
描述:隐式转化一个整数位已个层蒙板
Lightmapdata

光照贴图数据
一个场景可以有多个光照贴图储存在这里,renderer组建可以使用这些光照贴图,这就使得它能够在多个物体上使用相同的材质,而每个物体可以使用不同的光照贴图或同一个光照贴图的不同部分。
参见,linghrmapsettings类 renderer lightmapindex 属性
变量
◆ var lightmap:texture2D
描述:光照贴图的纹理
参见:lightmspsettings 类 renderer lighunaplndex属性
linghtmapsettings

储存这个场景的光照图
一个场景可以有多个光照贴图储存在这里,renderer组件可以使用这些光照贴图,这就使得它能够在多个物体上使用相同的材质,而每个物体可以使用不同的光照贴图或同一个光照贴图的不同部分。
参见:lightmapdata类renderer.lightmaplndex属性
类变量
◆ sartic var lightmaps:lightmapdata[]
描述:光照贴图数组
参见:lightmapdata类renderer.lightmaplndex属性。
Masterserver
类,主服务器用来使服务器和客服端匹配。
你可以建立以个游戏主机或为你的游戏类型取回主机列表。这里的这个函数用来与主服务器通信,主服务器位于不同的服务器上,如果必要这个服务器可以被定制,主服务器的概览和技术描述:参见master server manual page
类变量
◆ static var dedicatedserver:bool
描述:申明这台机器为专用服务器。
如果作为一个服务器运行,连接数定义了玩家的数量,当在主服务器上注册的时候这个被报告,默认情况下主服务器假定这个实例不是专用服务器,因此玩家数会增加1(占用服务器上的一个\“chent”\)如果不希望,这个变量可以设置为假,然后知有连接数被报告为玩家数。
void startserver{}{
nerwork lnitializeserver(32.25002):
masrerserver.dedicatedserver=true;
masterserver.registerhost(“myuniquegametype”,“johndoes game”,“133tgame for all”);
}
◆static var ip address:string
描述:主服务器的IP地址。
默认地这个是由unity技术运行的服务器。
void
masterserver ip address=“127.0.0.1”;
master server.port=10002;
}
◆static var port:int
描述:主服务器的链接端口。
默认地这个是由unity技术云顶的服务器,
masterserver.ipaddress=“127.0.0.1”;
master server.port=100021;
}
◆static var updaterate:int
描述:为主服务器主机信息更新设置最小更新速率。
通常,主机更新只在主机信息被改变的时候发生(如连接的玩家)。更新率定义了主机更新之间的最小时间量,缺省值为60秒(检查更新)因此,如果以个主机更新呗发送然后一些域在10秒后改变,然后更新可能会在50秒之后发送(在下一次检查到改变的时候)。如果这个被设置为0,以后就没有更新被发送,只发送初始注册信息。
void startserver()
{
network lnitialigeserver(32.25002);
//在初始化注册之后没有主机信息更新
Masterserver.updaterate=0;
masterserver,registerhost(“myuniquegametype”,“johndoes game”,“133tgame forall”);
}
类方法
◆static void clearhostlist():void
描述:清楚由masterserver.pollhostlist接收到的主机列表。
如果你想更新列表并想确保你不使用较旧的数据时,使用这个,
void awakc()
{
//确保类表是空的并请求一个新的列表
masterserver clearhostlist();
masterserver.requesthostlist(“myuniquegametype”);
}
void lpdate()
{
//如果任何主机被接收,显示游戏名称,再次清理主机列表,}
if(masterserver.pollhostlist(),length!=0){
var hostdata;hostdata[]=masterserver.pollhostlist();
for(var i:int=0;i<hostdata.length;i++){
debug,log(“game name:”+hostdata[i]gamename);
}
masterserver,clearhostlist()
}
}
◆static void pollhostlist():hostdata[]
描述:使用master server.requeshostlist接收最新的主机列表
使用masterserver.clearhostlist清理当前主机列表。这样你可以确定返回的列表时最新的。
void awaket(){
//确保列表时空的并请求一个新的列表
masterserver .clearhostlist();
masterserver.requesrhostlist(“larustest”):
;
void update()
;
//如果任何主机被接收,显示游戏名称,再次清理主机列表;
if(masterserver.pollhostlist()length!=0){
varhostdata hostdata[]=masterserver.pollhostlist();
for(var i:int=0;i<hostdata.length;i++){
debug.log(“game name”+hostdata[i].gamename);
}
masterserver.clearhostlist()
}
◆static void registerhost(gametypename:string,gamename:string.comment:string=""):void
描述:在主服务器注册这个服务器。
如果主服务器地址信息尚未改变,缺省的主服务器将被使用。
void ongui()
{
if(guilayout.button(“stnrt server”)){
//如果没有公有IP地址,使用NAT穿透
network。usenat=!network.havepublicaddrss();
network.lnitializeserver(32.25002);
masterserver.registerhost(“myuniquegametype”,“johndoes game”,“133tgame for all”);
}
}
◆static void RequestHosList(gameTypeName:string):void
描述:从主服务器请求一个主机列表。
当它完成的时候,这个列表可以通过MasterServer.PollHcstList使用。
void Awakc(){
//确保列表时空的并请求一个新的列表
MastcrScrver.RequestHostList();
MastcrScrver.RequestHostList(“LarusTcst”);
}
void Update()
}
//如果任何主机被接收,显示游戏名称,再次清理主机列表。
if(MastcrScrvcr.PollHcstLisx().length!=0)}
var hostData:HostData[]=MasterSer.pollHostList();
for (var i:int=();i<hostData.length;i++){
Debug.Log(“Game namc;”+hostData[i].gamceName);
}
MastcrScrvcr.ClearHostList();
}
}
static void UnregisterHost():void
描述:从主服务器注销这个服务器。
如果服务器没有被注销或已经被注销,不做任何事。
void OnGUt() {
if(GUILayout.Button(“Disconnect”)){
Nctwork,Disconnect();
NastcrServer.UnregisterHost();
}
}
MaterialPropertyBlock

应用的一块材质值。
MateriaIPropcrtyBlock被Graphics.DrawMesh使用。当你想用相同的材质(但有稍微有些不同的属性)绘制多个物体时,使用这个。例如,如果你想稍微改变每个网络的颜色时。
出于性能原因,属性块只能包含有限数量的属性值。两个4x4矩阵,六个向量颜色或12个浮点数可以存储在这个块中,存储空间时共享,所以存储一个矩阵留下两倍少的空间来

存储向量和浮点数。
Graphics。DrawMesh 拷贝传递的属性块,因此最有效的方法是使用它来创建一个快并为所有DrawMesh 调用使用它。使用Clear来清除块的值,AddFloat,AddVector,AddColot,AddMatrix来添加值。
参见:Graphics,DrawMesh,Matcrial。
函数
◆ void AddColor(name:string,value:Colo):void

◆ void AddColor(nameID:int,value:Colo):void

描述:添加一个颜色材质属性。
出于性能原因,属性块只能包含有限量的属性值。两个4x4矩阵,六个向量/颜色或12个浮点数可以存储在这个块中。存储空间时共享,使用存储一个矩阵留下两个倍少的空间来存储向量和浮点数。当块的存储空间填满后,额外的Add调用将被忽略。
使用nameID的函数变量体更快,如果你重复添加相同名称的属性,使用Shader.propertyToID来获取不同的标示,并传递这个标示到AddColor。
◆ void AddFloat(name:string,value:float):void
◆ void AddFloat(nameID:int,value:float):void
描述:添加一个浮点材质属性。
出于性能原因,属性块只能包含有限数量的属性值。两个4x4矩形,六个向量/颜色或存12个浮点数可以存储在这个块中,存储空间是共享,所以存储一个矩阵留下两倍少的空间来存储向量和浮点数。当块的存储空间填满后,额外的Add调用将被忽略。
使用nameID的函数变体更快,如果你重复添加相同名称的属性,使用Shader.PropertyToID来获取不同的标示,并传递这个标示到AddFloat。
◆ void AddMatrix(name:string,value:Matrix4x4):void
◆ void AddMatrix(nameID:int,value:Matrix4x4):void

描述:添加一个矩阵材质属性。
处于性能原因,属性块只能包含有限数量的属性值。两个4x4矩阵,六个向量/颜色或12个浮点数可以存储在这个块中。存储空间时共享,所以存储一个矩阵留下两倍少的空间来存储向量和浮点数。当块的存储空间填满后,额外的Add调用将被忽略。
使用nameID的函数变体更快,如果你重复添加相同名称的属性,使用Shader.PropertyToID来获取不同的标示,并传递这个标示到AddMatrix。
◆ void AddVector(name:string,value:Vector4):void
◆ void AddVector(nameID:int,value:Vector4):void
描述:添加一个向量材质属性。
出于性能原因,属性块只能包含有限数量的属性值。两个4x4矩阵,六个向量/颜色或12个浮点数可以存储在这个块中。存储空间是共享,所以存储一个矩阵留下两倍少的空间来存储向量和浮点数。当块的存储空间填满后,额外的Add调用将被忽略。
使用nameID的函数变体更快,如果你重复添加相同名称的属性,使用
Shader.ProrertyToLD来获取不同的标示,并传递这个标示到AddVector。
◆ void Clear():void
描述,清除材质属性值。
GrawMesh 拷贝传递的属性块,因此最有效的方式是使用它来创建一个块并为
所有DrawMesh调用使用它。使用Clear来清除块的值,ADDFloat,AddVector,AddColor,AddMatrix来添加值.
Mathf
结构
常用数学函数的集合。
类变量
◆ static var Deg2Rad:float
描述:度到弧度的转化常量(只读)。
这个等于(PI2)/360.
//转化30度为弧度
var deg=30.0;
var od=dcg
Mathf.Deg2Rad;
参见:Rad2Deg常量。
◆ static varEpsilon:float
描述:一个小的浮点数值(只读)
比较小于它的值没有多人意见,因为浮点数是不精确的。
print(MathfEpsilon);
◆ static var Infinity:float
描述:表示正无穷(只读).
◆ static var NegativeIntinity:float
描述:表示负无穷(只读).
◆ staic var PI:float
描述:3.14159265358979…值(只读).
◆ static var Rad2deg:float
描述:弧度到度的转化常量(只读).
这个等于360、(PI2).
转化1弧度为度
var rad=1.0;
var deg=rad
Mathf.Rad2Deg.
参见:Deg2Rad常量
类方法
◆ staric void Abs(f:float):float
描述:返回f的绝对值。
//打印10.5
print(Mathf.Abs(-10.5)).
◆ staric void Abs(value:int):int
描述:返回value的绝对值。
//打印10
print(Mathf.Abs(-10));
◆ staric void Acos(f:float):float
描述:返回f的反余弦_一个弧度角它的余弦是f.
print(Mathf.AcOS(0.5);
◆ staric void Approximately(a:float,b:float):bool
描述:比较两个浮点数值看看它们是否近似。
由于浮点数值不精确,不建议使用等操作来比较它们。例如,1.0==10.0/10.0也许不会返回真。
if(Mathf.Approximately(1.0,10.0/10.0))
print(“same”);
◆ static void Asin(f:float):float
描述:返回f的反正弦_一个弧度角它的正弦是f.
print(Matht.Asin(0.5));
◆ staric void Atan(f:float):float
描述:返回f的反切_一个弧度角它的正切是f.
print(Mathf.Atan(0.5));
◆ staic void Atan2(y:float,x:float):float
描述:返回一个弧度角它的Tan为y/x。
返回的值是一个角度,该角表示x轴和开始于零并终结在(x,y)处的向量之间的角度。
//通常使用transform.lookAt.
//但这可以给你更多的对角度的控制
vartatget:Transform;
void Update()
{
var relativ=transfom.lnverseTeansformPoint(target.position);
var angle=Mathf.Atan2(reative,reative.z)Mathf.Rad2Deg;
transform.Rotate(0,angle,0);
}
◆ static void Ceil(f:fioat):float
描述:返回大于等于f的最小整数.
◆ static void CeilTolnt(f:fioat):int
描述:返回大于等于f的最小整数.
◆ static void Clamp(value:float,min:float,max:float):float
描述:在一个最小的浮点数和最大的浮点数之间截剪。
//随着时间设置变换位置
//但是不会小于1或大于3
void Update()
{
transtorm,position.x=Mathf.Clamp(lime.time.1.0,3.0);
}
◆ staric void Clamp(value:int,min:int,max:int):int
描述:在min和max之间裁剪值并返回裁剪后的值。
//在1到3之间裁剪10,
//打印3到控制台
prnt(Mathf.Clamp(10,1,3))
◆ static void Clamp01(value;float):float
描述:在0和1之间裁剪值并返回裁剪后的值。
//随着时间设置变换位置
//但是不会小于0或大于1
void Update(){
transform.position.x=Mathf.Clamp01(Time.time);
}
◆ staic void ClosestPowerOflwo(value:int):int
描述:返回最直接的2的幂次值。
例如。7返回8或者19返回16
◆ staric void Cos(f:float):float
描述:返回弧度f的余弦值.
print(Mathf.Cos(3));
◆ staic void EXP(power:float):float
描述:返回e的特定次幂。
print(Mathf.Cos(6));
◆ static void Floor(f:float):float
描述:返回小于f的最大整数.
◆ static void FloorTolnt(f:float):int
描述:返回小于f的最大整数.
◆ static void lnverseLerp(from:float,to:float,value:float):float
描述:在两个值之间计算Lerp参数.
varwalkSpeed=5.0;
varunSpeed=10.0;
var speed=8.0;
//参数现在是3/5
vvar parameter=Mathf.laverseLerp(walkSpeed,runSpeed,speed);
◆ staic tunchon Lerp(a:float,b:float,t:float):float
描述:基本t在a到b之间插值。t本裁剪到0到1之间。
当t为0时返回from . 当t为1时返回to .当t=0.5时返回a和b的平均。
var minimum = 10.0;
var maximum = 20.0;
// 在一秒内从minimum渐变到maximum
Void Update()
{
transform.position.x = Mathf.lerp(minimum,maximum,Time.time);
}
◆ static void LerpAngle(a:float,b:float,t:float):float
描述:与Lerp相同,但是当它们可绕360度时确保插值正确,
变量a和b被认为是度。
//以2为底6的对数
//打印2.584963
print(Mathf.Log(6,2));
◆ static void Log(f:float):float
描述:返回一个数以自然(以e为底)对数。
//10的自然对数
//打印4.60517
print(Mathf.Log(10));
◆ static void Log10(f:float):float
描述:返回一个数以10为底的对数。
//以10为底100的对数
//打印2
print(Mathf.Log10(100));
◆ static void Max(a:float,b:float):float
描述:返回两个值中较大的一个。
//打印2
print(Mathf.Max(1,2));
◆ static void Max(a:int,b:int):int
描述:返回两个值中较大的一个。
//打印2
print(Mathf.Max(1,2));
◆ static void Min(a:float,b:float):float
描述:返回两个值中较小的一个。
//打印1
print(Mathf.Min(1,2));
◆ static void Min(a:int,b:int):int
描述:返回两个值中较小的一个。
//打印1
print(Mathf.Min(1,2));
◆ static void PingPong(t:float,length:float):float
描述:来回改变t值,t值不会超过length,也不会小于0,只会在length和0之间循环。
void Update()
{
//让x位置在0到3之间循环
transform.position.x = Mahtf.PingPong(Time.time,3);
}
◆ static void Pow(f:float,p:float):float
描述:返回f的p次方。
print(Mahtf.Pow(6,1.8));
◆ static void Repeat(t:float,length:float):float
描述:使t值循环,不大于length不小于0。它与操作模板类似,但可以使用浮点数。
void Update()
{
//让x位置在0到3之间循环
transform.position.x = Mahtf.Repeat(Time.time,3);
}
◆ static void Sign(f:float):float
描述:返回f的符号。
当f为正或为0则返回1,为负返回-1。
◆ static void Sin(f:float):float
描述:返回以f为弧度的sin值。
print(Mahtf.Sin(3));
◆ static void SmoothDamp(current:float,target:float,ref currentVelocity:float,smoothTime:float,maxSpeed:float = Mahtf.Infinity,deltaTime:float =Time.deltaTime):float
描述:逐步的向期望值变化。
这个值就像被一个不会崩溃的弹簧防震器所影响。这个函数可以用来平滑任何类型的值,位置,颜色,标量。最常用于让一个跟随摄像机的速度变的平滑。
current就是当前位置。target是我们希望达到的位置。currentVelocity是当前速度,这个值在你访问这个函数的时候会被随时修改。smoothTime是要到达目标位置的近似时间,实际到达目标时要快一些。maxSpeed可以让你随意的设定最大速度。deltaTime是上次访问该函
数到现在的时间。缺省为Time.deltaTime。
//平滑到目标高度
var target : Transform;
var smoothTime = 0.3;
private var yVelocity = 0.0;
void Update ()
{
var newPosition = Mathf.SmoothDamp(transform.position.y, target.position.y,yVelocity, smoothTime);
transform.position.y = newPosition;
}
◆ Static void SmoothDampAngle(current: float, target: float, ref currentVelocity): float, smoothTime: float, maxSpeed: float=Mathf.Infinity, deltaTime: float=Time.deltaTime): float
描述: 基于Game Programming Gems4章节1.10
随着时间逐渐的改变一个角度为目的的角度。这个值被像弹簧阻尼一样的函数平滑。这个函数可以用来平滑任何一种值,位置,颜色,标量。最常见的是平滑一个跟随摄像机。
current是当前位置。target是我们试图到达的位置。currentVelocity是当前速度,这个值在每次你调用这个函数的时候都被修改。smoothTime是到达目的地近似时间,实际的时间将更短。maxSpeed为允许的最大速度。deltaTime为从上次调用该函数到现在的时间。缺省为Time.deltaTime。
//一个简单的平滑跟随摄像机。
//跟随目标的朝向
var target : Transform;
var smooth = 0.3;
var distance = 5.0;
private var yVelocity = 0.0;
void Update ()
{
//从目前的y角度变换到目标y角度
var yAngle = Mathf.SmoothDampAngle(transform.eulerAngles.y,target.eulerAngles.y, yVelocity, smooth);
//target的位置
var position = target.position;
//然后,新角度之后的距离便宜
position += Quaternion.Euler(0, angle, 0) * Vector3 (0, 0, -distance);
//应用位置
transform.position = position;
//看向目标
transform.LookAt(target);
}
◆ static void SmoothStep (from : float, to : float, t : float) : float
描述:在min与max中插值并在限定处渐入渐出
◆ static void Sqrt (f : float) : float
描述:返回f的平方根
print(Mathf.Sqrt(10));
◆ static void Tan (f : float) : float
描述:返回弧度f的正切值
print(Mathf.Tan(0.5));
Matrix4x4
一个标准的4x4变换矩阵。
一个变换矩阵可以执行任意的线形3D变换(例如,评议,旋转,缩放,切边等等)并且偷师变化使用齐次坐标。脚本中很少使用矩阵:最常用Vector3,Quaternion,而且Transform类的功能更简单。单纯的矩阵用于特殊情况,如设置非标准相机投影。
参考任何图形学教程获取关于变换矩阵的深入揭示。
在Unity中,Matrix4x4被Transform,Camera,Material和GL函数使用。
变量
◆ var inverse : Matrix4x4
描述:返回该矩阵的逆(只读)
如果用原始矩阵诚意逆矩阵结果为identity矩阵。
如果一些矩阵以一个特定的方式变换响亮,逆矩阵可以将他们变换回去。例如worldToLoclaMatrix和localToWorldMatrix是互逆的。
◆ var this[row : int,column : int]:float
描述:访问[row,column]处的元素。
row和column必须在0到3之间,矩阵是一个4x4的数组,你可以通过使用这个函数访问单个的元素。
注意标准数学符号-row是第一个索引。
◆ var this[index : int]:float
描述:按顺序索引存取元素(包括在0…15)
矩阵是一个4x4的数组,所以它的总数为16,。你可以使用一维索引来存取单个元素。index是row+column
4
◆ var transpose : Matrix4x4
描述:返回这个矩阵的转置(只读)。
转置矩阵是将原矩阵行列交换得到的(沿主对角线翻转)
函数
◆ void GetColumn(i : int):Vector4
描述:获取矩阵的一列。
第i列作为Vector4返回,i必须在0到3之间。
参见:SetColumn
◆ void GetRow(i : int):Vector4
描述:返回矩阵的一行。
第i行作为Vector4返回,i必须在0到3之间。
参见:SetRow
◆ void MultiplyPoint (v : Vector3):Vector3
描述:通过这个矩阵变换位置。
返回由任意矩阵变化得到的位置v。如果这个矩阵是一个正规的3D变换矩阵,使用MultiplyPoint3x4比它更快。MultiplyPoint是较慢的,但是能处理投影变换。
参见:MultiplyPoint,MultiplyVector。
◆ void MultiplyPoint3x4(v : Vector3):Vector3
描述:通过这个矩阵变换位置(快)。
返回由当前变换矩阵变换得到的位置v。这个函数是MultiplyPoint的快速版,但是它只能处理常规的3D变化。Multiplypoint是较慢的,但是能处理投影变换。
参见:MultiplyPoint,MultiplyVector。
◆ void MultiplyVector(v : Vector3):Vector3
描述:通过这个矩阵变换方向。
这个函数类似于MultiplyPoint,但它是变换方向而不是位置。变换方向时,只考虑矩阵的旋转部分。
参见:MultiplyPoint,MultiplyPoint3x4。
◆ void SectColumn(i : int,v:vector4):void
描述:设置矩阵的一列。
使用这个来构建一个变换矩阵,这个矩阵使用right,up和forward向量。
//从变换构建一个矩阵
var matrix = Matrix4x4();
//从变换构建一个矩阵
void Start ()
{
matrix.SetColumn (0, transform.right);
matrix.SetColumn (1, transform.up);
matrix.SetColumn (2, transform.forward);
var p = transform.position;
matrix.SetColumn (3, Vector4 (p.x, p.y, p.z, 1));
}
//设置第i列为v。i必须在0到3之间。
参见:GetColumn
◆ void SetRow(i : int,v:Vector4):void
描述:设置矩阵的一行。
设置第i行为v。i必须在0到3之间。
参见:GetRow
◆ void SetTRS(pos : Vector3, q:Quaternon, s:Vector3):void
描述:设置这个矩阵为一个变换,旋转和缩放矩阵。
当前的矩阵本修改一遍具有位置pos,旋转q和缩放s。
◆ void ToString():string
描述:返回已格式化的该矩阵的字符串。
类变量
◆ static var identity : Matrix4x4
描述:返回单位矩阵(只读)。
这个矩阵在使用的时候不会影响任何东西。它的主对角线上全是1,其他位置全是0。
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
参见:zero变量。

◆&n, bsp;static var zero : Matrix4x4
描述:返回所有元素都为零的矩阵(只读)。
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
参见:identity变量。
类方法
◆ static operator * (lhs : Matrix4x4,rhs : Matrix4x4) : Matrix4x4
描述:两个矩阵相乘。
返回lhs * rhs。
◆ static operator * (lhs : Matrix4x4,v:Vector4):Vector4
描述:由矩阵来变换一个Vector4。
◆ static void Ortho(left : float,right : float,bottom : float,top : float,zNear : float,zFar : float):Matirx4x4
描述:创建一个正交投影矩阵。
返回的矩阵是视口ledt到right,bottom到top的区域,zNear和zFar深度裁剪面板。
如果你想使用正交来做像素修正渲染,最好使用GL.LoadPixelMatrix,因为它会为Direct3D渲染器运用适当的half-texel便宜。
参见:GL.LoadPixelMatrix,GL.LoadProjectionMatrix,GUI.matrix
◆ static void Perspective(fov : float,aspect : float,zNear : float,zFar : float):Matrix4x4
描述:创建一个透视投影矩阵。
fov为透视矩阵的垂直视野,aspect为宽高比,zNear和zFar设置为深度裁剪面板。
参见:GL.LoadPixelMatrix,GL.LoadProjectionMatrix,GUI.matrix
◆ static void Scale(v:Vector3):Matrix4x4
描述:穿件一个缩放矩阵。
返回沿着坐标轴被响亮v缩放的矩阵,该矩阵看起来像这样:
v x 0 0 0
0 v y 0 0
0 0 v z 0
0 0 0 1
◆ static void TRS(pos:Vector3,q:Quaternion,s:Vector3):Matrix4x4
描述:创建一个变换,旋转和缩放矩阵。
返回的矩阵具有位置pos,旋转q和缩放s。
NetworkMessageInfo
这个数据结构包含一个刚收到的来自网络的消息。
它揭示了它从哪来,发送的时间和由什么网络视图发送的。
变量
◆ var networkView : NetworkView
描述:发送这个消息的NetworkView
◆ var sender : NetworkPlayer
描述:发送这个网络信息(拥有者)的玩家。
◆ var TimeStamp : double
描述:当消息被发送时的时间戳,以秒计。
时间邮戳可以用于实现插值或者连续刘宝的预测,时间戳被作为双精度数传递,以避免游戏运行长一段时间后溢出。内置的时间戳被设置为32位整数,以毫秒为精度以便节省带宽。时间戳现对于Network.time自动调整。因此Network.time-messageInfo.timeStamp是抱在传输时花费的时间。
var something : float;
var transitTime: double;
void OnSerializeNetworkView (stream : BitStream, info : NetworkMessageInfo) {
var horizontalInput : float = 0.0;
if (stream.isWriting) {
// 发送
horizontalInput = transform.position.x;stream.Serialize (horizontalInput);
} else {
// 接收
transitTime = Network.time - info.timestamp;
stream.Serialize (horizontalInput);
something = horizontalInput;
}
}
void OnGUI() {
GUILayout.Label("Last transmission time: "+ transitTime);
}
NetworkPlayer
NetworkPlayer是一个数据结构,通过它你可以通过网络定位其他玩家。
例如,你可以直接发送一个消息给其他玩家。
变量
◆ var externalIP : string
描述:返回网络接口的外部IP地址。这个只能在建立了外接连接以后才能输入。
◆ var externalPort : int
描述:返回网络接口的外部接口。这个只能在建立了外接连接以后才能输入。
◆ var ipAddress : string
描述:该玩家的IP地址。
◆ var port : int
描述:该玩家的端口号。
构造函数
◆ static void NetworkPlayer(ip : string , port : int) : NetworkPlayer
描述:
函数
◆ void ToString() : string
描述:返回该网络玩家的指数。
类方法
◆ static operator != (lhs : NetworkPlayer,rhs : NetworkPlayer):bool
描述:如果两个NetworkPlayers不是同一个玩家返回真
◆ static operator == (lhs : NetworkPlayer,rhs : NetworkPlayer):bool
描述:如果两个NetworkPlayers是同一个玩家返回真
NetworkPlayer
NetworkPlayer是一个数据结构,通过它你可以通过网络定位其他玩家。
例如,你可以直接发送一个消息给其他玩家。
变量
◆ var externalIP : string
描述:返回网络接口的外部IP地址。这个只能在建立了外接连接以后才能输入。
◆ var externalPort : int
描述:返回网络接口的外部接口。这个只能在建立了外接连接以后才能输入。
◆ var ipAddress : string
描述:该玩家的IP地址。
◆ var port : int
描述:该玩家的端口号。
构造函数
◆ static void NetworkPlayer(ip : string , port : int) : NetworkPlayer
描述:
函数
◆ void ToString() : string
描述:返回该网络玩家的指数。
类方法
◆ static operator != (lhs : NetworkPlayer,rhs : NetworkPlayer):bool
描述:如果两个NetworkPlayers不是同一个玩家返回真
◆ static operator == (lhs : NetworkPlayer,rhs : NetworkPlayer):bool
描述:如果两个NetworkPlayers是同一个玩家返回真
NetworkViewID
在一个多玩家游戏中,NetworkViewID是用于网络视实例的唯一标识符。
这个是重要的,因为这个在所有客户端是唯一的数字,并且客户端自己可以产生这些数字,否则网络同步将被断开。
变量
◆ var isMine : bool
描述:如果是被我实例化的,返回真。
◆ var owner : NetworkPlayer
描述:拥有NetworkView的NetworkPlayer。可以是服务器。
函数
◆ void ToString() : string
描述:返回NetworkViewID中的格式化字符串细节。
类方法
◆ static operator != (lhs : NetworkViewID,rhs : NetworkViewID):bool
描述:如果两个NetworkViewIDs不是同一个玩家返回真
◆ static operator == (lhs : NetworkViewID,rhs : NetworkViewID):bool
描述:如果两个NetworkViewIDs是同一个玩家返回真
Network

网络类是网络实现的核心并提供核心函数。
这个类定义了网络接口和所有网络参数。你可以使用它来设置一个服务器或链接到一个服务器并有一些列辅助函数来帮助你完成这些功能。获取更多关于编辑器中的信息请参考Network Maner component reference。
消息传递
◆ void OnConnectedToServer() : void
描述:当成功链接到服务器上时,在客户端调用这个函数。
void OnConnectedToServer() {
Debug.Log(“Connected to server”);
}//发送本地玩家名称到服务器
◆ void OnDisconnectedFromServer(mode : NetworkDisconnection):void
描述:客户端从服务器上断开时在客户端上调用,但当连接被断开时在服务器上调用。
当链接丢失或被服务器断开时,在客户端调用这个函数。NetworkDisconnection枚举将标示连接是否断开或是否连接丢失。连接成功断开时再服务器上调用这个函数(在Network.Disconnect之后)。
void OnDisconnectedFromServer(info : NetworkDisconnection) {
if (Network.isServer) {
Debug.Log(“Local server connection disconnected”);
}
else {
if (info == NetworkDisconnection.LostConnection)
Debug.Log(“Lost connection to the server”);
else
Debug.Log(“Successfully diconnected from the server”);
}
}
◆ void OnFailedToConnect(error : NetworkConnectionError):void
描述:当连接因为某些原因失败时,在客户端上调用该函数。
失败的原因作为NetworkConnectionError枚举传入。
void OnFailedToConnect(error: NetworkConnectionError){
Debug.Log("Could not connect to server: "+ error);
}
◆ void OnFailedToConnectToMasterServer(error : NetworkConnectionError):void
描述:当连接到主服务器出现问题时,在客户端或服务器端调用该函数。
错误原因作为NetworkConnectionError枚举传入。
void OnFailedToConnectToMasterServer(info: NetworkConnectionError){
Debug.Log("Could not connect to master server: "+ info);
}
◆ void OnNetworkInstantiate(info : NetworkMessageInfo):void
描述:当一个物体使用NetworkInstantiate进行网络初始化时在该物体上调用这个函数。这个对于禁用或启用一个已经初始化的物体组件来说是非常有用的,它们的行为取决于他们是本地还是远端。注意:在NetworkMessageInfo里的networkView属性不能在OnNetworkInstantiate里使用。
void OnNetworkInstantiate (info : NetworkMessageInfo) {
Debug.Log("New object instantiated by " + info.sender);
}
描述:当一个新的玩家成功连接时再服务器上调用这个函数。
private var playerCount: int = 0;
void OnPlayerConnected(player: NetworkPlayer) {
Debug.Log("Player " + playerCount++ + " connected from " + player.ipAddress + “:” + player.port);
}// 用玩家信息构建一个数据结构
◆ void OnPlayerDisconnected(player : NetworkPlayer) : void
描述:当玩家从服务器断开时再服务器上调用这个函数。
void OnPlayerDisconnected(player: NetworkPlayer) {
Debug.Log("Clean up after player " + player);
Network.RemoveRPCs(player);
Network.DestroyPlayerObjects(player);
}
◆ void OnSerializeNetworkView(stream : BitStream, info : NetworkMessageInfo) : void
描述:用来在一个被网络视架空的抄本中自定义变量同步。
它自动决定被序列化的变量是否应该发送或接收。这个依赖于谁拥有这个物体,例如,拥有者发送,而其他所有的接收。
//该物体的生命值信息
var currentHealth : int;
void OnSerializeNetworkView(stream : BitStream, info : NetworkMessageInfo){
var health : int = 0;
if (stream.isWriting){
health = currentHealth;
stream.Serialize(health);
}
else{
stream.Serialize(health);
currentHealth = health;
}
}
◆ void OnServerInitialized() : void
描述:当Network . InitializeServer 被调用并完成时,在服务器上调用这个函数。
void OnServerInitialized() {
Debug.Log(“Server initialized and ready”);
}
类变量
◆ static var connections : NetworkPlayer[]
描述:所有连接上的玩家。在客户端中,该变量只包含服务器。
void OnGUI() {
if (GUILayout.Button (“Disconnect first player”)) {
if (Network.connections.length > 0) {
Debug.Log(“Disconnecting: “+Network.connections[0].ipAddress+”:”+Network.connections[0].port);
Network.CloseConnection(Network.connections[0], true);
}
}
}
◆ static var ConnectionTesterIP:string
描述:用在Network.TestConnection中的连接测试的IP地址。
void ResetIP() {
Network.connectionTesterIP = “127.0.0.1”;
Network.connectionTesterPort = 10000;
}
◆ static var connectionTesterPort:int
描述:用在Network.TestConnection中的连接测试的IP端口。
void ResetIP() {
Network.connectionTesterIP = “127.0.0.1”;
Network.connectionTesterPort = 10000;
}
◆ static var incomingPassword:string
描述:为这个服务器设置密码(对于进入的连接)。这个必须与客户端上Network.Connect中的相同,传递””表示没有密码(默认)。
void ConnectToServer () {
Network.Connect(“127.0.0.1”, 25000, “HolyMoly”);
}
void LaunchServer () {
Network.incomingPassword = “HolyMoly”;
Network.InitializeServer(32, 25000);
}
◆ static var isClinet:bool
描述:如果你的端类型是客户端则返回真。
void OnGUI() {
if (Network.isServer)
GUILayout.Label(“Running as a server”);
else if (Network.isClient)
GUILayout.Label(“Running as a client”);
}
◆ static var isMessageQueueRunning:bool
描述:启用或禁用网络消息处理。如果这个被禁用,没有RPC调用或网络视同步会替代。Network level loading有如何使用这个函数的例子。
◆ static var isServer:bool
描述如果你的端类型是服务器端则返回真。
void OnGUI() {
if (Network.isServer)
GUILayout.Label(“Running as a server”);
else if (Network.isClient)
GUILayout.Label(“Running as a client”);
}
◆ static var maxConnections:int
描述:设置允许的连接/玩家的最大数量。设置0,以为这没有心的连接可以被建立。但现有保持连接。设置为-1表示最大连接数被设置为与当前开发的连接数相同。在这种情况下,如果一个玩家掉线,那么这个空位还是为他开放的。这个不能设置为高于Network.InitializeServer设置的连接数。
void StartGameNow() {
// 不允许更多玩家
Network.maxConnections = -1;
}
◆ static var minimumAllocatableViewIDs:int
描述:在ViewIDc池中获取或设置服务器分配给客户端ViewID的最小数。当玩家使用新的数字连接并被刷新时,ViewID池被分配给每个玩家。服务器和客户端应该同步这个值。在服务器上设置的更高,将会发送比它们真正需要的更多视ID数到客户端。在客户端上设置更高,意味着它们需要更多视ID。例如当池需要的ID数,服务器中并不包含足够的数量,则会在一行中使用两次。默认值为100。如果一个游戏通过网络实例化大量新的物体,例如每秒超过100个的网络实例,那么这个值需要被设置的更高。
void Awake () {
// 使用更大的视ID池来分配
Network.minimumAllocatableViewIDs = 500;
}
◆ static var natFacilitatorIP:string
描述:NAT穿透辅助的IP地址。通常这与服务器相同。
void ResetIP() {
Network.natFacilitatorIP = “127.0.0.1”;
Network.natFacilitatorPort = 10001;
}
static var natFacilitatorPort:int
描述:NAT穿透辅助的端口。
void ResetIP() {
Network.natFacilitatorIP = “127.0.0.1”;
Network.natFacilitatorPort = 10001;
}
◆ static var peerType:NetworkPeerType
描述:端类型状态。例如,断开连接,连接,服务器或客户端。
void OnGUI() {
if (Network.peerType == NetworkPeerType.Disconnected)
GUILayout.Label(“Not Connected”);
else if (Network.peerType == NetworkPeerType.Connecting)
GUILayout.Label(“Connecting”);
else
GUILayout.Label(“Network started”);
}
◆ static var player:NetworkPlayer
描述:获取本地NetworkPlayer实例。
◆ static var ProxyIP:string
描述:代理服务器的IP地址。

void Awake(){
Network.proxyIP = “1.1.1.1”;
Network.proxyPort = 1111;
}
◆ static var proxyPassword:string
描述:设置代理服务器密码。可以制作你自己的代理服务器。在这种情况下,你也许想用密码保护它。然后Unity玩家必须正确的设置这个值。
void Awake(){
//设置自定义代理服务器地址和密码
Network.proxyIP = “1.1.1.1”;
Network.proxyPort = 1111;
Network.proxyPassword = “secret”;
}
◆ static var proxyPort:int 描述:代理服务器的端口。
void Awake(){
Network.proxyIP = “1.1.1.1”;
Network.proxyPort = 1111;
}
◆ static var sendRate:float 描述:用于所有网络视的默认网络更新发送速率。
void Awake () {
//增加默认的发送速率
Network.sendRate = 25;
}
◆ static var sendRate:float
描述:获取当前网络时间(秒)。这个可以用来比较NetworkMessageInfo中返回的时间。这个实例脚本需要附加到一个带有网络视的物体上,并使网络视监视这个脚本。它管理时间,发送这个物体的同步X位置消息。
var something : float;
var transitTime: double;
void OnSerializeNetworkView (stream : BitStream, info : NetworkMessageInfo) {
var horizontalInput : float = 0.0;
if (stream.isWriting) {//发送
horizontalInput = transform.position.x;
stream.Serialize (horizontalInput);
}
else {//接收
transitTime = Network.time - info.timestamp;
stream.Serialize (horizontalInput);
something = horizontalInput;
}
}
void OnGUI() {
GUILayout.Label("Last transmission time: "+ transitTime);
}
◆ static var useNat:bool

描述:当连接(客户端)或接收连接(服务器)时,我们应该使用NAT穿透吗?如果这个在在服务器上设置,只有具有NAT穿透的客户端才能连接到它。但是如果服务器有一个NAT地址,这个需要打开以便连接。有些路由器不知道如何做NAT穿透。因此对于这些玩家唯一的方法就是修改路由器以便打开合适的转发端口(游戏端口)。参考Network.TestConnection和Network.TestConnectionNAT获取如何自动检测端用户的方法。
void OnGUI() {
if (GUILayout.Button (“Start Server”))
{
//如果没有共有IP地址,使用NAT穿透
Network.useNat = !Network.HavePublicAddress();
Network.InitializeServer(32, 25002);
MasterServer.RegisterHost(“MyUniqueGameType”, “JohnDoes game”, “l33t game for all”);
}
}
◆ static var useProxy:bool
描述:标示是否需要代理服务器支持,在这种情况下流量通过代理服务器被延迟。代理伺服器是一种与服务器和客户端连接性问题的解决方案。当机器有一个非NAT穿透能力的路由器,其连接的选择非常优先。一个游戏不能没有外部连接(只有客户端在本地网络中)。通过使用代理服务器,该机器可以具有完全的连接性,但是额外的代价是所有的流量都会被延迟。一个没有NAT穿透能力的客户端通过代理能够连接到任何服务器,只要代理服务器正确的设置。官方并不提供代理服务器为公众使用。所以你需要自己建立代理服务器。当然,用共有IP地址设置代理服务器并保证有大量可用带宽是明智的。当作为客户端运行时,只要启用Network .useProxy就可以。想往常昂使用Network . Connect连接到服务器。所有通过代理服务器的流量将被延迟。服务器的外部IP和内部IP还像往常一样工作。这样如果它们位于同一网络中,客户端可以直接连接到它而不需要代理。作为一个服务器运行时,OnServerInitialized(NetworkPlayer)返回一个NetworkPlayer结果表明游戏服务器中转的IP端口,代理服务器分配给游戏服务器的端口是什么。这个是其他客户端可以连接到的IP端口。当连接到服务器时,客户端不会将这个服务器与其他服务器区别对待。严格的说,它们不需要知道这个服务器得到代理服务器的帮助。当使用主服务器时,你不能只依赖于它在使用代理服务器时为服务器注册的IP端口。服务器使用的代理服务器的IP地址和端口,可以防止在数据域的注释中来发送给主服务器。从主服务器接收主机信息的客户端可以去除注释域并查看它是否能够为那个主机使用另一个可选的IP端口。
重要:你不应该同时为连接到它的服务器和客户端启用代理支持,会发生意想不到的事情。
bool imaserver;
String serverIP;
int serverPort;
bool serverUsesNAT;
void Awake(){
//设置自定义代理服务器地址
Network.proxyIP = “1.1.1.1”;
Network.proxyPort = 1111;
if (imaserver)
StartServerWithProxy();
else
ConnectToServerWithProxy();
}
void StartServerWithProxy(){
Network.useProxy = true;
Network.InitializeServer(2,25000);
}
void OnServerInitialized(player: NetworkPlayer){
if (Network.useProxy)
Debug.Log ("Successfully started server with proxy support. We are connectable through "+ player.ipAddress + “:” + player.port);
}
void OnFailedToConnect(msg: NetworkConnectionError){
if (Network.useProxy && imaserver){
Debug.LogError("Failed to connect to proxy server: " + msg);
}
}
void ConnectToServerWithProxy(){
Network.useProxy = true;
Network.useNat = serverUsesNAT;
Network.Connect(serverIP, serverPort);
}
void OnConnectedToServer(){
Debug.Log(“Connected successfully to server”);
}
类方法
◆ static void AllocateViewID():NetworkViewID
描述:查询下一个可用的网络视ID数并分配它(保留)。这个数字又可以被赋予一个实例化物体的网络视。注意,为了使其可正常工作,必须有一个NetworkView附加到这个物体,这个物体必须有这个脚本并必须使这个脚本作为它的观察属性。必须有一个Cube预设,带有一个NetworkView它监视某些东西(例如该Cube的Transform)。脚本中的cubePrefab变量必须设置为立方体预设。使用智能的AllocateViewID是最简单的方法。如果有超过一个NetworkView附加在初始化的Cube上着将变得更复杂。
var cubePrefab : Transform;
void OnGUI (){
if (GUILayout.Button(“SpawnBox”)){
var viewID = Network.AllocateViewID();
networkView.RPC(“SpawnBox”, RPCMode.AllBuffered, viewID, transform.position);
}
}
@RPC
void SpawnBox (viewID : NetworkViewID, location : Vector3) {
//实例化本地的prefab
var clone : Transform;
clone = Instantiate(cubePrefab, location, Quaternion.identity);
var nView : NetworkView;
nView = clone.GetComponent(NetworkView);
nView.viewID = viewID;
}
◆ static void CloseConnection (target : NetworkPlayer, sendDisconnectionNotification : bool) : void
描述:关闭与其他系统的连接。/target/定义连接到的那个系统将被关闭,如果我们是客户端,连接到服务器的连接将会关闭。如果我们是服务器目标玩家,将会被踢出。sednDisconnectionNotification启用或禁用通知将被发送到另一端。如果禁用连接被丢弃,如果没有断开连接通知被发送到远端,那么之后的连接将被丢弃。
void OnGUI() {
if (GUILayout.Button (“Disconnect from server”)) {
if (Network.connections.length == 1) {
Debug.Log(“Disconnecting: “+Network.connections[0].ipAddress+”:”+Network.connections[0].port);
Network.CloseConnection(Network.connections[0], true);
}
else if (Network.connections.length == 0)
Debug.Log(“No one is connected”);
else if (Network.connections.length > 1)
Debug.Log(“Too many connections. Are we running a server?”);
}
if (GUILayout.Button (“Disconnect first player”)) {
if (Network.connections.length > 0) {
Debug.Log(“Disconnecting: “+Network.connections[0].ipAddress+”:”+Network.connections[0].port);
Network.CloseConnection(Network.connections[0], true);
}
}
}
◆ static void Connect (IP:string, remotePort:int, password:string = “”):NetworkConnectionError
描述:连接到特定的主机(IP或域名)和服务器端口。参数是主机的IP地址,点IP地址或一个域名。remotePort,指定连接到远端机器的端口。password,它是一个可选的用于服务器的密码。这个密码必须设置为与服务器的Network.incomingPassword相同。
void ConnectToServer () {
Network.Connect(“127.0.0.1”, 25000);
}
◆ static void Connect(IPs:string[], remotePort:int, password:string = “”):NetworkConnectionError
描述:该函数与Network.Connect类似,但是可以接受一个IP地址数组。当从一个主服务器的主机信息返回多个内部IP地址时,IP数据结构可以被直接传入这个函数。它将实际的连接到相应ping的第一个IP(可连接)。
◆ static void Destroy (viewID : NetworkViewID) : void
描述:跨网络销毁与该视ID相关的物体。本地的于远端的都会被销毁。
float timer;
void Awake () {
timer = Time.time;
}
//通过网络销毁拥有该脚本的物体
//其必须具备NetworkView属性
void Update() {
if (Time.time - timer >
2)
{
Network.Destroy(GetComponent(NetworkView).viewID);
}
}
void Update() {
if (Time.time - timer > 2){
Network.Destroy(GetComponent(NetworkView).viewID);
}
}
◆ static void Destroy (gameObject : GameObject) : void
描述:跨网络销毁该物体。本地的与远端的都会被销毁。
var timer : float;
void Awake () {
timer = Time.time;
}//通过网络销毁拥有该脚本的物体
void Update() {
if (Time.time - timer > 2){
Network.Destroy(gameObject);
}
}
◆ static void DestroyPlayerObjects (playerID : NetworkPlayer) : void
描述:基于视ID销毁所有属于这个玩家的所有物体。这个只能在服务器上调用。例如,清理一个已断开的玩家留下的网络物体。
void OnPlayerDisconnected(player: NetworkPlayer) {
Debug.Log("Clean up after player " + player);
Network.RemoveRPCs(player);
Network.DestroyPlayerObjects(player);
}
◆ static void Disconnect (timeout : int = 200) : void
描述:关闭所有开放的连接并关闭网络接口。timeout参数表示网络接口在未收到信号的情况下,多长时间会关闭。网络状态,入安全和密码,也会被重置。
void OnGUI() {
if (GUILayout.Button (“Disconnect”)) {
Network.Disconnect();
MasterServer.UnregisterHost();
}
}
◆ static void GetAveragePing (player : NetworkPlayer) : int
描述:到给定player的最后平均ping时间,以毫秒计。如果没有发现玩家,返回-1。Ping会每隔几秒自动发出。
void OnGUI() {
var i: int;
GUILayout.Label(“Player ping values”);
for (i=0; i < Network.connections.length; i++) {
GUILayout.Label(“Player " + Network.connections[i] + " - " + Network.GetAveragePing(Network.connections[i]) + " ms”);
}
}、

◆ static void GetLastPing (player : NetworkPlayer) : int
描述:到给定player的最后平均ping时间,以毫秒计。
如果没有发现玩家,返回-1。Ping会每隔几秒自动发出。
void OnGUI() {
var i: int;
GUILayout.Label(“Player ping values”);
for (i=0; i < Network.connections.length; i++) {
GUILayout.Label(“Player " + Network.connections[i] + " - " + Network.GetLastPing(Network.connections[i]) + " ms”);
}
}
◆ static void HavePublicAddress () : bool
描述:检查该机器是否有一个公共IP地址。检查所有接口来获取Ipv4公共地址。如发现返回真。
void OnGUI() {
if (GUILayout.Button (“Start Server”)){
// 如果没有公共IP地址,使用NAT穿透
Network.useNat = !Network.HavePublicAddress();
Network.InitializeServer(32, 25002);
MasterServer.RegisterHost(“MyUniqueGameType”, “JohnDoes game”, “l33t game for all”);
}
}
◆ static void InitializeSecurity () : void
描述:初始化安全层。你需要再Network.InitializeServer调用之后在服务器上调用这个函数。不要再客户端调用该函数你的在线游戏达到一定知名度时就有人试图作弊。你讲需要再游戏层和网络层处理这个。如果你希望使用它们,Unity可以通过提供安全连接处理网络层。
使用AES加密,阻止未授权读取并阻止重复攻击,添加CRC来检测数据篡改,使用随机的、加密的SYNCookies来组织未授权登录,使用RSA加密保护这个AES密钥
大多数游戏将使用安全连接。然后,它们会向每个数据包添加15自己并需要时间计算,所以你也许想限制使用此功能。
void Start (){
Network.InitializeSecurity();
Network.InitializeServer(32, 25000);
}
◆ static void InitializeServer (connections:int,listenPort:int) : NetworkConnectionError
描述:初始化安全层。connections是允许进入的连接或玩家的数量。listenPort是我们要监听的端口。
void LaunchServer () {
Network.incomingPassword = “HolyMoly”;
Network.InitializeServer(32, 25000);
}
◆ static void Instantiate (prefab:Object, position:Vector3, rotation:Quaternion, group:int):Object
描述:网络实例化预设。给定的预设将在所有的客户端上初始化。同步被自动设置所以没有额外的工作需要做。位置、旋转和网络组数值作为给定的参数。这是一个RPC调用,因此

当Network.RemoveRPCs为这个组调用的使用,这个物体将被移除。注意在编辑器中必须设置playerPrefab,你能在Object.Instantiate物体参考中获取更多实例化信息。
//当成功连接到服务器上时
//立即实例化新连接的玩家角色
var playerPrefab : Transform;
void OnConnectedToServer (){
Network.Instantiate(playerPrefab, transform.position, transform.rotation, 0);
}
◆ static void RemoveRPCs (playerID : NetworkPlayer) : void
描述:移除所有属于这个玩家ID的RPC函数。
void OnPlayerDisconnected(player: NetworkPlayer) {
Debug.Log("Clean up after player " + player);
Network.RemoveRPCs(player);
Network.DestroyPlayerObjects(player);
}
◆ static void RemoveRPCs (playerID : NetworkPlayer, group : int) : void
描述:移除所有属于这个玩家ID并给予给定组的所有RPC函数。
◆ static void RemoveRPCs (viewID : NetworkViewID) : void
描述:移除所有与这个视ID数相关的RPC函数调用。
◆ static void RemoveRPCsInGroup (group : int) : void
描述:移除所有属于给定组数值的RPC函数。
◆ static void SetLevelPrefix (prefix : int) : void
描述:设置关卡前缀,然后所有网络视ID都会使用该前缀。此处提供了一些保护,可以防止来自前一个关卡的旧的网络更新影响新的关卡。此处可以设置为任何数字并随着新关卡的加载而增加。这不会带来额外的网络负担,只会稍微减小网络视ID池。Network level loading有如何使用该函数的例子。
◆ static void SetReceivingEnabled (player : NetworkPlayer, group : int, enabled : bool) : void
描述:启用或禁用特定组中来自特定玩家的信息接收。在你不希望任何网络消息进入的时候可以使用这个函数,然后在你准备好的时候启用。例如,可用于停止网络消息,知道关卡被加载。
//停止接收来自所有玩家(客户端)的组0的信息
for (var player : NetworkPlayer in Network.connections)
Network.SetReceivingEnabled(player, 0, false);
◆ static void SetSendingEnabled (group : int, enabled : bool) : void
描述:启用或禁用特定网络组上的信息传输和RPC调用。当你知道你不发送任何有用的信息到其他客户端时,可以设置这个。例如在你完全你家在关卡之前。Network level loading中有例子。
static void SetSendingEnabled (player : NetworkPlayer, group : int, enabled : bool) : void
描述:基于目标玩家和网络组启用或禁用消息传说和RPC调用。当在客户端使用时,唯一可能的NetworkPlayer就是服务器。
◆ static void TestConnection (forceTest : bool = false) : ConnectionTesterStatus
描述:测试这个机器的网络连接。执行两种测试,这取决机器有公用IP还是只有一个私有IP。公用IP测试主要用于服务器,不需要测试具有公用地址的客户端。为了公用IP测试成功,必须开启一个服务器实例。一个测试服务器将尝试连接到本地服务器的IP地址和端口,因此它被显示在服务器中位可连接状态。如果不是,那么防火墙是最有可能阻断服务端口的。服务器实例需要运行以便测试服务器能连接到它。另一个试验检测NAT穿透能力。服务器和客户端都可以进行,无需任何事先设定。如果用于服务器NAT测试失败,那么不设置端口转发是一个坏主意。本地LAN网络之外的客户端将不能连接。如果测试失败,客户端就不能使用NAT连接到服务器,这些服务器将不会提供给用户作为主机。这个函数是异步的,并可能不会返回有效结果。因为这个测试需要一些时间来完成(1-2秒)。测试完成后,测试的结果只在函数被再次调用时返回。这样,频繁访问该函数是安全的。如果需要其他的测试,入网络连接已改变,那么forcTest参数应该为真。该函数返回一个ConnectionTesterStatus枚举。
//是否应该在主机列表上隐藏NAT主机?
private var filterNATHosts = false;
private var doneProbingPublicIP = false;
void OnGUI (){
//开始/轮询连接测试
//在标签上显示结果并按照结果做出相应的反应
natCapable = Network.TestConnection();
if (natCapable == -2)
GUILayout.Label(“Problem determining NAT capabilities”);
else if (natCapable == -1)
GUILayout.Label(“Undetermined NAT capabilities”);
else if (natCapable == 0){
GUILayout.Label("Cannot do NAT punchthrough, " +"filtering NAT enabled hosts for client connections, " +“impossible to run a server.”);
filterNATHosts = true;
Network.useNat = false;
}
else if (natCapable == 1){
if (doneProbingPublicIP)
GUILayout.Label(“Non-connectable public IP address (port “+ serverPort +” blocked), NAT unchthrough can circumvent the firewall.”);
else
GUILayout.Label(“NAT punchthrough capable. " +“Enabling NAT punchthrough voidality.”);
//一旦服务器开始NAT功能被启用
//客户端是否开启这个基于主机是否需要
Network.useNat = true;
}
else if (natCapable == 2){
GUILayout.Label(“Directly connectable public IP address.”);
Network.useNat = false;
}
else if (natCapable == 3){
GUILayout.Label(“Non-connectble public IP address (port " + serverPort +” blocked), running a
server is impossible.”);
Network.useNat = false;
if (!doneProbingPublicIP){
natCapable = Network.TestConnectionNAT();
doneProbingPublicIP = true;
}
}
else if (natCapable == 4){
GUILayout.Label("Public IP address but server not initialized, "+“it must be started to check server accessibility.”);
Network.useNat = false;
}
if (GUILayout.Button (“Retest connection”)){
Debug.Log(“Redoing connection test”);
doneProbingPublicIP = false;
natCapable = Network.TestConnection(true);
}
}
◆ static void TestConnectionNAT () : ConnectionTesterStatus
描述:测试NAT穿透的连接性。这个就像Network.TestConnection,只不过NAT穿透是强制的,即使该机器有一个公用地址。请参考Network.TestConnection。
Object

Unity所涉及的所有物体的基类。任何从Object继承的公有变量将作为一个目标显示在监视面板中,允许你从GUI中设置。
变量
◆ var hideFlags : HideFlags 描述:该物体是否被隐藏,保存在场景中或被用户修改。
◆ var name : string
描述:对象的名称。组件与游戏物体和所有附加的组件共享相同名称。
//改变物体的名称为Hello
name = “Hello”;
函数
◆ void GetInstanceID () : int 描述:返回该物体的实例id。一个物体的实例ID总是唯一。
描述:返回该物体的实例id。
一个物体的实例id总是唯一的。
print(GetInstanceID());
类方法
◆ static void Destroy (obj : Object, t : float = 0.0F) : void
描述:移除一个游戏物体,组件或资源。物体obj将被小火或者t秒后被销毁。如果obj是一个Component它将被从GameObject中移除。如果obj是一个GameObject它将销毁这个GameObject,以及它的组件和所子对象。实际的销毁总是推迟到下个Update来临时,但总在渲染前完成。
//销毁这个游戏物体
Destroy (gameObject);
//从物体上移除该脚本
Destroy (this);
//从游戏物体上移除刚体组件
Destroy (rigidbody);
//加载该游戏物体后5秒删除
Destroy (gameObject, 5);
//当玩家按下Ctrl时移除名为FoooScript的脚本
void Update () {
if (Input.GetButton (“Fire1”) && GetComponent (FooScript))
Destroy (GetComponent (FooScript));
}
◆ static void DestroyImmediate (obj : Object, allowDestroyingAssets : bool = false) : void

描述:立即销毁物体。强烈建议使用Destroy代替它。该函数应该只在编写编辑器代码时使用,因为延迟的销毁将不会再编辑器模式调用。游戏代码中建议使用Destroy。Destroy总是延迟的(但是在同一帧执行)。小心使用该函数,因为它能永久的销毁资源。
◆ static void DontDestroyOnLoad (target : Object) : void
描述:加载新场景时确保物体target不被自动销毁。当加载一个新的关卡时,场景中的所有物体都会被销毁,然后心关卡中的物体将被加载。为了在关卡加载的时候保持物体在上面调用DontDestroyOnLoad。如果物体是一个组件或游戏物体,那么它的整个变换层次将不会被销毁。
//保证该游戏物体及其变化子物体在载入新场景时不会被销毁。
void Awake () {
DontDestroyOnLoad (this);
}
◆ static void FindObjectOfType (type : Type) : Object
描述:返回第一个类型为Type的已激活加载的物体。参见Object.FindObjectsOfType 。
◆ static void FindObjectsOfType (type : Type) : Object[]
描述:返回所有类型为Type的已激活加载的物体。
参见Object.FindObjectsOfType 。
它将返回任何资源(网格、纹理、预设等)或已激活加载的物体。
//当点击该物体,它将禁用场景中所有铰链中的弹簧。
void OnMouseDown () {
hinges = FindObjectsOfType (HingeJoint);
for (var hinge : HingeJoint in hinges) {
hinge.useSpring = false;
}
}
c#版
public class Something : MonoBehaviour{
void OnMouseDown(){
HingeJoint[] hinges = FindObjectsOfType();
for (HingeJoint hinge in hinges) {
hinge.useSpring = false;
}
}
}
◆ static void Instantiate (original : Object, position : Vector3, rotation : Quaternion) : Object
描述:克隆original物体并返回该克隆。防御position兵设置旋转为rotation,然后返回该克隆。本职上与cmd-d相同,并移动到给定位置。如果一个游戏物体、组件或脚本实例被传入,Instantiate将克隆整个游戏物体层次,所有的子对象也被克隆。所有游戏物体被激活。参加:预设实例化的深入讨论。
//实例化预设的10个拷贝,间隔为2单位。
var prefab : Transform;
for (var i=0;i<10;i++) {
Instantiate (prefab, Vector3(i * 2.0, 0, 0), Quaternion.identity);
}
Instantiate更多常用于实例化投射物、AI敌人,粒子爆炸或b破损的物体。
//实例化一个刚体,然后设置速度。
var projectile : Rigidbody;
void Update () {
//按下ctrl时,发射一个物体
if (Input.GetButtonDown(“Fire1”)) {
//以该变化位置与旋转实例化投射物
var clone : Rigidbody;
clone = Instantiate(projectile, transform.position, transform.rotation);
//沿当前物体Z轴,给克隆体一个初始速度
clone.velocity = transform.TransformDirection (Vector3.forward * 10);
}
}
实例化也能直接克隆脚本实例。整个游戏物体层级将被克隆,并且克隆脚本的实例将被返回。
//初始化一个附加了Missile脚本的预设
var projectile : Missile;
void Update () {
//按下ctrl时,发射一个物体
if (Input.GetButtonDown(“Fire1”)) {
//以该变化位置与传转实例化投射物
var clone : Missile;
clone = Instantiate(projectile, transform.position, transform.rotation);
//设置火箭超市销毁为5秒
clone.timeoutDestructor = 5;
}
}
克隆一个物体之后可以使用GetComponet来设置附加到克隆物体上的特定组件的属性。
◆ static void Instantiate (original : Object) : Object
描述:克隆original物体并返回该克隆。这个函数保留克隆物体的位置与赋值命令相同(cmd-d)。
//当任何刚体进入这个触发器时实例化预设。
//它保留预设的原始位置与旋转。
var prefab : Transform;
void OnTriggerEnter () {
Instantiate (prefab);
}
◆ static operator != (x : Object, y : Object) : bool
描述:比较两个物体是否不同。
var target : Transform;
void Update (){
//如果target不同于我们的变换。
if (target != transform){
print(“Another object”);
}
}
◆ static operator == (x : Object, y : Object) : bool
描述:比较两个物体是否相同。
var target : Collider;
void OnTriggerEnter (trigger : Collider){
if (trigger == target)
print(“We hit the target trigger”);
}
var target : Transform;
void Update (){
//该物体已被销毁。
if (target == null)
return;
}
◆ static implicit void bool (exists : Object) : bool
描述:这个物体是否存在?
if(rigidbody)
等同于
if(rigidbody != null)
AnimationClip
类,继承自Object。
存贮基于动画的关键帧。
AnimationClip被Animation使用来播放动画。
变量
◆ var frameRate : float
描述:关键帧被残阳的帧率。这个与用来制作动画/模型的动画程序相同。
//打印动画剪辑的帧率到控制台。
print(animation[“walk”].clip.frameRate);
◆ var length : float
描述:动画播放的描述。
animation.Play(animation.clip);
//等待动画完成。
yield WaitForSeconds (animation.clip.length);
◆ var wrapMode : WrapMode
描述:在动画状态中设定默认的卷模式。
构造函数
◆ static void AnimationClip () : AnimationClip
描述:创建一个新的动画剪辑。
函数
◆ void AddEvent (evt : AnimationEvent) : void
描述:创建一个新的动画剪辑。这将添加这个时间直到退出播放模式或玩家退出。如果你想从编辑器添加一个固定的剪辑到AnimationEvent,使用UnityEditorAnimationUtility.SetAnimationEvents。
◆ void ClearCurves () : void
描述:从剪辑中清理所有曲线。
◆ void SetCurve (relativePath : string, type : Type, propertyName : string, curve : AnimationCurve) : void
参数
relativePath 应用这个曲线的游戏物体的路径。relativePath被格式化为一个路径名。入:“root/spine/leftArm”如果relativePath为空,表示该动画剪辑所附加的游戏物体。
type 被进行动画处理的组件的类类型。
propertyName 被动画处理的属性的名称或路径。
curve 动画曲线。
描述:给动画指定一个特定的曲线属性。如果曲线为null该曲线将被移除。如果曲线为null该曲线将被移除。如果曲线属性已经存在,则会被替换。通常的名称是:“localPostion.x”,“localPostion.y”,“localPostion.z”,“localRotation.x”,“localRotation.y”,“localRotation.z”,“localRotation.w”,“localScale.x”,“localScale.y”,“localScale.z”。出于性能考虑Transform的位置、旋转和缩放只能被所谓一个动画属性。

//对x坐标的位置进行动画处理
void Start (){
//创建曲线
var curve = AnimationCurve.Linear(0, 1, 2, 3);
//用曲线创建剪辑
var clip = new AnimationClip();
clip.SetCurve("", Transform, “localPosition.x”, curve);
//添加并播放剪辑
animation.AddClip(clip, “test”);
animation.Play(“test”);
}
@script RequireComponent(Animation)
Material属性可以使用shader到处的名称制作动画属性。通常的属性名称是:“_MainTex”,“_BumpMap”,“_LightMap”,“_Color”,“_SpecColor”,“_Emmission”。
Float属性“PropertyName”
Vector4属性“PropertyName.x”“PropertyName.x” “PropertyName.x” “PropertyName.x” Color属性“PropertyName.r”“PropertyName.g”“PropertyName.b”“PropertyName.a”
UV旋转属性“PropertyName.rotation”;UB便宜和缩放“PropertyName.offset.x”“PropertyName.offset.y”“PropertyName.scale.x”“PropertyName.scale.y”
对于在同一个Renderer上的多个索引材质,你可以像这样加前缀“[1]._MainTex.offset.y”。
//对alpha值和主要材质地平线补偿进行动画处理
void Start () {
var clip = new AnimationClip ();
clip.SetCurve ("", typeof(Material), “_Color.a”,AnimationCurve (Keyframe(0, 0, 0, 0), Keyframe(1, 1, 0, 0)));
clip.SetCurve ("", typeof(Material), “_MainTex.offset.x”,AnimationCurve.Linear(0, 1, 2, 3));
animation.AddClip (clip, clip.name);
animation.Play(clip.name);
}
@script RequireComponent(Animation)
继承的成员
继承的变量
name 对象名称
hideFlags 该物体是否被隐藏,保存在场景中或被用户修改
继承的函数
GetInstanceID 返回该物体的实例id
继承的类函数
operator bool 这个物体存在吗?
Instantiate 克隆original物体并返回这个克隆。
Destroy 移除一个游戏物体、组件或资源。
DestroyImmediate 立即销毁物体obj。强烈建议使用Destroy代理。
FindObjectsOfType 返回所有类型为type的激活物体。
FindObjectsOfType 返回第一个类型为type的激活物体。
operator== 比较两个物体是否相同。
operator!= 比较两个物体是否不同。
DontDestroyOnLoad 加载新场景时确保目标物体不被自动销毁。
AssetBundle

类,继承自Object。AssetBundles让你通过WWW类流式加载额外的资源并在运行时实例化它们。AssetBundles通过BuildPipeline.BuildAssetBundle创建。参见:WWW.assetBundle ,Loading Resources at Runtime ,BuildPipeline.BuildPlayer
void Start () {
var www = new WWW (“http://myserver/myBundle.unity3d”);
yield www;
//获取指定的主资源并实例化
Instantiate(www.assetBundle.mainAsset);
}
变量
◆ var mainAsset : Object
描述:竹资源在构建资源boundle时指定(只读)。该功能可以方便的找到bundle内的主资源。例如,你也许想将预设一个角色并包括所有纹理、材质、网格和动画文件。但是完全操纵角色的预设应该是你的mainAsset并且可以被容易的访问。
void Start () {
var www = new WWW (“http://myserver/myBundle.unity3d”);
yield www;
//获取指定的主资源并实例化
Instantiate(www.assetBundle.mainAsset);
}
函数
◆ void Contains (name : string) : bool
描述:如果AssetBundle的名称中包含特定的对象则进行检索。如果包含则返回真。
◆ void Load (name : string) : Object
描述:从bundle中加载名为name的物体。
◆ void Load (name : string, type : Type) : Object
描述:从bundle中加载名为name的type类物体。
◆ void LoadAll (type : Type) : Object[ ]
描述:加载所有包含在资源bundle中且继承自type的物体。
◆ void LoadAll () : Object[ ]
描述:加载包含在资源bundle中的所有物体。
◆ void Unload (unloadAllLoadedObjects : bool) : void
描述:写在bundle中的所有资源。Unload释放bundle中所有序列化数据。当unloadAllLoaderObjects为假,bundle内的序列化数据将被写在,但是任何从这个bundle中实例化的物体都将完好。当然,你不能从这个bundle中加载更多物体。当unloadAllLoaderObjects为真,所有从该bundle中加载的物体也将被销毁。如果
场景中有游戏物体引用该资源,那么引用也会丢失。
继承的成员
继承的变量
name 对象名称
hideFlags 该物体是否被隐藏,保存在场景中或被用户修改
继承的函数
GetInstanceID 返回该物体的实例id
继承的类函数
operator bool 这个物体存在吗?
Instantiate 克隆original物体并返回这个克隆。
Destroy 移除一个游戏物体、组件或资源。
DestroyImmediate 立即销毁物体obj。强烈建议使用Destroy代理。
FindObjectsOfType 返回所有类型为type的激活物体。
FindObjectsOfType 返回第一个类型为type的激活物体。
operator== 比较两个物体是否相同。
operator!= 比较两个物体是否不同。
DontDestroyOnLoad 加载新场景时确保目标物体不被自动销毁。
AudioClip
类,继承自Object。音频数据的容器。一个AudioClip以压缩或未压缩的格式存储音频文件。AudioClips被AudioSources参考或引用来播放声音。参见组件参考的AudioClip.component。
变量
◆ var isReadyToPlay : bool
描述:有没流式音频剪辑准备播放?(只读)如果AudioClip是从网站上下载的,此变量用来判断下载到的数据是否足够不间断的播放。对于不是来自web的流的AudioClips,该值总是真。
void Start (){
www=new WWW(url);
audio.clip=www.audioClip;
}
void Update (){
if(!audio.isPlaying && audio.clip.isReadyToPlay)
audio.Play();
}
◆ var length : float
描述:音频剪辑的长度,以秒计(只读)。
audio.Play();
//等待音频播放完成
yield.WaitForSeconds(audio.clip.length);
继承的成员
继承的变量
name 对象名称
hideFlags 该物体是否被隐藏,保存在场景中或被用户修改
继承的函数
GetInstanceID 返回该物体的实例id
继承的类函数
operator bool 这个物体存在吗?
Instantiate 克隆original物体并返回这个克隆。
Destroy 移除一个游戏物体、组件或资源。
DestroyImmediate 立即销毁物体obj。强烈建议使用Destroy代理。
FindObjectsOfType 返回所有类型为type的激活物体。
FindObjectsOfType 返回第一个类型为type的激活物体。
operator== 比较两个物体是否相同。
operator!= 比较两个物体是否不同。
DontDestroyOnLoad 加载新场景时确保目标物体不被自动销毁。
Component
类,继承自Object。音频数据的容器。所有附加到游戏物体上的对象的基类。
变量
◆ var animation : Animation
描述:附加到这个GameObject的Animation。(没有则为null)
◆ var audio : AudioSource
描述:附加到这个GameObject的AudioSource。(没有则为null)
audio.Play()
◆ var camera : Camera
描述:附加到这个GameObject的Camera。(没有则为null)
◆ var collider : Collider
描述:附加到这个GameObject的Collider。(没有则为null)
collider.material.dynamicFriction =1
◆ var constantForce : ConstantForce
描述:附加到这个GameObject上的ConstantForce(没有则为null)。
◆ var gameObject : GameObject
描述:这个组件所附加的游戏物体。组件总是附着在游戏物体上。
print(gameObject.name);
◆ var guiText : GUIText
描述:附加到这个GameObject上的GUIText(没有则为null)。
guiText.text = “Hello World”;
◆ var guiTexture : GUITexture
描述:附加到这个GameObject上的GUITexture(只读)(没有则为null)。
◆ var hingeJoint : HingeJoint
描述:附加到这个GameObject的HingeJoint(没有则为null)。
hingeJoint.motor.targetVelocity = 5;
◆ var hingeJoint : HingeJoint
描述:附加到这个GameObject的HingeJoint(没有则为null)。
◆ var light : Light
描述:附加到这个GameObject的Light(没有则为null)。
◆ var networkView : NetworkView
描述:附加到这个GameObject的NetworkView(只读)(没有则为null)。
networkView.RPC(“MyVoid”, RPCMode.All, “someValue”);
◆ var particleEmitter : ParticleEmitter
描述:附加到这个GameObject的ParticleEmitter(没有则为null)。
particleEmitter.emit = true;
◆ var renderer : Renderer
描述:附加到这个GameObject的Renderer。(没有则为null)
◆ var rigidbodyr : Rigidbody
描述:附加到这个GameObject的rigidbody。(没有则为null)
◆ var tag : string
描述:附加到这个GameObject的rigidbody。标签可以用来标识一个游戏物体。标签在使用前必须在标签管理器中定义。
◆ var transform : Transform
描述:附加到这个GameObject的Transform。(没有则为null)
transform.Translate(1, 1, 1);
函数
◆ void BroadcastMessage (methodName : string, parameter : object = null, options :
SendMessageOptions = SendMessageOptions.RequireReceiver) : void
描述:在这个游戏物体或其任何子物体上的每个MonoBehaviour上调用methodName方法。通过使用零参数,结婚搜方法可以选择忽略parameter。如果options被设置为SednMessageOptions.RequireReceiver,那么如果这个消息没有被任何组件接受时,将打印一个错误信息。
//使用值5调用ApplyDamage
BroadcastMessage (“ApplyDamage”, 5.0);
//每个附加到该游戏物体及其所有子物体上含有ApplyDamage函数的脚本都会被调用
void ApplyDamage (damage : float) {
print (damage);
}
◆ void CompareTag (tag : string) : bool
描述:这个游戏物体有被标签为tag吗?
//立即销毁触发器,销毁任何进入到触发器的碰撞器,这些碰撞器被标记为Player
void OnTriggerEnter (other : Collider) {
if (other.CompareTag (“Player”)) {
Destroy (other.gameObject);
}
}
◆ void GetComponent (type : Type) : Component
描述:如果游戏物体上附加了这个组件,则返回一个Type类,如果没有则返回null。
//等同于Transform curTransform = transform
var curTransform : Transform = GetComponent (Transform);
//你可以像访问其他组件一样的访问脚本组件
void Start () {
var someScript : ExampleScript = GetComponent (ExampleScript);
someScript.DoSomething ();
}
for c#
public class Something : MonoBehaviour{
void Start(){
ExampleScript someScript = GetComponent();
someScript.DoSomething ();
}
}
◆ void GetComponent (type : string) : Component
描述:如果游戏物体上附加了这个组件,则返回一个Type类,如果没有则返回null。处于性能原因,最好用Type调用GetComponent而不是字符串。不过有时你可能无法得到Type。例如当是同从Javascript中访问c#时。这时你可以简单的通过名称而不是类型访问该组件。
//为了访问附加在同一物体上的脚本中的公有变量与函数
script = GetComponent(ScriptName);
script.DoSomething ();
◆ void GetComponentInChildren (t : Type) : Component
描述:返回type类型组件,这个组件位于GameObject或任何它的子物体上,使用深度优先搜索。只有激活的最贱会被返回。
var script : ScriptName = GetComponentInChildren(ScriptName);
script.DoSomething ();
for c#
ScriptName script = GetComponentInChildren();
script.DoSomething ();
◆ void GetComponents (type : type) : Component[]
描述:返回GameObject上所有type类型组件。
//关闭该游戏物体铰链上的所有弹簧
var hingeJoints = GetComponents (HingeJoint);
for (var joint : HingeJoint in hingeJoints) {
joint.useSpring = false;
}
for c#
HingeJoint[] hingeJoints = GetComponents();
for (HingeJoint joint in hingeJoints) {
joint.useSpring = false;
}
◆ void GetComponentsInChildren (t:Type,includeInactive:bool=false) : Component[]
描述:返回GameObject上或其子物体上所有type类型组件。
//关闭该游戏物体极其子物体上的铰链上的所有弹簧
var hingeJoints = GetComponentsInChildren (HingeJoint);
for (var joint : HingeJoint in hingeJoints) {
joint.useSpring = false;
}
for c#
HingeJoint[] hingeJoints = GetComponentsInChildren();
for (HingeJoint joint in hingeJoints) {
joint.useSpring = false;
}
继承的成员
继承的变量
name 对象名称
hideFlags 该物体是否被隐藏,保存在场景中或被用户修改
继承的函数
GetInstanceID 返回该物体的实例id
继承的类函数
operator bool 这个物体存在吗?
Instantiate 克隆original物体并返回这个克隆。
Destroy 移除一个游戏物体、组件或资源。
DestroyImmediate 立即销毁物体obj。强烈建议使用Destroy代理。
FindObjectsOfType 返回所有类型为type的激活物体。
FindObjectsOfType 返回第一个类型为type的激活物体。
operator== 比较两个物体是否相同。
operator!= 比较两个物体是否不同。
DontDestroyOnLoad 加载新场景时确保目标物体不被自动销毁。
Behaviour
类,继承自Component。Behaviours是可以被启用或禁用的组件。参见MonoBehaviour和Component。
变量
◆ var enabled : bool
描述:启用Behaviours被更新,禁用Behaviours不被更新。这将在behaviour的坚实面板中显示为一个小的复选框GetComponent(PlayerScript)enabled = false;
继承的成员
继承的变量
transform 附加到该GameObject的Transform(没有返回null)
rigidbody 附加到该GameObject的Rigidbody(没有返回null)
camera 附加到该GameObject的Camera(没有返回null)
light 附加到该GameObject的Light(没有返回null)
animation 附加到该GameObject的Animation(没有返回null)
constantForce 附加到该GameObject的ConstantForce(没有返回null)
renderer 附加到该GameObject的Renderer(没有返回null)
audio 附加到该GameObject的Audio(没有返回null)
guiText 附加到该GameObject的GuiText(没有返回null)
networkView 附加到该GameObject的NetworkView(没有返回null)
guiTexture 附加到该GameObject的GuiTexture(没有返回null)
collider 附加到该GameObject的Collider(没有返回null)
hingeJoint 附加到该GameObject的HingeJoint(没有返回null)
particleEmitter 附加到该GameObject的ParticleEmitter(没有返回null)
gameObject 该组件所附加的游戏物体。组件总是会附加到游戏物体上
tag 该游戏物体的标签。
name 对象的名称
hideFlags 该物体是否被隐藏,保存在场景中或被用户修改
继承的函数
GetComponent 如果游戏附体上附加了一个,则返回type类组件,没有则返回null
GetComponentInChildren 如果该组件位于GameObject或任何其子物体上,返回type类组件,使用深度优先搜索
GetComponentsInChildren 如果这些组件位于GameObject或任何它的子物体上,返回type类组件。
GetComponents 返回GameObject上所有type类的组件
CompareTag 该游戏物体被是否被标签为tag?
SendMessageUpwards 在该游戏物体的每个MonoBehaviour和该行为的父对象上调用名为methodName的方法
SendMessage 在该游戏物体的每个MonoBehaviour上调用methodName方法
BroadcastMessage 在这个游戏物体或其任何子物体上的每个MonoBehaviour上调用methodName
GetInstanceID 返回该物体的实例id
继承的类函数
operator bool 这个物体存在吗?
Instantiate 克隆original物体并返回这个克隆。
Destroy 移除一个游戏物体、组件或资源。
DestroyImmediate 立即销毁物体obj。强烈建议使用Destroy代理。
FindObjectsOfType 返回所有类型为type的激活物体。
FindObjectOfType 返回第一个类型为type的激活物体。
operator== 比较两个物体是否相同。
operator!= 比较两个物体是否不同。
DontDestroyOnLoad 加载新场景时确保目标物体不被自动销毁。
Animation
类,继承自Behaviour,可枚举。动画组件用来播放动画。你可以给动画组件赋予一个动画剪辑,并从脚本中控制它的播放。Unity中的动画系统是基于权值的,并且支持动画混合、附加动画、动画合成、层和所有动画播放方面的完全控制。
为了播放动画可使用Animation.Play。
为了在动画间渐变可使用Animation.CrossFade。
为了改变动画的层可使用AnimationState.layer。
为了改变动画的包裹模式(循环、单次、往返)可使用Animation.wrapMode或
AnimationState.wrapMode。
AnimationState可以被用来调整播放速度和直接控制混合语合成。
Animation也支持枚举,因此你可以像这样循环所有的AnimationStates。
//使该角色上所有动画半速播放
for (var state : AnimationState in animation) {
state.speed = 0.5;
}
变量
◆ var animateOnlyIfVisible : bool
描述:启用后,Unity会在认为动画不可见的时候停止播放。该选项可以节省资源。
◆ var animatePhysics : bool
描述:启用后,动画奖在物理循环中执行。这只在与运动学刚体结合时有用。一个动画平台可以应用速度和摩擦到其顶部的刚体。为了利用这个,animatePhysics必须被启用,并且动画物体必须为一个运动学刚体。
◆ var clip : AnimationClip
描述:默认动画。
animation.Play(animation.clip);
//等待动画完成
yield WaitForSeconds (animation.clip.length);
◆ var isPlaying : bool
描述:是否正在播放动画?
//在动画没有播放时播放这个动画。
void OnMouseEnter() {
if (!animation.isPlaying)animation.Play();
}
◆ var playAutomatically : bool
描述:默认的动画剪辑(Animation.clip)是否在开始时自动播放?
animation.playAutomatically = true;
◆ var this[name : string] : AnimationState
描述:返回名为name的动画状态。
//获取walk动画状态并设置它的速度
animation[“walk”].speed = 2.0;
//获取run动画状态并设置它的速度
animation[“run”].weight = 0.5;
◆ var wrapMode : WrapMode
描述:超出剪辑播放时间之外时如何处理?
WrapMode.Default:从剪辑中获取回绕模式(默认为Once)。
WrapMode.Once:当时间到达末尾时停止动画。
WrapMode.Loop:当时间到达末尾时从头开始播放。
WrapMode.PingPong:在开始和结束之间来回播放。
WrapMode.ClampForever:播放动画。当它到达末端时,它将保持在最后一帧。
//让动画循环
animation.wrapMode = WrapMode.Loop;
函数
◆ void AddClip (clip : AnimationClip, newName : string) : void
描述:添加一个clip到Animation,它的名称为newName。
var walkClip : AnimationClip;
animation.AddClip(walkClip, “walk”);
◆ void AddClip (clip : AnimationClip, newName : string, firstFrame : int, lastFrame : int, addLoopFrame : bool = false) : void
描述:添加clip只在firstFrame和lastFrame之间播放。这个新的剪辑也将被使用名称newName并添加到Animation。addLoopFrame:是否要插入额外的帧一边匹配第一帧?如果制作循环动画就要打开这个。如果存在一个同名的剪辑,老的将被覆盖。
//分割默认的剪辑为shoot,walk和idle动画
animation.AddClip(animation.clip, “shoot”, 0, 10);
//walk和idle将在末尾添加额外的循环真
animation.AddClip(animation.clip, “walk”, 11, 20, true);
animation.AddClip(animation.clip, “idle”, 21, 30, true);
◆ void Blend (animation : string, targetWeight : float = 1.0F, fadeLength : float = 0.3F) : void
描述:在接下来的time内混合名为animation的动画得到targetWeight。其他动画播放不会受影响。
◆ void CrossFade (animation : string, fadeLength : float = 0.3F, mode : PlayMode = PlayMode.StopSameLayer) : void
描述:淡入名为animation的动画,并在time内淡出其他动画。如果模式是PlayMode.StopSameLayer,在同一层上淡入的动画将会被淡出。如果模式是PlayMode.StopAll,当动画被淡入后,所有动画都会被淡出。如果动画被设置为循环,在播放后将停止并回放。
//淡入walk循环并淡出同一层上所有其他动画。
//0.2秒内完成淡入
animation.CrossFade(“Walk”, 0.2);
//当玩家想要移动的时候,使角色动画在Run和Idle动画之间渐变。
void Update (){
if (Mathf.Abs(Input.GetAxis(“Vertical”)) > 0.1)animation.CrossFade(“Run”);
else
animation.CrossFade(“Idle”);
}
◆ void CrossFadeQueued (animation : string, fadeLength : float = 0.3F, queue : QueueMode = QueueMode.CompleteOthers, mode : PlayMode = PlayMode.StopSameLayer) : AnimationState
描述:在前一动画播放完后渐变到下一个动画。例如你可以播放一个特定的动画序列。动画在播放前复制自身,因此你可以再相同的动画间渐变,这可用来重叠两个相
同的动画。例如你可能有一个挥剑的动画,玩家快速挥动了2次,你可以回放这个动画并从开始播放它,但会跳帧。
下面是可用的queue modes:
下面是可用的queue modes:
如果queue为QueueMode.CompleteOthers这个动画纸在所有其他动画都停止播放时才开始。
如果queue为QueueMode.PlayNow这个动画将以一个复制的动画状态立即开始播放。
动画播放完成后它将自动清除它自己。在它播放完成后使用赋值的动画将导致一个异常。
void Update (){
if (Input.GetButtonDown(“Fire1”))
animation.CrossFadeQueued(“shoot”, 0.3, QueueMode.PlayNow);
}
◆ void GetClipCount () : int
描述:获取当前animation的剪辑数。
◆ void IsPlaying (name : string) : bool
描述:名为name的动画是否在播放?
void OnMouseEnter() {
if (!animation.IsPlaying(“mouseOverEffect”))
animation.Play(“mouseOverEffect”);
}
◆ void Play (mode : PlayMode = PlayMode.StopSameLayer) : bool
void Play (animation : string, mode : PlayMode = PlayMode.StopSameLayer) : bool
描述:立即播放该动画,没有任何混合。Play()将会开始播放名为animation的动画,或者播放默认动画,且会在没有混合的情况下突然播放。如果模式为PlayMode.StopSameLayer所有在同一层上的动画都将被停止。如果模式是PlayMode.StepAll所有当前播放的动画都将被停止。如果动画正在播放,其他动画将被停止,但该动画会回到开始位置。如果动画没有被设置为循环,播放完后将停止并回放。如果动画无法被播放(没有该剪辑或没有默认动画),Play()会返回假。
//播放默认动画
animation.Play ();
//播放walk动画,停止该层内所有其他动画
animation.Play (“walk”);
//播放walk动画,停止其他所有动画
animation.Play (“walk”, PlayMode.StopAll);
◆ void PlayQueued (animation : string, queue : QueueMode = QueueMode.CompleteOthers, mode : PlayMode = PlayMode.StopSameLayer) : AnimationState
描述:在前一动画播放完后渐变一个动画。例如你可以播放一个特定的动画序列。动画状态在播放前复制自身,因此你可以再相同的动画之间渐变。这可用来重叠两个相同的动画。例如你可能有一个挥剑的动画。玩家快速的砍了两次,你可以回放这个动画,并且从开始播放,只不过会跳帧。
下面是可用的queue modes:
如果queue为QueueMode.CompleteOthers这个动画纸在所有其他动画都停止播放时才开始。
如果queue为QueueMode.PlayNow这个动画将以一个复制的动画状态立即开始播放。
动画播放完成后它将自动清除它自己。在它播放完成后使用赋值的动画将导致一个异常。
void Update (){
if (Input.GetButtonDown(“Fire1”))
animation.PlayQueued(“shoot”, QueueMode.PlayNow);
}
◆ void RemoveClip (clip : AnimationClip) : void
描述:从动画列表中移除剪辑。这将移除该剪辑及所有棘突它的动画状态。
◆ void RemoveClip (clipName : string) : void
描述:从动画列表中移除剪辑。这将移除指定名称的动画状态。
◆ void Rewind (name : string) : void
描述:回退名为name的动画。
//回退walk动画到开始
animation.Rewind(“walk”);
◆ void Rewind () : void
描述:回退所有动画。
//回退所有动画到开始
animation.Rewind();
◆ void Sample () : void
描述:在当前状态采样动画。如果想要设置一些动画状态,并采样一次,可以用这个。
//设置一些状态
animation[“MyClip”].time = 2.0;
animation[“MyClip”].enabled = true;
//采样动画
animation.Sample();
animation[“MyClip”].enabled = false;
◆ void Stop () : void
描述:停止所有由这个Animation开始的动画。停止一个动画并回退到开始。
//终止所有动画
animation.Stop();
◆ void Stop (name : string) : void
描述:停止名为name的动画。停止一个动画并回退到开始。
//停止walk动画
animation.Stop (“walk”);
◆ void SyncLayer (layer : int) : void
描述:同步所有在该层的动画的播放速度。当混合两个循环动画时,它们通常有不同长度。例如一个walk循环要比run更长。当混合它们时,你需要确保行走于跑循环中脚的位置相同。也就是说,动画的播放速度必须被调整一边动画同步。SyncLayer将给予它们的混合权值计算在该层上所有动画播放的平均诡异化速度,然后对该层上的动画使用播放速度。
//放置walk和run动画在同一层,并同步它们的速度
animation[“walk”].layer = 1;
animation[“run”].layer = 1;
animation.SyncLayer(1);
继承的成员
继承的变量
enable 启用则Behaviour被更新,不启用则不更新
transform 附加到该GameObject的Transform(没有返回null)
rigidbody 附加到该GameObject的Rigidbody(没有返回null)
camera 附加到该GameObject的Camera(没有返回null)
light 附加到该GameObject的Light(没有返回null)
animation 附加到该GameObject的Animation(没有返回null)
constantForce 附加到该GameObject的ConstantForce(没有返回null)
renderer 附加到该GameObject的Renderer(没有返回null)
audio 附加到该GameObject的Audio(没有返回null)
guiText 附加到该GameObject的GuiText(没有返回null)
networkView 附加到该GameObject的NetworkView(没有返回null)
guiTexture 附加到该GameObject的GuiTexture(没有返回null)
collider 附加到该GameObject的Collider(没有返回null)
hingeJoint 附加到该GameObject的HingeJoint(没有返回null)
particleEmitter 附加到该GameObject的ParticleEmitter(没有返回null)
gameObject 该组件所附加的游戏物体。组件总是会附加到游戏物体上
tag 该游戏物体的标签。
name 对象的名称
hideFlags 该物体是否被隐藏,保存在场景中或被用户修改
继承的函数
GetComponent 如果游戏附体上附加了一个,则返回type类组件,没有则返回null
GetComponentInChildren 如果该组件位于GameObject或任何其子物体上,返回type类组件,使用深度优先搜索
GetComponentsInChildren 如果这些组件位于GameObject或任何它的子物体上,返回type类组件。
GetComponents 返回GameObject上所有type类的组件
CompareTag 该游戏物体被是否被标签为tag?
SendMessageUpwards 在该游戏物体的每个MonoBehaviour和该行为的父对象上调用名为methodName的方法
SendMessage 在该游戏物体的每个MonoBehaviour上调用methodName方法
BroadcastMessage 在这个游戏物体或其任何子物体上的每个MonoBehaviour上调用methodName
GetInstanceID 返回该物体的实例id
继承的类函数
operator bool 这个物体存在吗?
Instantiate 克隆original物体并返回这个克隆。
Destroy 移除一个游戏物体、组件或资源。
DestroyImmediate 立即销毁物体obj。强烈建议使用Destroy代理。
FindObjectsOfType 返回所有类型为type的激活物体。
FindObjectOfType 返回第一个类型为type的激活物体。
operator== 比较两个物体是否相同。
operator!= 比较两个物体是否不同。
DontDestroyOnLoad 加载新场景时确保目标物体不被自动销毁。
AudioListener
类,继承自Behaviour。标示在三维空间中的侦听器。这个类可实现麦克风一样的设备。它记录周围的声音,并通过玩家的扬声器播, 放。在场景中只能有一个侦听器。参见组件参考中AudioSource,AudioListener,component。
变量
◆ var velocityUpdateMode : AudioVelocityUpdateMode
描述:可让你设置Audio Listener是否应该用固定或动态方式更新。如果你遇到了多普勒效应问题,请确保设置这个更新于Audio Listener的移动在同一循环内。如果它被附加到一个刚体,默认设置将自动设置该侦听器在固定的更新周期内更新,动态的以其他方式。
listener.velocityUpdateMode = AudioVelocityUpdateMode.Fixed;
类变量
◆ static var pause : bool
描述:音频的暂停状态。如果设置为真,该侦听器将不会产生声音。类似于设置音量为0.0
AudioListener.pause = true;
◆ static var volume : float
描述:控制游戏的音量。
AudioListener.volume = 0.5;
继承的成员
继承的变量
enable 启用则Behaviour被更新,不启用则不更新
transform 附加到该GameObject的Transform(没有返回null)
rigidbody 附加到该GameObject的Rigidbody(没有返回null)
camera 附加到该GameObject的Camera(没有返回null)
light 附加到该GameObject的Light(没有返回null)
animation 附加到该GameObject的Animation(没有返回null)
constantForce 附加到该GameObject的ConstantForce(没有返回null)
renderer 附加到该GameObject的Renderer(没有返回null)
audio 附加到该GameObject的Audio(没有返回null)
guiText 附加到该GameObject的GuiText(没有返回null)
networkView 附加到该GameObject的NetworkView(没有返回null)
guiTexture 附加到该GameObject的GuiTexture(没有返回null)
collider 附加到该GameObject的Collider(没有返回null)
hingeJoint 附加到该GameObject的HingeJoint(没有返回null)
particleEmitter 附加到该GameObject的ParticleEmitter(没有返回null)
gameObject 该组件所附加的游戏物体。组件总是会附加到游戏物体上
tag 该游戏物体的标签。
name 对象的名称
hideFlags 该物体是否被隐藏,保存在场景中或被用户修改
继承的函数
GetComponent 如果游戏附体上附加了一个,则返回type类组件,没有则返回null
GetComponentInChildren 如果该组件位于GameObject或任何其子物体上,返回type类组件,使用深度优先搜索
GetComponentsInChildren 如果这些组件位于GameObject或任何它的子物体上,返回type类组件。
GetComponents 返回GameObject上所有type类的组件
CompareTag 该游戏物体被是否被标签为tag?
SendMessageUpwards 在该游戏物体的每个MonoBehaviour和该行为的父对象上调用名为methodName的方法
SendMessage 在该游戏物体的每个MonoBehaviour上调用methodName方法
BroadcastMessage 在这个游戏物体或其任何子物体上的每个MonoBehaviour上调用methodName
GetInstanceID 返回该物体的实例id
继承的类函数
operator bool 这个物体存在吗?
Instantiate 克隆original物体并返回这个克隆。
Destroy 移除一个游戏物体、组件或资源。
DestroyImmediate 立即销毁物体obj。强烈建议使用Destroy代理。
FindObjectsOfType 返回所有类型为type的激活物体。
FindObjectOfType 返回第一个类型为type的激活物体。
operator== 比较两个物体是否相同。
operator!= 比较两个物体是否不同。
DontDestroyOnLoad 加载新场景时确保目标物体不被自动销毁。
AudioSource
类,继承自Behaviour。标示三位空间中的音频源。AudioSource被附加到GameObject以便在三位环境中播放声音。单声道声音以3D播放。为了播放三位声音,也需要一个AudioListener。音频侦听器通常附加在使用的相机上。立体声总是不以距离为基础衰减。你可以使用Play,Pause,Stop来播放音频剪辑。也可以再播放时使用volume属性调整音量,或者使用time来定位。多个声音可以使用PlayOneShot在一个AudioSource上播放。可以使用PlayClipAtPoint在三位空间中的一个静态位置播放剪辑。参见AudioListener,AudioClip,AudioSource component。
变量
◆ var clip : AudioClip
描述:默认播放的AudioClip。
var otherClip: AudioClip;
// 播放默认声音
audio.Play();
// 等待音频结束
yield WaitForSeconds (audio.clip.length);
// 指定其他音频并播放
audio.clip = otherClip;
audio.Play();
◆ var ignoreListenerVolume : bool
描述:这使音频源不考虑音频侦听器的音量。播放背景音乐时可启用这个。当播放背景音乐时,你希望音乐不受普通音量设置的影响,可以使用该变量。
audio.ignoreListenerVolume = true;
◆ var isPlaying : bool
描述:clip现在生意否在播放?
//当音频组件停止播放时,播放otherClip
var otherClip : AudioClip;

void Update (){
if (!audio.isPlaying) {
audio.clip = otherClip;
audio.Play();
}
}
◆ var loop : bool
描述:音频剪辑是否循环?如果你在一个正在播放的AudioSource上禁用循环,声音将在当前循环结束后停止。
// 停止声音循环
audio.loop = false;
◆ var maxVolume : float
描述:音频剪辑播放时的最大音量。不论你距离多近,声音不会比这个值更大。
audio.maxVolume = 0.5;
参见:minVolume, rolloffFactor.
◆ var minVolume : float
描述:音频剪辑播放时的最小音量。不论你距离多远,声音不会比这个还小。
audio.minVolume = 0.5;
参见:maxVolume, rolloffFactor.
◆ var pitch : float
描述:音频源的音调。
audio.pitch = 1.0;
◆ var playOnAwake : bool
描述:如果设置为真,音频源江在awake时自动播放。
if(! audio.playOnAwake) {
audio.Play();// 如果没有设置为Awake时播放,那么播放该剪辑
}
◆ var rolloffFactor : float
描述:设置声音衰减的速度。该值越大,侦听器必须更接近才能听到声音。
audio.rolloffFactor = 0.1;
参见:minVolume, maxVolume.
◆ var time : float
描述:以秒计算的播放位置。使用这个来读当前播放时间或寻找新的播放时间。
◆ var velocityUpdateMode : AudioVelocityUpdateMode
描述:Audio Source是否应该以固定或动态的方式更新?如果你遇到了这个源的多普勒效应问题,请确保设置这个更新与Audio Source的移动
在同一循环内。如果它被附加到一个刚体,默认设置将自动设置该源在固定的更新周期内更新,以动态的以及其他方式。
◆ var volume : float
描述:音频源的音量。
audio.volume = 0.2;
函数
◆ void Pause () : void
描述:暂停播放clip。
audio.Pause();
参见:Play,Stop函数
◆ void Play () : void
描述:播放clip。
audio.Play();
参见:Pause,Stop函数
◆ void PlayOneShot (clip : AudioClip, volumeScale : float = 1.0F) : void
描述:播放一个AudioClip。
//与其他物体碰撞时播放impact音频剪辑
var impact : AudioClip;
void OnCollisionEnter () {
audio.PlayOneShot(impact);
}
◆ void Stop () : void
描述:停止播放clip。
audio.Stop();
参见:Play,Pause函数
类方法
◆ static void PlayClipAtPoint (clip : AudioClip, position : Vector3, volume : float = 1.0F) : void
描述:在制定位置上播放剪辑。播放完成后自动消除音频源。正在播放的声音的音频源被返回。
//在制定位置播放clip
var clip : AudioClip;
AudioSource.PlayClipAtPoint(clip, Vector3 (5, 1, 2));
如果想进一步控制播放,可以使用下面代码。
var theClip : AudioClip;
PlayAudioClip(theClip, transform.position, 1);
void PlayAudioClip (clip : AudioClip, position : Vector3, volume : float)
{
var go = new GameObject (“One shot audio”);
go.transform.position = position;
var source : AudioSource = go.AddComponent (AudioSource);
source.clip = clip;
source.volume = volume;
source.Play ();
Destroy (go, clip.length);
return source;
}
Destroy (go, clip.length);
return source;
}
继承的成员
继承的变量
enable 启用则Behaviour被更新,不启用则不更新
transform 附加到该GameObject的Transform(没有返回null)
rigidbody 附加到该GameObject的Rigidbody(没有返回null)
camera 附加到该GameObject的Camera(没有返回null)
light 附加到该GameObject的Light(没有返回null)
animation 附加到该GameObject的Animation(没有返回null)
constantForce 附加到该GameObject的ConstantForce(没有返回null)
renderer 附加到该GameObject的Renderer(没有返回null)
audio 附加到该GameObject的Audio(没有返回null)
guiText 附加到该GameObject的GuiText(没有返回null)
networkView 附加到该GameObject的NetworkView(没有返回null)
guiTexture 附加到该GameObject的GuiTexture(没有返回null)
collider 附加到该GameObject的Collider(没有返回null)
hingeJoint 附加到该GameObject的HingeJoint(没有返回null)
particleEmitter 附加到该GameObject的ParticleEmitter(没有返回null)
gameObject 该组件所附加的游戏物体。组件总是会附加到游戏物体上
tag 该游戏物体的标签。
name 对象的名称
hideFlags 该物体是否被隐藏,保存在场景中或被用户修改
继承的函数
GetComponent 如果游戏附体上附加了一个,则返回type类组件,没有则返回null
GetComponentInChildren 如果该组件位于GameObject或任何其子物体上,返回type类组件,使用深度优先搜索
GetComponentsInChildren 如果这些组件位于GameObject或任何它的子物体上,返回type类组件。
GetComponents 返回GameObject上所有type类的组件
CompareTag 该游戏物体被是否被标签为tag?
SendMessageUpwards 在该游戏物体的每个MonoBehaviour和该行为的父对象上调用名为methodName的方法
SendMessage 在该游戏物体的每个MonoBehaviour上调用methodName方法
BroadcastMessage 在这个游戏物体或其任何子物体上的每个MonoBehaviour上调用methodName
GetInstanceID 返回该物体的实例id
继承的类函数
operator bool 这个物体存在吗?
Instantiate 克隆original物体并返回这个克隆。
Destroy 移除一个游戏物体、组件或资源。
DestroyImmediate 立即销毁物体obj。强烈建议使用Destroy代理。
FindObjectsOfType 返回所有类型为type的激活物体。
FindObjectOfType 返回第一个类型为type的激活物体。
operator== 比较两个物体是否相同。
operator!= 比较两个物体是否不同。
DontDestroyOnLoad 加载新场景时确保目标物体不被自动销毁。
Camera
类,继承自Behaviour。Camera是一个设备,玩家通过它来看世界。屏幕空间点用像素定义。屏幕左下为(0,0);右上是(pixelWidth.pixelHeight)。z的位置是以世界单位衡量到相机的距离。视口空间点是归一化的并且是相对于相机的。相机左下为(0,0);右上是(1,1)。z的位置是以世界单位衡量到相机的距离。世界空间点是以全局坐标定义的(例如Transform.position)。
参见:camera component
变量
◆ var aspect : float
描述:长宽比(宽度除以高度)。默认的长宽比是从屏幕的长宽比计算得到的,即使相机没有被渲染到全屏。如果修改了相机的aspect比,这个值将保持到你调用camera.ResetAspect();这将充值猖狂比为屏幕的长宽比。
if(camera.aspect > 1.0)
print (“Screen is more wide than tall!”);
else
print (“Screen is more tall than wide!”);
参见:camera component,Screen类。
◆ var backgroundColor : Color
描述:屏幕将被清理未这个颜色。只能在clearFlags被设置为CameraClearFlags.SolidColor(或设置为CameraClearFlags.Skybox但没有设置天空盒)时使用。
//来回变化背景色
var color1 = Color.red;
var color2 = Color.blue;
var duration = 3.0;
//设置清楚标记为该颜色
camera.clearFlags = CameraClearFlags.SolidColor;
void Update () {
var t = Mathf.PingPong (Time.time, duration) / duration;
camera.backgroundColor = Color.Lerp (color1, color2, t);
}
参见:camera component,Camera.clearFlags属性。
◆ var cameraToWorldMatrix : Matrix4x4
描述:从相机空间到世界空间的变换矩阵(只读)。使用次变量计算相机空间中的一个点在世界坐标中的什么位置。注意相机空间与openGL的约定相同。相机前味z轴负方向。这不同于Unity的约定,向前微z轴争相。
//以distance单位,沿着相机所看到的方向,在屏幕中绘制一个黄色的球,
var distance = -1.0;
void OnDrawGizmosSelected () {
var m = camera.cameraToWorldMatrix;
var p = m.MultiplyPoint (Vector3(0,0,distance));
Gizmos.color = Color.yellow;
Gizmos.DrawSphere (p, 0.2);
}
◆ var clearFlags : CameraClearFlags
描述:相机如何清楚背景。可以是CameraClearFlags.Skybox,CameraClearFlags.SolidColor,CameraClearFlags.Depth,CameraClearFlags.Nothing。
//用背景色清除(忽略天空盒)
camera.clearFlags = CameraClearFlags.SolidColor;
◆ var cullingMask : int
描述:这个用来选择性的渲染部分场景。如果GameObject的layerMask与相机的cullingMask进行AND操作后为0,则这个游戏物体对于该相机是不可见的。参考Layers获取更多信息。
//只渲染在第一层中的物体(默认层)
camera.cullingMask = 1 << 0;
参见:camera component
◆ var depth : float
描述:相机在渲染顺序上的深度。具有较低深度的相机将在较高深度的相机之前渲染。如果有多个相机并其中一些不需要覆盖整个屏幕,可以使用这个来控制相机的绘制次序。
//设置该相机在主相机之后渲染
camera.depth = Camera.main.depth + 1;
参见:camera component,Camera.rect属性
◆ var farClipPlane : float
描述:远裁剪面的距离。
camera.farClipPlane = 100.0;
参见:camera component
◆ var fieldOfView : float
描述:相机的视野,以度为党委。这是垂直视野。水平FOV取决于视口的宽高比。当相机是正交时,fieldOfView被忽略。(参考orthographic)。
//设置附加到同一个游戏物体上的相机的FOV位60
camera.fieldOfView = 60;
//设置主相机的视野为80
Camera.main.fieldOfView = 80;
参见:camera component
◆ var nearClipPlane : float
描述:近才见面的距离。
camera.nearClipPlane = 0.1;
参见:camera component
◆ var orthographic : bool
描述:相机是正交的(true)还是透视的(false)?如果orthographic为true,相机的视野由orthographicSize定义。如果orthographic为false,相机的视野由fieldOfView定义。
//设置相机为正交
camera.orthographic = true;
//设置主相机为正交
Camera.main.orthographic = true;
参见:camera component
◆ var orthographicSize : float
描述:在正交模式下相机的一半尺寸。这个为视体垂直大小的一半。相机不是正交时,水平视大小拒绝于视口的长宽比。
//设置相机的正交尺寸为5
camera.orthographic = true;
camera.orthographicSize = 5;
//设置主相机的正交尺寸为5
Camera.main.orthographic = true;
Camera.main.orthographicSize = 5;
参见:camera component
◆ var pixelHeight : float
描述:相机的像素高度(只读)。
print (“Camera is " + camera.pixelHeight + " pixels high”);
◆ var pixelRect : Rect
描述:相机被渲染到屏幕像素坐标中的位置。
void Update () {
var r = camera.pixelRect;
print (“Camera displays from " + r.xMin + " to " + r.xMax + " pixel”);
}
◆ var pixelWidth : float
描述。相机的像素宽度(只读)。
print (“Camera is " + camera.pixelWidth + " pixels wide”);
◆ var projectionMatrix : Matrix4x4
描述:设置自动以的投影矩阵。如果你改变该矩阵,相机的渲染将不再给予它的fieldOfView更新,直到调用到ResetProjectionMatrix。只有当真正需要一个非标准的投影时,才使用自定义投影。该属性被Unity的水渲染使用来设置一个oblique.projection矩阵。使用自定义投影需要了解变换和投影矩阵。
//让相机以有节奏的方式晃动
var originalProjection : Matrix4x4;
originalProjection = camera.projectionMatrix;
void Update () {
var p = originalProjection;
//改变原始矩阵的某些值
p.m01 += Mathf.Sin (Time.time * 1.2) * 0.1;
p.m10 += Mathf.Sin (Time.time * 1.5) * 0.1;
camera.projectionMatrix = p;
}
//设置一个变异中心的投影,这里透视的消失点没有必要在屏幕的中心。left/right/top/bottom定义近裁剪面大小。例如相机的近裁剪面偏移中心的距离,改变该值就可以看到相机视图的变化。
@script ExecuteInEditMode
var left = -0.2;
var right = 0.2;
var top = 0.2;
var bottom = -0.2;
void LateUpdate () {
var cam = camera;
var m = PerspectiveOffCenter(left, right, bottom, top,cam.nearClipPlane, cam.farClipPlane );
cam.projectionMatrix = m;
}
static void PerspectiveOffCenter(left : float, right : float,bottom : float, top : float,near : float, far : float ) : Matrix4x4{
var x = (2.0 * near) / (right - left);
var y = (2.0 * near) / (top - bottom);
var a = (right + left) / (right - left);
var b = (top + bottom) / (top - bottom);
var c = -(far + near) / (far - near);
var d = -(2.0 * far * near) / (far - near);
var e = -1.0;
var m : Matrix4x4;
m[0,0] = x; m[0,1] = 0; m[0,2] = a;
m[0,3] = 0;
m[1,0] = 0; m[1,1] = y; m[1,2] = b; m[1,3] = 0;
m[2,0] = 0;
m[2,1] = 0; m[2,2] = c; m[2,3] = d;
m[3,0] = 0; m[3,1] = 0; m[3,2] = e;
m[3,3] = 0;
return m;
}
◆ var rect : Rect
描述:相机被渲染到屏幕归一化坐标中的位置。rect的范围从0(左/下)到1(右/上)。
//每次按下空格键时改变视口宽度
void Update () {
if (Input.GetButtonDown (“Jump”)) {
//随机选择边缘
var margin = Random.Range (0.0, 0.3);
//设置矩形
camera.rect = Rect (margin, 0, 1 - margin * 2, 1);
}
}
◆ var targetTexture : RenderTexture
描述:目标渲染纹理(只限UnityPro)。
◆ var velocity : Vector3
描述:获取世界空间中相机的速度(只读)这是相机在上一帧以秒为单位的运动。
void Update () {
print (“Camera moving at " + camera.velocity.magnitude + " m/s”);
}
◆ var worldToCameraMatrix : Matrix4x4
描述:从世界到相机空间的变换矩阵。用这个计算物体的相机空间位置或提供自定义相机的位置。这个位置不是基于变化的。注意相机空间与openGL的约定相同:相机的前面为Z轴负方向。这不同于Unity的约定,向前微Z轴争相。如果你改变该矩阵,相机的渲染将不再基于它的Transform更新。知道调用ResetWorldToCameraMatrix。
//从offset位置偏移相机的渲染
var offset = Vector3 (0,1,0);
void LateUpdate () {
//构建一个沿着Z轴偏移与镜像的矩阵。因为相机已经为Z轴镜像,并用于其余部分
var camoffset = Vector3 (-offset.x, -offset.y, offset.z);
var m = Matrix4x4.TRS (camoffset, Quaternion.identity, Vector3 (1,1,-1));
//重载worldToCameraMatrix为偏移镜像变换矩阵
camera.worldToCameraMatrix = m * transform.worldToLocalMatrix;
}
函数
◆ void CopyFrom (other : Camera) : void
描述:使该相机的设置于其他相机相同。这将从er相机拷贝到所有相机变量(视野,清楚标记,裁剪蒙版)。这也将使相机的变换与other相机相同,相机的层也与other相机相同。在做自定义渲染效果的时候,这可以用来设置一台具有与其他相机设置完全相同的相机。例如在使用RenderWithShader时。
◆ void Render : void
描述:手动渲染相机。这个将使用相机的清除标记,目标纹理和所有其他设置。相机将发送OnPreCull,OnPreRender和OnPostRender到任何附加的脚本上,并渲染任何最后的图像滤镜。这个用来精确的控制渲染次序,为了使用这个特性,创建一个相机并禁用它。然后在它上面调用Render。参见:RenderWithShader。
◆ void RenderToCubemap (cubemap : Cubemap, faceMask : int = 63) : bool
描述:从这个相机渲染到一个立方贴图。这个是非常有用的。可以再编辑器中烘焙场景的静态立方贴图。参考下面的想到实例。相机的位置,清除标志和裁剪面距离将被使用来渲染到立方贴图表面。faceMask是一个比特域,标示哪个立方贴图面应该被渲染。每个位对应于一个面。比特数是CubemapFace枚举的整型值。默认的所有六个立方贴图面都将被渲染(默认值63最低的6位是打开的)。如果渲染失败,这个函数将返回false。某些显卡不支持这个函数。参见:Cubemap assets,Reflective shaders。
//从给定的点渲染场景到以静态立方贴图放置这个脚本到工程的Editor文件夹中,然后用一个Reflective shader来使用立方贴图
class RenderCubemapWizard extends ScriptableWizard{
var renderFromPosition : Transform;
var cubemap : Cubemap;
void OnWizardUpdate () {
helpString = “Select transform to render from and cubemap to render into”;
isValid = (renderFromPosition != null) && (cubemap != null);
}
void OnWizardCreate () {
//为渲染创建临时相机
var go = new GameObject( “CubemapCamera”, Camera );//放置到物体上
go.transform.position = renderFromPosition.position;
go.transform.rotation = Quaternion.identity;
//渲染到立方贴图
go.camera.RenderToCubemap( cubemap );
//销毁临时相机
DestroyImmediate( go );
}
@MenuItem(“GameObject/Render into Cubemap”)
static void RenderCubemap () {
ScriptableWizard.DisplayWizard(
“Render cubemap”, RenderCubemapWizard, “Render!”);
}
}
◆ void RenderToCubemap (cubemap : RenderTexture, faceMask : int = 63) : bool
描述:从这个相机渲染到一个立方贴图。用于实时反射到立方贴图渲染纹理,也是非常耗时的,尤其是所有六个立方贴图面在每一帧中都被渲染。相机的位置,清楚标志和裁剪面距离将被使用来渲染到立方贴图表面。faceMask是一
个比特域,标示哪个立方贴图面应该被渲染。每个位对应于一个面。比特数是CubemapFace枚举的整型值。默认的所有六个正方贴图面都将被渲染(默认值63的最低6位是打开的)。如果渲染失败该函数会返回false。某些显卡不支持该函数。参加:RenderTexture.isCubemap, Reflective shaders。
//将该脚本附加到使用了Reflective shader的物体上实时反射立方贴图
script ExecuteInEditMode
var cubemapSize = 128;
var oneFacePerFrame = false;
private var cam : Camera;
private var rtex : RenderTexture;
void Start () {
//启动时渲染所有6个面
UpdateCubemap( 63 );
}
void LateUpdate () {
if (oneFacePerFrame) {
var faceToRender = Time.frameCount % 6;
var faceMask = 1 << faceToRender;
UpdateCubemap (faceMask);
}
else {
UpdateCubemap (63); //所有6个面
}
}
void UpdateCubemap (faceMask : int) {
if (!cam) {
var go = new GameObject (“CubemapCamera”, Camera);
go.hideFlags = HideFlags.HideAndDontSave;
go.transform.position = transform.position;
go.transform.rotation = Quaternion.identity;
cam = go.camera;
cam.farClipPlane = 100; //不渲染较远的部分
cam.enabled = false;
}
if (!rtex) {
rtex = new RenderTexture (cubemapSize, cubemapSize, 16);
rtex.isPowerOfTwo = true;
rtex.isCubemap = true;
rtex.hideFlags = HideFlags.HideAndDontSave;
renderer.sharedMaterial.SetTexture ("_Cube", rtex);
}
cam.transform.position = transform.position;
cam.RenderToCubemap (rtex, faceMask);
}
void OnDisable () {
DestroyImmediate (cam);
DestroyImmediate (rtex);
}
◆ void RenderWithShader (shader : Shader, replacementTag : string) : void
描述:用shader替换渲染相机。参考Rendering with Replaced Shaders获取细节。此函数将渲染相机。这将使相机的的清除标记、目标纹理和所有其他设置。这个相机不会发送OnPreCull, OnPreRender 或者 OnPostRender到已附加的脚本上。
图像滤镜
也不会被渲染。该函数可以用于特效,例如渲染整个场景屏幕空间缓冲,热效果等。为了使用该特性,创建一个相机并禁用它。然后在它上面调用RenderWithShader。参见:Rendering with Replaced Shaders, SetReplacementShader, Render。
◆ void ResetAspect () : void
描述:返回猖狂比为屏幕的长宽比。调用这个结束aspect的效果。
camera.ResetAspect();
◆ void ResetProjectionMatrix () : void
描述:让投影反映正常的相机参数。调用这个结束projectionMatrix的效果。
camera.ResetProjectionMatrix();
◆ void ResetReplacementShader () : void
描述:从相机上移除shader替换。调用这个结束SetReplacementShader效果。
◆ void ResetWorldToCameraMatrix () : void
描述:在场景中让渲染位置反映相机位置。调用这个结束worldToCameraMatrix的效果。
camera.ResetWorldToCameraMatrix();
◆ void ScreenPointToRay (position : Vector3) : Ray
描述:返回从相机出发,穿过屏幕点的一个射线。产生的射线是在世界空间中,从相机的近裁剪面开始并穿过屏幕position(x,y)像素坐标(position.z被忽略)。屏幕空间以像素定义。屏幕的左下为(0,0);右上是(pixelWidth,pixelHeight)。
//在屏幕视图中绘制一条线,穿过一个到屏幕左下角200像素的点
void Update () {
var ray = camera.ScreenPointToRay (Vector3(200,200,0));
Debug.DrawRay (ray.origin, ray.direction * 10, Color.yellow);
}
◆ void ScreenToViewportPoint (position : Vector3) : Vector3
描述:从屏幕空间到视口空间变换position。屏幕空间以像素定义。屏幕的左下为(0,0);右上是(pixelWidth,pixelHeight)。z的位置是以世界单位衡量的刀相机的距离。视口空间是归一化的并相对于相机的。相机的左下为(0,0);右上是(1,1)。z的位置是以世界单位衡量的刀相机的距离。
◆ void ScreenToWorldPoint (position : Vector3) : Vector3
描述:从屏幕空间到世界空间变换position。屏幕空间以像素定义。屏幕的左下为(0,0);右上是(pixelWidth,pixelHeight)。z的位置是以世界单位衡量的到相机的距离。
//在所选相机的近裁剪面上绘制一个黄色的球,在离左下100像素的位置
void OnDrawGizmosSelected () {
var p = camera.ScreenToWorldPoint (Vector3 (100,100,camera.nearClipPlane));
Gizmos.color = Color.yellow;
Gizmos.DrawSphere (p, 0.1);
}
◆ void SetReplacementShader (shader : Shader, replacementTag : string) : void
描述:使相机用shader替换来渲染。参考Rendering with Replaced Shaders。调用该函数后,相机将使用替换的shader来渲染它的视图。调用ResetReplacementShader来重置为普通渲染。参见:Rendering with Replaced Shaders, ResetReplacementShader, RenderWithShader。
◆ void ViewportPointToRay (position : Vector3) : Ray
描述:返回从相机出发穿过视点的一个射线。产生的射线是在世界空间中,从相机的近裁剪面开始并穿过视口position(x,y)坐标(position.z被忽略)。视口坐标是归一化的并相对于相机的。相机的左下为(0,0);右上为(1,1)。
//打印相机直接看到的物体名称
void Update () {
//获取穿过屏幕中心的射线
var ray = camera.ViewportPointToRay (Vector3(0.5,0.5,0));
//投射
var hit : RaycastHit;
if (Physics.Raycast (ray, hit)) {
print ("I’m looking at " + hit.transform.name);
}
else {
print (“I’m looking at nothing!”);
}
}
◆ void ViewportToScreenPoint (position : Vector3) : Vector3
描述:从视口空间到屏幕空间变换position。视口空间是归一化的并相对于相机的。相机的左下为(0,0);右上为(1,1)。z的位置是以世界单位衡量的刀相机的距离。屏幕空间以像素定义。屏幕左下为(0,0;右上为(pixelWidth,pixelHeight)。z的位置是以世界单位衡量的到相机的距离。
◆ void ViewportToWorldPoint (position : Vector3) : Vector3
描述:从视口空间到屏幕空间变换position。视口空间是归一化的并相对于相机的。相机的左下为(0,0);右上为(1,1)。z的位置是以世界单位衡量的刀相机的距离。屏幕空间以像素定义。屏幕左下为(0,0;右上为(pixelWidth,pixelHeight)。z的位置是以世界单位衡量的到相机的距离。
//在进裁剪面的右上角,针对在场景视图中选中的相机绘制一个黄色的球
void OnDrawGizmosSelected () {
var p = camera.ViewportToWorldPoint (Vector3 (1,1, camera.nearClipPlane));
Gizmos.color = Color.yellow;
Gizmos.DrawSphere (p, 0.1);
}
◆ void WorldToScreenPoint (position : Vector3) : Vector3
描述:从世界空间到屏幕空间变换position。屏幕空间以像素定义。屏幕的左下为(0,0;右上为(pixelWidth,pixelHeight)。z的位置是
以世界单位衡量的刀相机的距离。
var target : Transform;
void Update () {
var screenPos = camera.WorldToScreenPoint (target.position);
print (“target is " + screenPos.x + " pixels from the left”);
}
◆ void WorldToViewportPoint (position : Vector3) : Vector3
描述:从世界空间到视口空间变换position。视口空间是归一化的并相对于相机的。相机的左下为(0,0);右上为(1,1)。z的位置是以世界单位衡量的到相机的距离。
//找出target在屏幕的左边还是右边
var target : Transform;
void Update () {
var viewPos = camera.WorldToViewportPoint (target.position);
//视口坐标范围从0到1
if( viewPos.x > 0.5 )
print (“target is on the right side!”);
else
print (“target is on the left side!”);
}
消息传递
◆ void OnPostRender () : void
描述:OnPostRender在相机渲染场景之后调用。这个消息被发送到所有附加在相机上的脚本。
◆ void OnPreCull () : void
描述:OnPreCull在相机开始裁剪场景之前调用。OnPreCull仅仅在这个过程之间被调用。这个消息被发送到所有附加在相机上的脚本。如果你想改变相机的视觉参数(例如,fieldOfView或者仅仅是变换),就在这里做这个。场景物体的可见性将给予相机的参数在OnPreCull之后确定。
◆ void OnPreRender () : void
描述:OnPreCull在相机开始渲染场景之前调用。这个消息被发送到所有附加在相机上的脚本。注意如果你在这里改变了相机的视野参数(例如fieldOfView),它们将只影响下一帧。用OnPreCull代替。
◆ void OnRenderImage (source : RenderTexture, destination : RenderTexture) : void
描述:OnRenderImage在所有渲染完成后被调用,来渲染图片的后记处理效果(仅限UnityPro)。该函数允许使用给予shader的过滤器来处理最后的图片。进入的图片是source渲染纹理。结果是destination渲染纹理。当多个图片过滤器附加在相机上时,它们序列化的处理图片,将第一个过滤器的目标作为下一个过滤器的源。
该消息被发送到所有附加在相机上的脚本。参见:UnityPro中的image effects。
◆ void OnRenderObject (queueIndex : int) : void
描述:该函数被用来渲染你自己的物体,使用Graphics.DrawMeshNow或者其他函数。queueIndex指定用来渲染物体的render queue。可以使用RenderBeforeQueues属性来指定你想绘制这个物体到哪个渲染队列。
◆ void OnWillRenderObject () : void
描述:如果物体可见,每个相机都会调用OnWillRenderObject。该函数在裁剪过程中被调用。可用该函数创建具有依赖性的渲染纹理。只有在被渲染的物体可见时,才更新该渲染纹理。例如,水组件就使用了这个。Camera.current将被设置为要渲染这个物体的相机。
类变量
◆ static var allCameras : Camera[]
描述:返回场景中所有启用的相机。
var count = Camera.allCameras.length;
print (“We’ve got " + count + " cameras”);
◆ static var current : Camera
描述:当前用于渲染的相机,只用于低级的渲染控制(只读)。多数时候你会使用Camera.main。只有在执行下面时间的时候使用该函数:MonoBehaviour.OnRenderImage, MonoBehaviour.OnPreRender, MonoBehaviour.OnPostRender。
◆ static var main : Camera
描述:第一个启用的被标记为“MainCamera”的相机(只读)。如果场景中没有这个相机返回null。
继承的成员
继承的变量
enable 启用则Behaviour被更新,不启用则不更新
transform 附加到该GameObject的Transform(没有返回null)
rigidbody 附加到该GameObject的Rigidbody(没有返回null)
camera 附加到该GameObject的Camera(没有返回null)
light 附加到该GameObject的Light(没有返回null)
animation 附加到该GameObject的Animation(没有返回null)
constantForce 附加到该GameObject的ConstantForce(没有返回null)
renderer 附加到该GameObject的Renderer(没有返回null)
audio 附加到该GameObject的Audio(没有返回null)
guiText 附加到该GameObject的GuiText(没有返回null)
networkView 附加到该GameObject的NetworkView(没有返回null)
guiTexture 附加到该GameObject的GuiTexture(没有返回null)
collider 附加到该GameObject的Collider(没有返回null)
hingeJoint 附加到该GameObject的HingeJoint(没有返回null)
particleEmitter 附加到该GameObject的ParticleEmitter(没有返回null)
gameObject 该组件所附加的游戏物体。组件总是会附加到游戏物体上
tag 该游戏物体的标签。
name 对象的名称
hideFlags 该物体是否被隐藏,保存在场景中或被用户修改
继承的函数
GetComponent 如果游戏附体上附加了一个,则返回type类组件,没有则返回null
GetComponentInChildren 如果该组件位于GameObject或任何其子物体上,返回type类组件,使用深度优先搜索
GetComponentsInChildren 如果这些组件位于GameObject或任何它的子物体上,返回type类组件。
GetComponents 返回GameObject上所有type类的组件
CompareTag 该游戏物体被是否被标签为tag?
SendMessageUpwards 在该游戏物体的每个MonoBehaviour和该行为的父对象上调用名为methodName的方法
SendMessage 在该游戏物体的每个MonoBehaviour上调用methodName方法
BroadcastMessage 在这个游戏物体或其任何子物体上的每个MonoBehaviour上调用methodName
GetInstanceID 返回该物体的实例id
继承的类函数
operator bool 这个物体存在吗?
Instantiate 克隆original物体并返回这个克隆。
Destroy 移除一个游戏物体、组件或资源。
DestroyImmediate 立即销毁物体obj。强烈建议使用Destroy代理。
FindObjectsOfType 返回所有类型为type的激活物体。
FindObjectOfType 返回第一个类型为type的激活物体。
operator== 比较两个物体是否相同。
operator!= 比较两个物体是否不同。
DontDestroyOnLoad 加载新场景时确保目标物体不被自动销毁。
ConstantForce
类,继承自Behaviour。一个不间断的力。这是一个小的物理工具类,用来将一个连续的力应用到一个物体上。Rigidbody.AddForce只在一帧中应用力道Rigidbody,因此你不得不持续调用这个函数。
领以方面ConstantForce将在每一帧中应用这个力,知道改变这个力或例举为一个新的值。参见Rigidbody。
变量
◆ var force : Vector3
描述:这个力在每帧中应用到刚体。
//在世界坐标系中向上移动刚体。
constantForce.force = Vector3.up * 10;
◆ var relativeForce : Vector3
描述:力-相对于刚体坐标系统-在每帧中应用。
//向前移动刚体。
constantForce.relativeForce = Vector3.forward * 10;
◆ var relativeTorque : Vector3
描述:力矩-相对于刚体坐标系统-在每帧中应用。
//绕着其X轴旋转该物体。
constantForce.relativeTorque = Vector3.right * 2;
◆ var torque : Vector3
描述:这个力矩在每帧中应用到刚体。
//绕着世界的Y轴旋转该物体。
constantForce.torque = Vector3.up * 2;
继承的成员
继承的变量
enable 启用则Behaviour被更新,不启用则不更新
transform 附加到该GameObject的Transform(没有返回null)
rigidbody 附加到该GameObject的Rigidbody(没有返回null)
camera 附加到该GameObject的Camera(没有返回null)
light 附加到该GameObject的Light(没有返回null)
animation 附加到该GameObject的Animation(没有返回null)
constantForce 附加到该GameObject的ConstantForce(没有返回null)
renderer 附加到该GameObject的Renderer(没有返回null)
audio 附加到该GameObject的Audio(没有返回null)
guiText 附加到该GameObject的GuiText(没有返回null)
networkView 附加到该GameObject的NetworkView(没有返回null)
guiTexture 附加到该GameObject的GuiTexture(没有返回null)
collider 附加到该GameObject的Collider(没有返回null)
hingeJoint 附加到该GameObject的HingeJoint(没有返回null)
particleEmitter 附加到该GameObject的ParticleEmitter(没有返回null)
gameObject 该组件所附加的游戏物体。组件总是会附加到游戏物体上
tag 该游戏物体的标签。
name 对象的名称
hideFlags 该物体是否被隐藏,保存在场景中或被用户修改
继承的函数
GetComponent 如果游戏附体上附加了一个,则返回type类组件,没有则返回null
GetComponentInChildren 如果该组件位于GameObject或任何其子物体上,返回type类组件,使用深度优先搜索
GetComponentsInChildren 如果这些组件位于GameObject或任何它的子物体上,返回type类组件。
GetComponents 返回GameObject上所有type类的组件
CompareTag 该游戏物体被是否被标签为tag?
SendMessageUpwards 在该游戏物体的每个MonoBehaviour和该行为的父对象上调用名为methodName的方法
SendMessage 在该游戏物体的每个MonoBehaviour上调用methodName方法
BroadcastMessage 在这个游戏物体或其任何子物体上的每个MonoBehaviour上调用methodName
GetInstanceID 返回该物体的实例id
继承的类函数
operator bool 这个物体存在吗?
Instantiate 克隆original物体并返回这个克隆。
Destroy 移除一个游戏物体、组件或资源。
DestroyImmediate 立即销毁物体obj。强烈建议使用Destroy代理。
FindObjectsOfType 返回所有类型为type的激活物体。
FindObjectOfType 返回第一个类型为type的激活物体。
operator== 比较两个物体是否相同。
operator!= 比较两个物体是否不同。
DontDestroyOnLoad 加载新场景时确保目标物体不被自动销毁。
GUIElement
类,继承自Behaviour。用于显示在GUI上的图片和文本字符串的基类。这个类处理所有GUI元素的基本功能。
函数
◆ void GetScreenRect (camera : Camera = null) : Rect
描述:在屏幕坐标返回GUIElement的包围矩阵。如果没有camera被指定,一个填充整个游戏窗口的相机将被使用。
void Start () {
var r = guiTexture.GetScreenRect ();
print (“This gui element is %d pixel wide.”,r.width);
var r = guiText.GetScreenRect();
print (“This gui element is %d pixel wide.”,r.width);
}
◆ void HitTest (screenPosition : Vector3, camera : Camera = null) : bool
描述:屏幕上的点在是否在元素内部?如果screenPositon包含在这个GUIElement内部时返回真,screenPosition以屏幕坐标指定,例如由Input.mousePosition属性返回的值。如果没有camera被指定,一个填充整个游戏窗口的相机将被使用。注意,如果位置在元素内部,true将被返回。即使游戏物体属于Ignore Raycast层(通常鼠标事件不会发送到Ignore Raycast物体)。参见GUILayer.HitTest。
if (guiTexture.HitTest (Vector3 (360, 450, 0.)))
print (“This gui texture covers pixel 360, 450”);
if (guiText.HitTest (Vector3(360, 450, 0.)))
print (“This gui texture covers pixel 360, 450”);
继承的成员
继承的变量
enable 启用则Behaviour被更新,不启用则不更新
transform 附加到该GameObject的Transform(没有返回null)
rigidbody 附加到该GameObject的Rigidbody(没有返回null)
camera 附加到该GameObject的Camera(没有返回null)
light 附加到该GameObject的Light(没有返回null)
animation 附加到该GameObject的Animation(没有返回null)
constantForce 附加到该GameObject的ConstantForce(没有返回null)
renderer 附加到该GameObject的Renderer(没有返回null)
audio 附加到该GameObject的Audio(没有返回null)
guiText 附加到该GameObject的GuiText(没有返回null)
networkView 附加到该GameObject的NetworkView(没有返回null)
guiTexture 附加到该GameObject的GuiTexture(没有返回null)
collider 附加到该GameObject的Collider(没有返回null)
hingeJoint 附加到该GameObject的HingeJoint(没有返回null)
particleEmitter 附加到该GameObject的ParticleEmitter(没有返回null)
gameObject 该组件所附加的游戏物体。组件总是会附加到游戏物体上
tag 该游戏物体的标签。
name 对象的名称
hideFlags 该物体是否被隐藏,保存在场景中或被用户修改
继承的函数
GetComponent 如果游戏附体上附加了一个,则返回type类组件,没有则返回null
GetComponentInChildren 如果该组件位于GameObject或任何其子物体上,返回type类组件,使用深度优先搜索
GetComponentsInChildren 如果这些组件位于GameObject或任何它的子物体上,返回type类组件。
GetComponents 返回GameObject上所有type类的组件
CompareTag 该游戏物体被是否被标签为tag?
SendMessageUpwards 在该游戏物体的每个MonoBehaviour和该行为的父对象上调用名为methodName的方法
SendMessage 在该游戏物体的每个MonoBehaviour上调用methodName方法
BroadcastMessage 在这个游戏物体或其任何子物体上的每个MonoBehaviour上调用methodName
GetInstanceID 返回该物体的实例id
继承的类函数
operator bool 这个物体存在吗?
Instantiate 克隆original物体并返回这个克隆。
Destroy 移除一个游戏物体、组件或资源。
DestroyImmediate 立即销毁物体obj。强烈建议使用Destroy代理。
FindObjectsOfType 返回所有类型为type的激活物体。
FindObjectOfType 返回第一个类型为type的激活物体。
operator== 比较两个物体是否相同。
operator!= 比较两个物体是否不同。
DontDestroyOnLoad 加载新场景时确保目标物体不被自动销毁。
GUIText
类,继承自GUIElement。显示在一个GUI中的文本字符。
变量
◆ var alignment : TextAlignment
描述:文本的对齐。
guiText.alignment = TextAlignment.Left;
◆ var anchor : TextAnchor
描述:文本的锚点。
guiText.anchor = TextAnchor.MiddleCenter;
◆ var font : Font
描述:用于文本的字体。
var font : Font;
guiText.font = font;
◆ var lineSpaceing : float
描述:行间距倍数。这个可以使被定义在字体中行间距增加。
//双倍行间距
guiText.lineSpacing = 2.0;
◆ var material : Material
描述:用于渲染的Material。赋予一个新的材质来改变渲染处理。改变这个材质来改变渲染的字体。如果赋值null到material,将使用内置基本字体。
//改变这个材质显示绿色文本。
guiText.material.color = Color.green;
参见:font variable
◆ var pixelOffset : Vector2
描述:文本的像素偏移。文本从它的原始位置偏移的量。
guiText.pixelOffset = Vector2 (10, 10);
◆ var tabSize : float
描述:这个标签增加的宽度。
guiText.tabSize = 4.0;
◆ var text : string
描述:需要显示的文本。
GUITexture
类,继承自GUIElement。用于2D GUI的纹理图片。
变量
◆ var color : Color
描述:GUI纹理的颜色。
//改变纹理的颜色为绿色
guiTexture.color = Color.green;
◆ var pixelInset : Rect
描述:pixellnset用来调整尺寸和位置。为了使GUI纹理总是原始大小,设置transform.localScale为Vector3.zero。
transform.position = Vector3.zero;
transform.localScale = Vector3.zero;
guiTexture.pixelInset = Rect (50, 50, 100, 100);
◆ var texture : Texture
描述:用于绘制的纹理。
//将someTexture赋值给guiTexture。
var someTexture : Texture2D;
guiTexture.texture = someTexture;
继承的成员
继承的变量
enable 启用则Behaviour被更新,不启用则不更新
transform 附加到该GameObject的Transform(没有返回null)
rigidbody 附加到该GameObject的Rigidbody(没有返回null)
camera 附加到该GameObject的Camera(没有返回null)
light 附加到该GameObject的Light(没有返回null)
animation 附加到该GameObject的Animation(没有返回null)
constantForce 附加到该GameObject的ConstantForce(没有返回null)
renderer 附加到该GameObject的Renderer(没有返回null)
audio 附加到该GameObject的Audio(没有返回null)
guiText 附加到该GameObject的GuiText(没有返回null)
networkView 附加到该GameObject的NetworkView(没有返回null)
guiTexture 附加到该GameObject的GuiTexture(没有返回null)
collider 附加到该GameObject的Collider(没有返回null)
hingeJoint 附加到该GameObject的HingeJoint(没有返回null)
particleEmitter 附加到该GameObject的ParticleEmitter(没有返回null)
gameObject 该组件所附加的游戏物体。组件总是会附加到游戏物体上
tag 该游戏物体的标签。
name 对象的名称
hideFlags 该物体是否被隐藏,保存在场景中或被用户修改
继承的函数
GetComponent 如果游戏附体上附加了一个,则返回type类组件,没有则返回null
GetComponentInChildren 如果该组件位于GameObject或任何其子物体上,返回type类组件,使用深度优先搜索
GetComponentsInChildren 如果这些组件位于GameObject或任何它的子物体上,返回type类组件。
GetComponents 返回GameObject上所有type类的组件
CompareTag 该游戏物体被是否被标签为tag?
SendMessageUpwards 在该游戏物体的每个MonoBehaviour和该行为的父对象上调用名为methodName的方法
SendMessage 在该游戏物体的每个MonoBehaviour上调用methodName方法
BroadcastMessage 在这个游戏物体或其任何子物体上的每个MonoBehaviour上调用methodName
GetInstanceID 返回该物体的实例id
继承的类函数
operator bool 这个物体存在吗?
Instantiate 克隆original物体并返回这个克隆。
Destroy 移除一个游戏物体、组件或资源。
DestroyImmediate 立即销毁物体obj。强烈建议使用Destroy代理。
FindObjectsOfType 返回所有类型为type的激活物体。
FindObjectOfType 返回第一个类型为type的激活物体。
operator== 比较两个物体是否相同。
operator!= 比较两个物体是否不同。
DontDestroyOnLoad 加载新场景时确保目标物体不被自动销毁。
GUILayer
类,继承自Behaviour。
函数
◆ void HitTest (screenPosition : Vector3) : GUIElement
描述:在屏幕的制定位置获取GUI元素。返回屏幕上指定点的GUIElement。如果screenPosition在某个GUIElement内部,那个元素将被返回。如果这个位置没有在任何GUI元素内部,返回null。输入Ignore Raycast层的GUI元素将被忽略,就像它们不存在。screenPosition在屏幕坐标系下,就像由Input.mousePosition属性返回的值。参见:GUIElement.HitTest,Input.mousePositon。
继承的成员
继承的变量
enable 启用则Behaviour被更新,不启用则不更新
transform 附加到该GameObject的Transform(没有返回null)
rigidbody 附加到该GameObject的Rigidbody(没有返回null)
camera 附加到该GameObject的Camera(没有返回null)
light 附加到该GameObject的Light(没有返回null)
animation 附加到该GameObject的Animation(没有返回null)
constantForce 附加到该GameObject的ConstantForce(没有返回null)
renderer 附加到该GameObject的Renderer(没有返回null)
audio 附加到该GameObject的Audio(没有返回null)
guiText 附加到该GameObject的GuiText(没有返回null)
networkView 附加到该GameObject的NetworkView(没有返回null)
guiTexture 附加到该GameObject的GuiTexture(没有返回null)
collider 附加到该GameObject的Collider(没有返回null)
hingeJoint 附加到该GameObject的HingeJoint(没有返回null)
particleEmitter 附加到该GameObject的ParticleEmitter(没有返回null)
gameObject 该组件所附加的游戏物体。组件总是会附加到游戏物体上
tag 该游戏物体的标签。
name 对象的名称
hideFlags 该物体是否被隐藏,保存在场景中或被用户修改
继承的函数
GetComponent 如果游戏附体上附加了一个,则返回type类组件,没有则返回null
GetComponentInChildren 如果该组件位于GameObject或任何其子物体上,返回type类组件,使用深度优先搜索
GetComponentsInChildren 如果这些组件位于GameObject或任何它的子物体上,返回type类组件。
GetComponents 返回GameObject上所有type类的组件
CompareTag 该游戏物体被是否被标签为tag?
SendMessageUpwards 在该游戏物体的每个MonoBehaviour和该行为的父对象上调用名为methodName的方法
SendMessage 在该游戏物体的每个MonoBehaviour上调用methodName方法
BroadcastMessage 在这个游戏物体或其任何子物体上的每个MonoBehaviour上调用methodName
GetInstanceID 返回该物体的实例id
继承的类函数
operator bool 这个物体存在吗?
Instantiate 克隆original物体并返回这个克隆。
Destroy 移除一个游戏物体、组件或资源。
DestroyImmediate 立即销毁物体obj。强烈建议使用Destroy代理。
FindObjectsOfType 返回所有类型为type的激活物体。
FindObjectOfType 返回第一个类型为type的激活物体。
operator== 比较两个物体是否相同。
operator!= 比较两个物体是否不同。
DontDestroyOnLoad 加载新场景时确保目标物体不被自动销毁。
LensFlare
类,继承自Behaviour。用于Lensflare组件的借口。这允许你在运行时改变镜头闪光的亮度和颜色。
变量
◆ var brightness : float
描述:闪光的强度。这个控制发光元素的尺寸和亮度。
参见:Lens flare component, flare assets。
◆ var color : Color
描述:闪光的颜色。这控制闪光元素的颜色(那些启用了use light color的)。
参见:Lens flare component, flare assets。
◆ var flare : Flare
描述:使用的flare asset。
参见:Lens flare component, flare assets。
继承的成员
继承的变量
enable 启用则Behaviour被更新,不启用则不更新
transform 附加到该GameObject的Transform(没有返回null)
rigidbody 附加到该GameObject的Rigidbody(没有返回null)
camera 附加到该GameObject的Camera(没有返回null)
light 附加到该GameObject的Light(没有返回null)
animation 附加到该GameObject的Animation(没有返回null)
constantForce 附加到该GameObject的ConstantForce(没有返回null)
renderer 附加到该GameObject的Renderer(没有返回null)
audio 附加到该GameObject的Audio(没有返回null)
guiText 附加到该GameObject的GuiText(没有返回null)
networkView 附加到该GameObject的NetworkView(没有返回null)
guiTexture 附加到该GameObject的GuiTexture(没有返回null)
collider 附加到该GameObject的Collider(没有返回null)
hingeJoint 附加到该GameObject的HingeJoint(没有返回null)
particleEmitter 附加到该GameObject的ParticleEmitter(没有返回null)
gameObject 该组件所附加的游戏物体。组件总是会附加到游戏物体上
tag 该游戏物体的标签。
name 对象的名称
hideFlags 该物体是否被隐藏,保存在场景中或被用户修改
继承的函数
GetComponent 如果游戏附体上附加了一个,则返回type类组件,没有则返回null
GetComponentInChildren 如果该组件位于GameObject或任何其子物体上,返回type类组件,使用深度优先搜索
GetComponentsInChildren 如果这些组件位于GameObject或任何它的子物体上,返回type类组件。
GetComponents 返回GameObject上所有type类的组件
CompareTag 该游戏物体被是否被标签为tag?
SendMessageUpwards 在该游戏物体的每个MonoBehaviour和该行为的父对象上调用名为methodName的方法
SendMessage 在该游戏物体的每个MonoBehaviour上调用methodName方法
BroadcastMessage 在这个游戏物体或其任何子物体上的每个MonoBehaviour上调用methodName
GetInstanceID 返回该物体的实例id
继承的类函数
operator bool 这个物体存在吗?
Instantiate 克隆original物体并返回这个克隆。
Destroy 移除一个游戏物体、组件或资源。
DestroyImmediate 立即销毁物体obj。强烈建议使用Destroy代理。
FindObjectsOfType 返回所有类型为type的激活物体。
FindObjectOfType 返回第一个类型为type的激活物体。
operator== 比较两个物体是否相同。
operator!= 比较两个物体是否不同。
DontDestroyOnLoad 加载新场景时确保目标物体不被自动销毁。
Light
类,继承自Behaviour。用于light components的脚本接口。使用这个来控制Unity光源的所有方面。这个属性完全与现实在监视面板中的值相同。通常光源都是在编辑器中创建,但是有时候需要从脚本中创建。
void Start () {
//制作一个游戏物体
var lightGameObject = new GameObject (“The Light”);
//添加光源组件
lightGameObject.AddComponent (Light);
//设置颜色和位置
lightGameObject.light.color = Color.blue;
//在添加光照组件后,设置位置(或任何变换组件)
lightGameObject.transform.position = Vector3 (0, 5, 0);
}
变量
◆ var attenuate : bool
描述:光源是否随着距离衰减?对于Directional光源衰减总是关闭的。
//关闭光源衰减。
light.attenuate = false;
参见:Light component
◆ var color : Color
描述:光源的颜色。为了修改光源的强度你需要改变光源颜色的亮度。光源总是增加亮度,因此一个黑色的光源与没有光源相同。光源是否随着距离衰减?对于Directional光源衰减总是关闭的。
//在2秒内使颜色变黑。
void Update () {
light.color -= Color.white / 2.0 * Time.deltaTime;
}
//在2个颜色之间来回插值光源颜色。
var duration = 1.0;
var color0 = Color.red;
var color1 = Color.blue;
void Update () {
//设置光源颜色
var t = Mathf.PingPong (Time.time, duration) / duration;
light.color = Color.Lerp (color0, color1, t);
}
参见:Light component。
◆ var cookie : Texture
描述:被盖光源投影的cookie纹理。如果cookie是一个立方体贴图,光源将变为一个点光源。注意cookie只在像素光源下显示。
//在监视面板中公开一个纹理的引用
var newCookie : Texture2D;
//赋cookie
light.cookie = newCookie;
参见:Light component
◆ var cullingMask : int
描述:这个用来选择性的照亮部分场景。如果GameObject的layerMask与光源的cullingMask进行AND操作后为0.,那么这个游戏物体不能被这个光源照亮。参考Layers获取更多信息。
//只照亮第一层中的物体(默认层)
light.cullingMask = 1 << 0;
参见:Light component
◆ var flare : Flare
描述:为这个光源使用的flare asset。
//在监视面板中公开一个闪光的引用
var newFlare : Flare;
//赋值闪光
light.flare = newFlare;
参见:Light component和flare asset。
◆ var intensity : float
描述:光源的强度被光源的颜色乘。该值可以介于0~8之间。允许你创建明亮的灯光。
//随时间改变光照强度
var duration = 1.0;
void Update() {
//余弦理论
var phi = Time.time / duration * 2 * Mathf.PI;
//获取余弦,并将范围从-11变为01
var amplitude = Mathf.Cos( phi ) * 0.5 + 0.5;
//设置光的颜色
light.intensity = amplitude;
}
◆ var range : float
描述:光源的范围。
即使光源关闭了attenuate,它还是只影响在它范围内的物体。
//在原始范围与原始范围一般处变换光照范围
var duration = 3.0;
private var originalRange : float;
originalRange = light.range;
void Update() {
var amplitude = Mathf.PingPong( Time.time, duration );
//将0…持续时间改为0.5…1范围
amplitude = amplitude / duration * 0.5 + 0.5;
//设置光照范围
light.range = originalRange * amplitude;
}
参见:Light component。
◆ var renderMode : LightRenderMode
描述:如何渲染该光源?此处可以是LightRenderMode.Auto, LightRenderMode.ForceVertex 或 LightRenderMode.ForcePixel。像素光渲染比较慢但是看起来较好,尤其是对那些没有较高面数的几何体。一些效果(例如凹凸)只会在像素光照下显示。
//使光源只以点光照模式渲染
light.renderMode = LightRenderMode.ForceVertex;
参见:Light component
◆ var shadowConstantBias : float
描述:阴影偏移常量。
参见:shadows,shadowObjectSizeBias。
◆ var shadowSizeBias : float
描述:阴影偏移常量。
参见:shadows,shadowConstantBias。
◆ var shadows : LightShadows
描述:这个光源是否投射阴影?
//设置光源为投射硬阴影
light.shadows = LightShadows.Hard;
参见:LightShadows, shadowStrength property, Renderer.castShadows, Renderer.receiveShadows
◆ var shadowStrength : float
描述:光源阴影的强度?
//使光源的阴影非常弱
light.shadowStrength = 0.3;
参见:shadows property, Renderer.castShadows, Renderer.receiveShadows。
◆ var spotAngle : float
描述:光源的投射光角度。主要用于Spot光源。改变Directional光源的cookie尺寸。对Point光源没有影响。
//在”minAngle”与”maxAngle”之间随机改变投射角度
//每’interval’秒改变一次.
var interval=0.3;
var minAngle=10;
var maxAngle=90;
private var timeLeft:float;
teimleft=interval;
light.type=LightType.Spot;
void Update()
{
timeLeft=Time.deltaTime;
if(timeLeft<0.0){
//开始改变
timeLeft=interval;
light.spotAngle=Random Range(minAngle,maxAngle);
};
}
参见:Light component
? var type:LightType
描述:光源的类型
可以是LightType.Spot,LightType.Directional,LightType.Point.
//制作一个投射光源
Light.type=LightType.Spot;
参见:Light component
继承的成员
继承的变量
Enabled 启用Behaviours被更新,禁用Behaviours不被更新。
Transform附加到这个GameObject的Transform(如果没有为null)。
Rigidbody附加到这个GameObject的Rigidbody(如果没有为null)。
Camera 附加到这个GameObject的Camera(如果没有为null)。
Light 附加到这个GameObject的Light(如果没有为null)。
Animation附加到这个GameObject的Animation(如果没有为null)。
constantForce附加到这个GameObject的ConstantForce(如果没有为null)。
Renderer 附加到这个GameObject的Renderer(如果没有为null)。
guiText 附加到这个GameObject的GUIText(如果没有为null)。
networkView附加到这个GameObject的NetworkView(如果没有为null)。
Collider 附加到这个GameObject的Collider(如果没有为null)。
hingeJoint附加到这个GameObject的HingeJoint(如果没有为null)。
particleEmitter 附加到这个GameObject的ParticleEmitter(如果没有为null)。
gameObject这个组件所附加的游戏物体。一个组件总是附加到一个游戏物体。
Tag 这个游戏的标签。
Name 对象的名称。
hideFlags 该物体是否被隐藏,保存在场景中或被用户修改?
继承的函数
GetComponet返回type类型的组件,如果游戏物体上附加一个,如果没有返
回null。
GetComponentInchildren 返回type类型的组件,这个组件位于GameObject或者任何它的子物体上,使用深度优先搜索。
GetComponentsInchildren 返回所有type类型的组件,这些组件位于GameObject或者任何它的子物体上。
GetComponets返回Gameobject所有type类型的组件。
CompareTag 这游戏物体被标签为tag?
SendMessageUpwards 在这游戏物体的每个MonoBehaviour和该行为的组先上调用名为methodName方法。
SendMessage 在这游戏物体的每个MonoBehaviour上调用名为
methodName方法。
BoradcastMessage 在这个游戏物体或其任何子上的每个MonoBehaviour上调用methodName方法。
GetInstanceID 返回该物体的实例id。
继承的类函数
Operator bool 这个物体存在吗?
Instatiate 克隆original物体并返回这个克隆。
Destroy 移除一个游戏物体,组件或资源。
DestroyImmediate立即销毁物体obj。强烈建议使用Destroy代替
FindObjectsOfType返回所有类型为type的激活物体。
FindObjectOfType返回第一个类型为type的激活物体。
Operator== 比较两个物体是否相同。
Operator!= 比较两个物体是否不相同。
DontDestroyOnLoad 加载新场景时确保物体target不被自动销毁。
MonoBehaviour
类,继承自Behaviour
MonoBehaviour是每个脚本所继承的基类。
每个使用Javascript的脚本自动地从MonoBehaviour继承。当使用C#或Boo时你必须显式从MonoBehaviour继承。
参见:手册中的chapter on scripting.
函数
◆void Cancellnvoke():void
描述:取消所有在这个MonoBehaviour上调用
//在2秒时开始
//一个projectile所在每0.3秒时运行
var projectile:Rigidbody;
InvokeRepeating(“LaunchProjectile”,2,0.3);
//当用户按下ctrl按钮时,
//取消重复调用
Void Update()
{
If(Input.GetButton(“Fire1”)){
Cancellnvoke();

}
}
Void LaunchProjectile(){
Instance=Instantiate(prtfab);
Instance.velocity=Random.insideUnitSphere5;
}
◆void Cancellvoke(methodName:string):void
描述:撤销该行为中名为methodName的所有调用。
//在2秒时开始
//一个projectile将在每0.3秒时运行
var projectile :Rigidbady;
invokeRepeating(“LaunchProjectile”,2,0.3);
//当用户按下crtl按钮时
//取消重复调用
Void Update(){
If(Input.GetButton(Fire1)){
Cancellnvode(“LaunchProjectile”);
}
}
Void LanuchProjectile(){
instance=Instntiate(prefab);
instance.velocity=Random.insideUnitSphere
5;
}
◆void Invoke(methodName:string,time:float):void
描述:在time秒调用methodName方法。
//在两秒时发射一个投射物
var Projectile:rigidbady;
Invoke(“LaunchProjectile”,2);
Void LaunchProjectile(){
Instance=Instantiate(prefab);
Instance.velocity=Random.insideUnitSphere5;
}
◆void InvokeRepeating(methodName:string,time:float,repeatRate:float):void
描述:在time秒调用methodName方法。
第一次调用之后,每repeatRate秒重复调用这个函数
//在2秒时开始
//一个Projectile将在每0.3秒运行
var projectile:Rigidbody;
InvokeRepeating(“LaunchProjectile”,2,0.3);
Void LaunchProjectile(){
instance=Instantiate(prefab);
instance.velocity=Random.insideUnitSphere
5;
}
◆void IsInvoking(methodName:string)
描述:是否有任何对methodName的调用在等待?
◆void IsInvoking(methodName:string):bool
描述:是否有任何MonoBehaviour的调用在等待?
◆Void StartCoroutine(routine:IEnumerator):Coroutine
描述:开始一个coroutine
一个coroutine的执行可以任何位置使用yield语句暂停,当coroutine继续的时候yield返回值,当行为需要跨越多个帧的时候,Coroutines是非常好的,当Coroutines几乎没有性能负担。StartCoroutine函数总是立即返回,然而你能够yidle结果,这个将等待直到coroutine执行完成。
当使用javascript时,没有必要使用StartCorutine,编译器会为你做这件事。在写C#代码的时候你必须调用StartCoroutine
//在这个例子中我们显示如何并行调用
//一个coroutine并继续执行这个函数。
//0秒后,打印”Starting0.0”
//0秒后,打印”Before WaitAndPrint Finishes0.0”
//2秒后,打印”WaitAndPrint 2.0”
print(“Starting”+Time.time);
//WaitAndPrint作为一个coroutine开始,并等待直到它完成
WaitAndPrint(2.0)
Print(“Before WaitAndPrint Finishes”+Time.time);
void WaitAndPrint(waitTime:float){
//暂停执行waitTime秒
Yield WaitForSeconds(waitTime);
Print(“WaitAndPrint”+Time.time);
//WaitAndPrint作为一个coroutine开始,并等待直到它完成
Yield WaitAndPrint(2.0);
Print(“Done”+Time.time);
}
C#例子代码如下
//C#例子,在这个例子中我们显示如何并行调用
//一个coroutine并继续执行这个函数
void Start(){
//0秒后,打印”Starting0.0”
//0秒后,打印”Before WaitAndPrint Finishes0.0”
//2秒后,print”waitAndPrint2.0”
Print(“Starting”+Time.time);
StartCoroutine(WaitAndPrint(2.0F));
Print(“Before WaitAndPrint Finishes”+Time.time);
}
IEnumerator WaitAndPrint(float waitTime){
// 暂停waitTime秒
Yield return new WaitForSeconds(waitTime);
Print(“WaitAndPrint”+Time);
}
//c#例子
//在这个例子中我们展示如何调用一个coroutine并等待直到它完成
IEnumerator Start(){
//0秒后,打印”strating0.0”
//2秒后,prints”WaitAndPrint2.0”
//2秒后,打印”Done 2.0”
Print(“Starting”+Time.time);
Yield return StartCoutine(WaitAndPrint(2.0f);
Print(“Done”+Time.time);
}
IEnumerator WaitAndPrint(float waitTime){
//暂停waitTime秒
Yield return new WaitForSeconds(waitTime);
Print(“WaitAndPrint”+Time.time);
}
◆Void StartCoroutine(methodName: string, value: object=null): Coroutine
描述:开始为methodName的Coroutine。
在大多数情况下,你要用StartCoroutine的变体。然而,使用一个字符串方法名的StartCoroutine允许StopCoroutine使用一个特定的方法名称。字符串级本的特定时它有较高的运行时开销来开始coroutine,并且你只能传递一个参数。
//在则合格例子中我们现实如何一个字符串名调用一个coroutine并停止它
Void Start(){
StartCoroutine(“DoSomething”,2.0);
Yield WaitForSeconds(1);
StopCoroutine(”DoSomething”);
}
Void DoSomething(someParameter: float){
While(true)
{
Print(”DoSomething Loop”);
Yield
}
}
◆Void StopAllCoroutines(): void
描述:停止所有运行在这个行为上的Coroutine。
//开始coroutine
StartCoroutine(“DoSomething”);
//紧跟着取消coroutine
Void DoSomething(){
While(true){
Yield;
}
}
StopAllCoroutines();
◆Void StopCoroutine(methodName: string): void
描述:停止所有运行在这个行为上的名为methodName的Coroutine。
请注意只使用一个字符串方法名的StartCoroutine才能使用StopCoroutine停止。
//在这个例子中我们显示如何使用一个字符串名调用一个coroutine并停止它
Void Start(){
StartCoroutine(“DoSomething”,2.0);
Yield WaitForSeconds(1);
StopCoroutine(”DoSomething”);
}
Void DoSomething(someParameter: float){
While(true)
{
Print(”DoSomething Loop”);
Yield
}
}
重载函数
◆Void Awake(): void
描述:当脚本实例被加载时,Awake 被调用。
在游戏开始前,使用Awake 来初始化任何变量或游戏状态。在脚本实例的生命期内Awake 只被调用一次。Awake 在所有物体被初始化之后被调用,因此你可以安全地告诉其他物体或使用如GameObject.FindWithTag来查询它们。每个游戏物体的Awake 以随机的顺序被调用。因此,你应该使用Awake 来再脚本之间设置引用,并使用Start来传递消息。Awake 总是在任何Start函数之前调用。这允许你调整脚本的初始化顺序。Awake 不能作为一个Coroutine
注意对于C#哈Boo用户:使用Awake 而不是构造函数来初始化,因为组件的序列化状态在构造的时候还没有确定。Awake 只被调用一次,就像构造函数。
Private var target: GameObject;
Void Awake(){
Target=GameObject.FindWithTag(‘”Player”)
}
Awake不能作为一个coroutine。
◆Void FixedUpdate (): void
描述:如果MonoBehaviour被启用,这个函数将以固定的帧率调用。
当处理Rigidbody是应该使用FixedUpdate而不是使用Update。例如,当添加一个力到刚体时,你必须在FixedUpdate内以固定的帧率应用而不是在Update内。
//应用一个向上的力到刚体
Void FixedUpdate(){
Rigidbody.AddForce(Vector3.up);
}
力伟到从上一次调用Update的消逝时间,使用Time.deltaTime,这个函数只在Behaviour被启用时调用。重载这个函数,以便给你的组件提供功能。
◆Void LateUpdate (): void
描述:如果该Behaviour被启用,LateUpdate将在每帧中调用。
LateUpdate在所有Update函数被调用后调用。这可用于调整脚本执行顺序。例如,一个跟随相机应该总是在LateUpdate中实现,因为他跟踪Update中移动的物体。
//向前以1米/秒的速度移动物体
Void LateUpdate (){
transfor.Translate(0,0,Time.deltaTime1);
}
为了得到从最后一个调用LateUpdate的消逝时间,使用Time.deltaTime。如果该Behaviour被启用,该函数将在每帧中调用。重载这个函数,以便给你的组件提供功能。
◆Void OnApplicationPause(pause: bool): void
描述:当玩家暂停时发送到所有游戏物体。
OnApplicationPause可以是一个coroutine,简单地在这个函数中使用yield语句。
◆Void OnApplicationQuit(): void
描述:在应用退出之前发送到所有游戏物体。
在编辑器中当用户停止播放模式时这个被调用。在网页播放器中当web被关闭时这个函数被调用。
◆Void OnBecameInvisible(): void
描述:OnBecameInvisible函数在这个渲染上的脚本。OnBecameVisible和OnBecameInvisible可以用于只需要在需要在物体可见时才进行的计算。
//当它不可见时禁用这个行为
Finction OnBecameInvisible(){
Enabled=false;
}
OnBecameInvisible可以是一个coroutine,简单地在这个函数中使用yield语句。当在编辑器中运行时,场景试图相机也会导致这个函数被调用。
◆Void OnBecameVisible(): void
描述:OnBecameVisible函数在这个渲染器对任何相机变得可见时被调用。
这个消息被发送到所有附加在渲染器上的脚本。OnBecameVisible和OnBecameInvisible可以用于只需要在需要在物体可见时才进行的计算。
//当它不可, 见时禁用这个行为
Finction OnBecameVisible(){
Enabled=false;
}
OnBecameVisible可以是一个coroutine,简单地在这个函数中使用yield语句。当在编辑器中运行时,场景试图相机也会导致这个函数被调用。
◆Void OnCollisionEnter(collisionInfo: Collision): void
描述:
当这个碰撞器/刚体开始接触另一个刚体/碰撞器时OnCollisionEnter被调用。
相对于OnTriggerEnter,OnCollosionEnter传递Collision类而不是Collider,Collision类包含接触点,碰撞速度等细细。如果在函数中不使用CollisionInfo,省略CollisionInfo参数以避免不西药的计算。注意如果碰撞器附加了一个非动力学刚体,也只发送碰撞事件。
Void OnCollisionEnter(collision: Collision){
//调试绘制所有的接触点和法线
For(var contact: ContactPoint in collision.oontacts){
Debug.DrawRay(contact.point, contact.normal, Color.white);
}
//如果碰撞物体有较大的冲击就播放声音
If(collision.relativeVelocity.magnitude>2)
Audio.Play();
}
OnCollisionEnter可以是一个coroutine,简单地在这个函数中使用yield语句。
◆Void OnCollisionExit(collisionInfo: Collision): void
描述:当这个碰撞器/刚体开始接触另一个刚体/碰撞器时OnCollisionEnter被调用。
相对于OnTriggerExit,OnCollosionExit传递Collision类而不是Collider. Collision类包含接触点,碰撞速度等细细。如果在函数中不使用CollisionInfo,省略CollisionInfo参数以避免不西药的计算。注意如果碰撞器附加了一个非动力学刚体,也只发送碰撞事件。
Void OnCollisionExit(collision: Collision){
Print(“No longer in contact with”+collisionInfo.transform.name);
}
OnCollisionExit可以是一个coroutine,简单地在这个函数中使用yield语句。
◆void OnCollisionStay(collisionInfo:collision):void
描述:对于每个与刚体碰撞器相触碰的碰撞器刚体,OnCollisionStay将在每一帧中被调用。
相对于OnTriggerStay,OnCollisionStay 传递Collision类而不是Collider.Collision类包含接触点,碰撞速度等细节。如果在函数中不使用collisionInfo省略collisionInfo参数以避免不要必要的计算。注意如果碰撞器附加了一个非动力学刚体,也只发送碰撞事件。
void OnCollisionStay(CollisionInfo:Collision){
//调试绘制所有的接触点和法线
for (var contact:ContactPoint in collision.contacts){
Debug.DrawRay(contact.point,contact.normal,Color.white);
}
}
OnCollisionStay可以是一个coroutine,也简单地在这个函数中使用yield语句
◆void OnConnectedToServer():void
描述:当成功链接到服务器时在客户端调用这个函数。
void OnConnectedToServer(){
Debug.Log(“Connected to server”);
//发送到本地玩家名称到服务器
}
◆void OnControllerColliderHit(Hit:controllerColliderHit):void
描述:在移动的时候,控制器碰到一个碰撞器时,OnControllerColliderHit被调用。
这可以用来在角色碰到物体时推开物体。
//这个脚本推开所有角色碰到物体时推开物体
Var pushPower=2.0;
Void OnControllerColliderHit(hit: OnControllerColliderHit){
Var body:Rigidbody=hit.collider.attachedRigidboby;
//无刚体
If(body==null||body.isKinematic)
return;
//不推开我们身后的物体
If(hit.moveDirection.y<-0.3)
Return;
//从移动方向计算推的方向
//只推开物体到旁边而不是上下
Var pushDir=Vector3(hit.moveDirection.x,0,hit.moveDirection.z)
//如果知道角色移动有多快
//然后你就可以用它乘以推动速度
//使用推力
Body.velocity=pushDir
pushPower;
}
◆void OnDisable():void
描述:当这个行为禁用或不活动时这个函数被调用。
当物体被销毁的时候这个函数也会被调用并可以用于任何清理的代码。当脚本在编译结束后被加载时,OnDisable将被调用,然后脚本加载完成后OnEnable被调用。
Void OnDisable(){
Print("scrip was remove”);
}
OnDisabe 不能作为一个coroutine.
◆void OnDisconnectedFromServer(mode:NetworkDisconnection):void
描述:当链接挂失或服务器断开时在客户端用这个函数。
Void OnDisconnectedFromServer(info.NetworkDisconnection){
Debug.Log(“Disconnected from server”+info);
}
◆void OnDrawGizmos():void
描述:如果你想绘制可被点的Gizmos时,实现OnDrawGizmos,
这允许你在场景中快速选择重要的物体。
//在物体的位置上绘制光源灯泡
void OnDrawGizmos(){
Gizmos.DrawIcon(transform.position,”light Gizmo.tiff”);
}

◆void OnDrawGizmosSelected():void
描述:如果你想在物体被选择时绘制gizmos,实现这个OnDrawGizmosSelected。
Gizmos只在物体被选择的时候绘制。Gizmos不能点选。这可以设置更容易,例如
一个爆炸脚本可以绘制一个球显示爆炸半径。
var explosionRadius=5.0;
void OnDrawGizmosSelected(){
//选中的时候显示爆炸半径
Gizmos.color=Color.white;
Gizmos.DrawSphere(transfom.position,explosinRadius);
}
◆void OnEnable():void
描述:当物体启用或激活时这个函数被调用
void OnEnbale(){
print(“script was enabled”);
}
◆void OnFailedToconnect(error:NetworkConnectionError);void
描述:当链接因为某些原因失败时在客户端上调用这个函数。
失败的原因作为NetworkConnectionError枚举传入。
void OnFailedToconnect (info:NetworkConnectionError){
Debug.Log(“Could not connect to server”+error);
◆void OnFailedToConnectToMasterServer (error:NetworkConnectionError):void
描述:当链接到主服务器出现问题时在客户端或服务器调用这个函数。
错误的原因作为NetworkConnectionError枚举传入
void OnFailedToConnectToMasterServer(info:NetworkConnectionError){
Debug.Log(“Could not connect to master server”+info);
}
◆void OnGUI():void
描述:OnGUI被调用来渲染并处理GUI事件。
如果Monobehaviour的启用属性被设置为假,OnGUI()将不会被调用。
Void OnGUI(){
If(GUI>Button(Rect(10,10,150,100),”I am a button”)){
Print(“You clicked the button”)
}
}
参考GUI Scrtipting Guide 获取更多信息。
◆void ONJointBreak(breakForce:float):void
描述:当附加到相同游戏物体上的关节被断开时调用
当一个力大于这个关节的breakForce时,关节将被断开,当关节断开时,OnJointBreak将被调用,应用到关节的断开力将被传入,OnJointBreak之后这个关节将自动从游戏物体移除。参见:Joint.breakForce
◆void OnLevelWasLoaded(level:int):void
描述:这个函数在一个新的关卡被加载之后被调用
//level是被加载的关卡的索引。使用菜单项File>Build Settings来查看索引引用的是那个场景,参见:Application.LoadLevel
//当关卡13被加载的关卡的索引”Woohoo”
Void OnLevelWasLoaded(level:int){
If(level13){
Print(“Woohoo”);
}
}
OnLevelWasLoaded 可以是一个coroutine,简单地在这个函数中使用yield语句。
◆void OnMouseDown():void
描述:当用户在GUIElement或Collider上按下鼠标按钮时OnMouseDown被调用
这个事件被发送到所有附加在Collider或GUIElement的脚本上。
//加载名为“someLevel”的关卡
//来响应用户单击
Void OnMouseDown(){
Application.LoadLevel(“SomeLevel”);
}
这个函数不会在属于Ignore Raycast的层上调用。
OnMouseDown可以是一个coroutine,简单地在这个函数中使用yield语句。这个事件被发送到的有附加在Collider或GUIElement的脚本上。
◆void OnMouseDrag():void
描述:当用户在GUIElement或Collider上点击并按住鼠标时OnMouseDrag被调用。
当鼠标被按下时OnMouseDrag将在每帧中被调用。
//按住鼠标时使用材质颜色变暗
void OnMouseDrag(){
renderer.material.colorColor.whiteTime.deltaTime;
}
这个函数不会在属于Ignore Ray的层被调用 。
OnMouseDrag可以是一个coroutine,简单地在这个函数中使用yield语句。这个事件被发送到所有附加在collider或GUIElement的脚本上。
◆Void OnMouseEnter():void
描述:当鼠标进入GUIElement或collider时,OnMouseEnter被调用。
//附加这个脚本到网格
//使用当鼠标经过这个网格时使它变红
Void OnMouseEnter(){
Renderer.material.color=Color.red;
}
这个函数不会在属于Ignore Raycast的层上调用。
OnMouseEnter可以是一个coroutine,简单地在这个函数中使用yield语句。这个事件被发送所有附加在Collider或GUIElement的脚本上。
◆void OnMouseExit():void
描述:当鼠标不再位于GUIElement或Collider上时,OnMouseExit被调用。
OnMouseExit与OnMouseEnter相反
//当鼠标在网格时
//渐变材质的红色组件为零
Void OnMouseExit(){
Rnderer.material.color=Color.white;
}
这个函数不会在属于Ignore Raycast的层上调用。
OnMouseExit可以是一个coroutine,简单地在这个函数中使用yield语句。这个事件被发送到所有附加在Collider或GUIElement上脚本上。
◆void OnMouseOver();void
描述:当鼠标在GUIElement或Collider上时,OnMouseOver被调用。
//当鼠标在网格上时
//渐变材质的红色组件为零
void OnMouseOver(){
renderer.material.color==0.1
Time.deltaTime;
}
这个函数不会在属于Ignore Raycast的层上调用。
OnMouseOver可以是一个coroutine,简单地在这个函数中使用yield语句,这个事件被发送到所有附加在Collider或GUIElement的脚本上。
◆void OnMouseUP():void
描述:当用户已经松开鼠标按钮时OnMouseUp调用。
在GUIElement或Collider上松开鼠标时OnMouseUp被调用。
//加载名为”someLevel”的关卡
//来响应用户单击
void OnMouseUp(){
Application.LoadLevel(“SomeLevel”);
}
这个函数不会在属于Ignore Raycast的层上调用。
OnMouseUp可以是一个coroution,简单地在这个函数yield语句。这个事件被发送到所有附加在Collider或GUIElement的脚本上。
◆void OnNetworkInstantiate(info:NetworkMessageInfo):void
描述:当一个物体使用Network.Instantiate进行网络初始化在该物体上调用这个函数。
这个对于禁用或启用一个已经初始化的物体组件来说是非常有用的,它们的行为取决与它们是在本地还是在远端。
注意:在NetworkMessageInfo里的networkView属性不能在OnNetworkInstantiate里使用。
void OnNetworkInstantiate(info:NetworkMessageInfo){
Debug.Log(“New object instantiated by”+info.sender);
}
◆void onParticleCollision(other:GameObject):void
描述:当一个粒子碰到一个碰撞器时OnParticleCollision被调用。
这个可以在游戏物体被粒子击中时应用伤害到它的上面,这个消息被发送到所有附加到
WorldParticleCollider 的脚本上和被击中的Collider上,这个消息只有当你在
WorldParticleCollider检视面板中启用了sendCollisionMessage时才会被发送。
//应用力到所有被粒子击中的刚体上
void OnParticleCollison(other:GameObject){
var body=other.rigidbody;
if(body){
var direction=other.transform.position+transform.position;
direction=direction.normalized;
body.AddForce(direction5);
}
}
OnParticleCollision可以是一个coroutine,简单地在这个函数中使用yield语句。
◆void OnPlayConnected(player:NetworkPlayer):void
描述:当一个新玩家成功连接在服务器上调用这个函数。
private var playerCount:int=int=0;
void OnPlayerConnect(player.NetworkPlayer){
Debug.log(“Player”+playerCount+++”connected from”+player.ip.Address+”:”+player.port);
//用玩家的信息构建一个数据结构
}
◆void OnPlayerDisconnected(player:NetworkPlayer):void
描述:当玩家从服务器断开时在服务器上调用这个函数。
void OnPlayerDisconnected (player:NetworkPlayer){
Debug.Log(“Clean up after player”+player);
Network.RemoveRPcs(player);
Network.DestroyPlayerObject(player);
}
◆void OnpostRender():void
描述:OnPostRender在相机渲染场景之后调用。
只有脚本被附加到相机上时才会调用这个函数。OnPostRender可以是一个coroutine,
简单地在这个函数中使用yield语句。
OnPostRender在相机渲染完所有它的物体之后被调用。如果你想在所有相机和GUI被渲染之后做一些事情,使用WaitForEndFrame coroutine
参见:OnPreRender,WaitForEndOfFrame
//当附加到机时,将消除
//相机纹理的alpha通道为纯白色
//如果你有一个渲染纹理并想将它显示在GUI上时可以使用这个函数
Parvate var mat:Material;
void OnPostRender(){
//创建一个只渲染白色到alpha通道的着色器
If(mat)
{
Mat=new Material(“Shader Hidden SetAlpha”+)
“SubShader{“+”pass{”+”ZTest Always Cull off Zwrite Off”+”ColorMaskA”+”Color(1,1,1,1)”+”}”+”}”
+”}”);
}
}
// 用上述着色器绘制一个全屏四边形
GL.PushMatrix();
GL.LoadOrtho();
for(var i=0;i<mat.pssCount;++i){
mat.SetPass(i);
GL.Begin(GL.QUADS);
GL.Vertex3(0,0,0.1);
GL.Vertex3(1,0,0.1);
GL.Vertex3(1,1,0.1);
GL.Vertex3(0,1,0.1);
GL.End();
}
GL.PopMatrix();
}
◆void OnpreCull():void
描述:OnPreCull在相机开始裁剪场景之前调用
裁剪决定那个物体对于相机来说是可见的。OnPreCull仅仅在这个过程之间被调用。
只有脚本被附加到相机上时才会调用这个函数
如果你想改变相机的视觉参数(例如fieldOfView或者仅是变换),就在这里做这个。
场景物体的可见性将基于相机参数在OnPerCull之后确定。
? void OnRender():void
描述:OnpreRender在相机开始渲染场景之前调用。
只用脚本被附加到相机上时才会调用这个函数。
注意如是果你在这里改变了相机的视野参数(例如fieldOfView),它们将影响下一帧。用OnPreCull代替。OnPreRender可以是一个coroutine,简单地在这个函数中使用yield语句。
参见:OnPostRender
? void OnRenderImage(source:RenderTexture,destination:RenderTexture):void
描述:OnRenderImage在所有渲染完成后被调用,来渲染图片的后期处理效果(限于Unity Pro)
这允许你使用基于shader的过滤器来处理最后的图片。进入图片是source渲染纹理结果是destination渲染纹理。当有多个图片过滤附加在相机上时,它们序列化地处理图片,将第一个过滤器的目标作为下一个过滤器的源。
这个消息被发送到所有附加在相机上脚本。
参见:Unity Pro 中的image effects
◆void OnRenderObject(queueindex:int):void
描述:OnRenderObject被用来渲染你自己的物体,使用Graphics.DarwMesh或者其他函数。
queueIndex指定用来渲染物体的render queue。可以使用RenderBeforeQueues属性来指定你想绘制这个物体到哪里渲染队列。
◆void OnserializeNetworkView(stream:Bitstream.info:NetworkMessageInfo):void
描述:用来在一个被网络视监控的脚本中自定义变量同步
它自动决定被序列化的变量是否应该发送或接收,查看下面的例子获取更好的描述:
//这个物体的生命信息
Int currentHealth;
void OnSerializeNetworkView(stream:BitStream,info:NetworkMessageInfo){
if(stream.isWriting){
int health=currentHealth;
stream.Serialize(health);
}
else{
int health=0;
stream.Serialize(health);
currentHealth=health;
}
}
◆void OnServerInitialized():void
描述:当Network.InitializeServer被调用并完成时,在服务器上调用这个函数。
void OnServerInitialized(){
Debug.Log(“Server initialize and ready”);
}
◆void OnTriggerEnter(other:Collider):void
描述:当这个Collider other进入trigger时OnTriggerEnter被调用。
这个消息被发送到这个触发器碰撞器和接触到触发器的刚体(或者是碰撞器如果没有刚体)。注息如果碰撞器附加了一个刚体,也只发送触发器事件。
//销毁所有进入该触发器的物体
void OntriggerEnter(other:Collider){
Destroy(other.gameObject);
}
OnTriggerEnter可以是一个coroutine简单地在这个函数中使用yield语句。
◆void OnTriggerExit(other:Collider):void
描述:当这个Collider other停止触碰trigger时OnTriggerExit被调用。
这个消息被发送到触发和接触到这个触发器的碰撞器。注意如果碰撞附加了一个刚体,也只发送触发器事件。
//觥毁所有离开该触发器的物体
void OntriggerExit (other:Collider){
Destroy(other.gameObject);
}
OnTriggerExit可以是一个coroutine,简单地在这个函数中使用yield语句。
◆void OnTriggerStay(other:Collider):void
描述:对于每个Collider other,当它触碰到trigger时,OnTriggerStay会在每一帧中都被调用。
这个消息被发送到触发器和接触到这个触发器的碰撞器。注意如果碰撞器附加了一个刚体,也只发送触发器事件。
//对所进入这个触发器的刚体使用一个向上的力
void OnTriggerStay(other:Collider){
if(other.attachedRigidbody){
other.attachedRigidbody.AddForce(Vector3.up
10);
}
}
OnTriggerStay可以是一个coroutine,简单地在这个函数中使用yield语句。
◆void OnWillRenderObject():void
描述:如果物体可见,每个相机都会调用OnWiiRenderObject。
这个函数在裁剪过程中被调用,在渲染所有被裁剪的物体之前被调用。可以用这个来创建具有依赖性的渲染纹理,只有在被渲染的物体可见时才更新这个渲染纹理。作为一个例子,水组件就使用这个。
Camera.current将被设置为要渲染这个物体的相机
◆void Reset():void
描述:Reset在用户点击检视面版的上下文菜单或者第一次添加该组件被调用。Reset只在编辑模式下调用。Reset最常用于在检视面板中给定一个好的默认值
//设置target为一个默认的值
//这可以用于跟随相机
var target:GameObject;
void Reset(){
//如果target没有赋值,设置它
if(!target){
target=GameObject.FindWithTag(“play”);
}
}
◆void Start():void
描述:Start在所有Update方法被第一次调用前调用。
Start在行为的生命期内只调用一次。Awake和Start的不同在于Start只在脚本实例被启用时调用。这个允许你延迟所有初始化代码,知道真正需要它们的时候,Awake总是在任何Start函数之前调用。这允许你调整脚本的初始化顺序。Start不能作为一个coroutine
Start函数在所有脚本实例的Awake函数调用之后调用。
//初始化target变量
//target是私有的并且不能在检视面板中编辑
parivate var target:GameObject;
void Start(){
target=GameObject.FindWithTag(“Player”);
}
◆void Update():void
描述:如果MonoBehaviour被启用,Update将在每帧中调用。
Update是最常用的函数,来实现任何游戏行为。
//向前以1米的速度移动物体
void Update(){
transform.Translate(0,0,Time.deltaTime*1);
}
为了得到从最后一次调用Update的消逝时间,使用Time.deltaTime。如果该Behaviour
被启用,该函数将在每帧中调用,重载这个函数,以便给你的组件提供功能。
继承的成员
继承的变量
endbled 启用Behaviours被更新,禁用Behaviour不被更新
transform附加到这个GameObject的Transform(如果没有null)
rigidbody 附加到这个GameObject的Rigidbody(如果没有null)
camera 附加到这个GameObject的Camera(如果没有null)
light 附加到这个GameObject的Light(如果没有null)
animation 附加到这个GameObject的Animation(如果没有null)
constantForce附加到这个GameObject的ConstantForce(如果没有null)
renderer 附加到这个GameObject的Renderer(如果没有null)
audio 附加到这个GameObject的Audio(如果没有null)
guiText 附加到这个GameObject的GUIText(如果没有null)
networkView附加到这个GameObject的NetworkView(只读)(如果没有null)
guiTexture附加到这个GameObject的GUITexture(只读)(如果没有null)
collider 附加到这个GameObject的Collider(如果没有null)
hingeJoint附加到这个GameObject的HingeJoint(如果没有null)
particleEmitter 附加到这个GameObject的ParticleEmitter(如果没有null)
gameObject这个组件附加的游戏物体。一个组件总是附加到一个游戏物体
tag 这个游戏物体的标签
name 对象的名称
hideFlags 该物体是否被隐藏,保存在场景或被用户修改
继承的函数
GetComponent 返回type类型组件,如果游戏物体上附加了一个如果没有返回
null。
GetComponentInChildren 返回type类型的组件,这个组件位于GameObject或任何它的子
物体上,使用深度优先搜索。
GetComponentsInChildren 返回所有type类型的组件,这些组件位于GameObject或任何它
的子物体上。
GetComponents 返回GameObject上所有type类型的组件。
CompareTag 这个游戏物体被标签为tag?
SendmessageUpwards 在这个游戏物体的每个MonoBehaviour和该行为的祖先上
调用名为methodName方法
SendMessage 在这个游戏物体上的每个MonoBehaviour上调用methodName
方法。
BroadcastMessage在这个游戏物体或其任何子上的每个MonoBehaviour上调用
methodName方法。
GetInstanceID 返回该物体的实例ID。
继承的类函数
Operator bool 这个物体存在吗?
Instantiate 克隆original物体并返回这个克隆。
Destroy 移除一个游戏物体,组件或资源。
DestroyImmediate立即销毁物体obj。强烈建议使用Destroy代替。
FindObjectOfType返回所有类型为type的激活物体。
FindObjectOfType返回第一个类型为type的激活物体。
Operator== 比较两个物体是否相同。
Operator!= 比较两个物体是否不相同。
DontDestroyOnLoad 加载新场景时确保物体target不被自动销毁。
Terrain
类,继承自MonoBehaviour
渲染地形的Terrain
变量
◆var basemapDistance:float
描述:超出basemapDistance的高度图,将使用预先计算的地解析度basemap。
这个可以改善远处块的性能。Unity混合任意数量的地形纹理,使用条图来渲染近处的高度图。
void Start(){
Terrain.activeTerrain.basemapDistance=100;
}
◆var castShadows:bool
描述:地形应该投射阴影?
◆var detailObjectDistance:float
描述:在这个距离内细节将被显示。
void Start(){
Terrain.activeTerrain.detailObjectDistance=40;
}
◆var heightmapMaximumLOD:int
描述:让你实质降低用于渲染的高度图解析度
这个可用在低端的显卡上并不会显示最高的LOD地形。值为0表示总是显示最高细节。
值为1表示三角形数量将减小到1/4,高度图的解析度将是宽度和高度的一半。
void Start(){
Terrain.activeTerrain.heightmapMaximumLOD=1;
}
◆var heightmapPixelError:float
描述:当切换LOD时大约有多少像素时地形将处于错误的情况。
较高的值减少多边形的绘制数量。
void Start(){
Terrain.activeTerrain.heightmapPixelError=10;
}
◆var Lighting:Terrain.Lighting
描述:地形光照模式
参见:TerrainLighting枚举,Terrain Lightmap,terrain Settings
◆var terrainData:TerrainData
描述:存储在高度图中的地形数据,地形纹理,细节网格和树。
◆var treebillboardDistance:float
描述:到相机的距离超过这个值,树只被作为公告板渲染。
降低这个值将改善性能,但是使过度看起来更差因为公告板和树的不同将更加明显。
Void Start(){
Terrain.activeTerrain.treeBillboardDistance=100;
}
◆var treeCrossFadeLength:float
描述:树从公告变换到网格到网格的总距离增量。
降低这个值将使变换发生的越快。设置为0时,在从网格切换分告表示时将立即发生。
void Start(){
Terrain.activeTerrain.treeCrossFadeLength=20;
}
◆var treeDistance:float
描述:渲染树的最大距离。
这个值越高,越远的树将看到,运行的也更慢。
参见:Terrain.treeBillboardDistance
void Start(){
Terrain.activeTerrain.treeDistance=2000;
}
◆var treeMaximumFull.ODCount:int
描述:全LOD时渲染树的最大数量。
这个是一个简单的设置用来阻止太多的楼以过高的解析度和密度被绘制。因为如果
treeMaximumFullLodCount过高,树将不会消失,你应该修改treeBillboardDistance为不
包含。
Void Start(){
Terrain.activeTerrain.treeMaximumFullLODCount=200;
}
函数
◆void SampleHeight(worldPositon:Vector3):float
描述:在世界空间的给定位置处采样高度。
void LateUpdate(){
transfom.positon.y=Terrain.activeTerrain.SampleHeght(transfom.position);
}
◆void SetNeighbors(left:Terrain,top:Terrain,right:Terrain,bottom:Terrain):void
描述:允许你在相邻地形间设置连接
这个确保LOD在相邻地形上相同。注意,在一个地形上调用这个函数是不够的,你需要在每个地形上设置邻居。
类变量
◆static var activeTerrain: Terrain
描述:激活的地形。这个是用来在场景中获取主地形的快捷方式。
类方法
◆Static functin CreateTerrainGameObject(assignTerrain: TerrainData): GameObject
描述:从TerrainData创建一个包含碰撞器的地形。
继承的成员
继承的变量
Enabled 启用Behaviour被更新,禁用Behaviours不被更新。
transform 附加到该GameObject的Transform(没有返回null)
rigidbody 附加到该GameObject的Rigidbody(没有返回null)
camera 附加到该GameObject的Camera(没有返回null)
light 附加到该GameObject的Light(没有返回null)
animation 附加到该GameObject的Animation(没有返回null)
constantForce 附加到该GameObject的ConstantForce(没有返回null)
renderer 附加到该GameObject的Renderer(没有返回null)
audio 附加到该GameObject的Audio(没有返回null)
guiText 附加到该GameObject的GuiText(没有返回null)
networkView 附加到该GameObject的NetworkView(没有返回null)
guiTexture 附加到该GameObject的GuiTexture(没有返回null)
collider 附加到该GameObject的Collider(没有返回null)
hingeJoint 附加到该GameObject的HingeJoint(没有返回null)
particleEmitter 附加到该GameObject的ParticleEmitter(没有返回null)
gameObject 该组件所附加的游戏物体。组件总是会附加到游戏物体上
tag 该游戏物体的标签。
name 对象的名称
hideFlags 该物体是否被隐藏,保存在场景中或被用户修改
继承的函数
Invok e 在time秒调用methodName方法。
Invok Repeating 在time秒调用methodName方法。
CancelInvoke 取消所有在这个MonoBehaviour上的调用
IsInvoking 是否有任何对methodName的调用在等待?
StartCoroutine 开始一个coroutine
StopCoroutine 停止所有运行在这个行为上的名为methodName的coroutine
StopAllCoroutines 停止所有运行在这个行为上的coroutine
GetComponent 返回type类型的组件,如果游戏物体上附加了一个,如果没有
返回null。
GetComponcetInChildren 返回type类型的组件,这个组件位于GameObject或任何它的子
物体上。使用深度优先搜索
GetComponcetsInChildren 返回所有type类型组件,这些组件位于Gameobject或任何它的
子物体上。
GetComponents 返回GameObject上所有type类型的组件。
CompareTag 这个游戏物体被标签为tag?
SendMessageUpwards 在这个游戏物体的每个MonoBehaviour和该行为的祖先上调用
名为methodName方法。
SendMessage 在这个游戏物体上的每个MonoBehaviour上调用methodName
方法。
BroadcastMessage在这个游戏物体或其2任何子的每个MonoBehaviour上调用
methodName方法。
GetInstanceID 返回该物体的实例ID。
继承的消息传递
Update 如果MonoBehaviour被启用,Update将在每帧中
调用。
LateUpdate 如果该Behaviour被禁用,LateUpdate将在每帧中
调用。
FixedUpdate 如果MonoBehaviour被启用,这个函数将在每帧中调用。
Awake 当脚本实例被加载时,Awake被调用。
StartStart在所有Update方法被第一次调用前调用。
Reset Reset在用户点击检视面板的上下文菜单或第一次添加该组件时
被调用。
OnMouseEnter当鼠标进入GUIElement或Collider时,OnMouseEnter被调用。
OnMouseOver 当鼠标在GUIElement或Collider时,OnMouseEnter被调用。
OnMouseExit 当鼠标不再位于GUIElement或Collider上时,OnMouseExit被调用。
OnMouseDown当用户在GUIElement或Collider上按下鼠标按钮时
,OnMouseDown被调用。
OnMouseUp 当户已经松开鼠标按钮时OnMouseUp被调用。
OnMouseDrag 当用户在EUIElement或Collider上点击并按住鼠标时
OnMouseDrag被调用。
OnTriggerEnter当这个Collider other进入trigger时OnTriggerEnter被调用。
OnTriggerExit 当这个Collider other停止触碰trigger进OnTriggerExit被调用。
OnTriggerStay 对于每个Collider other,当它触碰到trigger时,OnTriggerStay
会在每一帧中都会被调用。
OnCollisionEnter当这个碰撞器刚体开始触碰另一个刚体碰撞器

时OnCollisionEnter被调用。
OnCollisonExit 对于每个与碰撞器刚体停止触碰另一个刚体碰撞器时
OnCollisionExit被调用。
OnCollisonStay对于每个与刚体碰撞器相触的碰撞器刚体OnCollisonStay将在每
一帧中被调用。
OnControllerColliderHit 在移动的时候,控制器碰到一个碰撞器时OnControllerColliderHit
被调用。
OnJointBreak 当附加到相同游戏物体上的关节被断开时调用。
OnParticleCollision当一个粒子碰到一个碰撞器时OnParticleCollision被调用。
OnBecameVisibleOnBecamevisible函数在这个渲染器对任何相机变得可见时被
调用。
OnBecameInvisibleOnBecamevisible函数在这个渲染器对任何相机变得不可见时被
调用。
OnLevelWasLoaded这个函数在一个新的关卡被加载之后被调用。
OnEnable 当物体启用或激活时这个函数被调用。
OnDisable 当这个行为禁用或不活动时这个函数被调用。
OnPreCull OnPreCull在相机开始裁剪场景之前调用。
OnPreRender OnPreRender在相机开始渲染场景之后调用。
OnPostRender OnPostRender 在相渲染场景之后调用。
OnRenderObjectOnRenderObject被用来渲染你自己的物体,使用
Graphics.DrawMesh或者其他函数。
OnWillRenderObject 如果物体可见,每个相机都会调用OnWillRenderObject。
OnGUI OnGUI被调用来渲染并处理GUI事件。
OnRenderImageOnRenderImage在所有渲染完成后被调用,来渲染图片。
OnDrawGizmosSelected 如果你想在物体被选择时绘制gizmos,实现这个
OnDrawGizmosSelected.
OnDrawGizmos如果你想绘制可被点选的gizmos时,实现OnDrawGizmos。
OnApplicationPause 当玩家暂停时发送到所有游戏物体。
OnApllicationQuit在应用退出之前发送到所有游戏物体。
OnPlayerConnected 当一个新玩家成功连接时在服务器上调用这个函数。
OnServerInitialized当Network.InitializeServer被调用并完成时,在服务上调用这
个函数。
OnConnectedToServer 当成功链接到服务器上时在客户端调用这个函数。
OnPlayerDisconnected 当玩家从服务器断开时在服务器上调用这个函数。
OndisconnectedFormServer 当链接丢失或服务器断开时在客户端调用这个函数。
OnFailedToConnect当链接因为某些原失败时在客户端上调用这个

函数
OnFailedToConnectToMasterServer 当链接到主服务器出现问题时在客户端或服务器端调用这个函数。
OnNetworkInstantiate 当一个物体使用Network.Instantiate进行网络初始化时在该物体上调用这个函数。
OnSerializeNetworkView 用来在一个被网络视监控的脚本中自定义变量同步。
继承的类函数
operator bool 这个物体存在吗?
Instantiate 克隆original物体并返回这个克隆。
Destroy 移除一个游戏物体,组件或资源。
DestroyImmediate 立即销毁物体obj。强烈建议使用Destroy代替。
FindObjectsOfType 返回所有类型为type的激活物体。
FindObjectOfType 返回第一个类型为type的激活物体。
operator == 比较两个物体是否相同。
operator != 比较两个物体是否不相同。
DontDestroyOnLoad 加载新场景时确保物体target不被自动销毁。
NetworkView
类,继承自Behaviour
网络视是多用户游戏的绑定物。
使用这个你可以准确定义什么应该通过网络同步,和如何同步,游戏物体可以有NetworkView组件,该组件可以被定义为观察物体的其他组件,可以在Network View manual page和component reference page获取更多信息。
变量
◆ var group : int
描述: 这个网络视所在的网格组。
所有的网格消息和RPC调用通过这个组。
Void Awake(){
//通过组1发送来自这个网格视的所有消息
Network View.group=1;
}
◆ var isMine : bool
描述:这个网格视是有这个物体控制吗?
Void OnNetworkInstantiate(info: NetworkMessageInfo){
If{networkView.isMine}
Debug.Log(“New object instanted by me”);
Else
Debug.Log(“New object instantiated by”+info.sender);
}
◆ var obseved : Component
描述:网络视监控的组件。

//打印含有由数组中给出的viewID的对象的名称(Print the names of the objects which have the view IDs given in the array)
Void PrintNames(viewIDs: Array){
For (var ID: NetworkViewID in IDs){
Debug.log(“Finding”+ID);
Var view : NetworkView = networkView.Find(ID);
Debug.log(view.observed.name);
}
}
◆ var owner : NetworkPlayer
描述: 拥有这个网络视的NetworkPlayer
void OnNetworkInstantiate(info: NetworkMessageInfo){
if(!networkView.isMine)
Debug.log(“New object instantiated by” + networkView.owner);
}
◆ var stateSynchrohization: NetworkStateSynchronization
描述:为这个网络视设置的NetworkStateSynchronization类型。
确保NetworkView在所有机器上使用相同可靠的方法是你的责任。在状态同步已经发生后不要在运行时改变状态的可靠性。
◆ var viewID: NetworkViewID
描述:这个网络视的ViewID。
函数
◆ void RPC(name: string, mode: RPCMode, params args:object[]): void
描述:在所有连接端调用一个RPC函数。
调用的函数必须有@RPC标志([RPC]用于C Sharp)。NetworkView必须附加到GameObject,在这个物体上RPC函数能够被调用。NetworkView用于其他什么地方或者是仅仅用于RPC函数是没有关系的。如果他仅仅用于RPC函数,state synchronization应该被关掉。Ovserved属性设置为none,在整个场景中RPC函数的名称应该是唯一的,如果不同脚本的两个RPC函数具有相同的名称,仅有一个会被调用。RPC调用总是确保执行的顺序与他们调用的顺序相同。用NetworkView.group为NetworkView设置的通信用,被用于RPC调用。为了获取RPC自身的信息,可以添加一个NetworkMessageInfo参数到函数申明中,它将自动包含这个信息。这样的做的时候你不需要改变调用RPC函数的方式,可以参考manual的RPC部分以便获取更多关于RPC的信息。可用的RPC参数为int,float,string,NetworkPlayer,NetworkViewID,Vector3和Quaternion。
var cubePrefab : Transform;
void OnGUI()
{
if (GUILayout.Button(“SpawnBox”))
{
var viewID = Netwok.AllocateViewID();

   networkView.RPC(“SpawnBox”,RPCMode.AllBuffered,viewID,transform.position);
}

}
@RPC
void SpawnBox (viewID : NetworkViewID, location : Vector3) {
// Instantate the prefab locally
var clone : Transform;
clone = Instantiate(cubePrefab, location, Quaternion.identity);
var nView : NetworkView;
nView = clone.GetComponent(NetworkView);
nView.viewID = viewID;
}
◆ void RPC(name: string, target: NetworkPlayer, params args: object[]): void
描述:在特定的玩家端调用RPC
◆ void SetSeope(player: NetworkPlayer, relevancy: bool): bool
描述:相对于一个特定的网络玩家这是网络视的范围
这可以用来实现相关设置,设置它为真假取决于你是否想这个玩家从网络接收更新。
类方法
◆ static void Find(viewID: NetworkViewID): NetworkView
描述:基于NetworkViewID查找一个网络视。
// 打印物体的名称,这些物体具有数组中给定的视ID (Print the names of the objects which have the view IDs given in the array)
void PrintNames(viewIDs : Array) {
for (var ID: NetworkViewID in IDs) {
Debug.Log("Finding "+ID);
var view : NetworkView = networkView.Find(ID);
Debug.Log(view.observed.name);
}
}
继承的成员
继承的变量
enabled 启用Behaviours被更新,禁用Behaviours不被更新。
transform 附加到这个GameObject的Transform(如果没有为null)。
rigidbody 附加到这个GameObject的Rigidbody(如果没有为null)。
camera 附加到这个GameObject的Camera(如果没有为null)。
light 附加到这个GameObject的Light(如果没有为null)。
animation 附加到这个GameObject的Animation(如果没有为null)。
constantForce 附加到这个GameObject的ConstantForce(如果没有为null)。
renderer 附加到这个GameObject的Renderer(如果没有为null)。
audio 附加到这个GameObject的AudioSource(如果没有为null)。
guiText 附加到这个GameObject的GUIText(如果没有为null)。
networkView 附加到这个GameObject的NetworkView(只读)。(如果没有为null)
guiTexture 附加到这个GameObject的GUITexture(只读)。(如果没有为null)
collider 附加到这个GameObject的Collider(如果没有为null)。
hingeJoint 附加到这个GameObject的HingeJoint(如果没有为null)。
particleEmitter 附加到这个GameObject的ParticleEmitter(如果没有为null)。
gameObject 这个组件所附加的游戏物体。一个组件总是附加到一个游戏物体。
tag 这个游戏物体的标签。
name 对象的名称。
hideFlags 该物体是否被隐藏,保存在场景中或被用户修改?
继承的函数
GetComponent 返回type类型的组件,如果游戏物体上附加了一个,如果没有返回null。
GetComponentInChildren 返回type类型的组件,这个组件位于GameObject或任何它的子物体上,使用深度优先搜索。
GetComponentsInChildren 返回所有type类型的组件,这些组件位于GameObject或任何它的子物体上。
GetComponents 返回GameObject上所有type类型的组件。
CompareTag 这个游戏物体标签为tag?
SendMessageUpwards 在这个游戏物体的每个MonoBehaviour和该行为的祖先上调用名为methodName方法。
SendMessage 在这个游戏物体的每个MonoBehaviour上调用methodName方法。
BroadcastMessage 在这个游戏物体或其任何子上的每个MonoBehaviour上调用methodName方法。
GetInstanceID 返回该物体的实例id。
继承的类函数
operator bool 这个物体存在吗?
Instantiate 克隆original物体并返回这个克隆。
Destroy 移除一个游戏物体,组件或资源。
DestroyImmediate 立即销毁物体obj。强烈建议使用Destroy代替。
FindObjectsOfType 返回所有类型为type的激活物体。
FindObjectOfType 返回第一个类型为type的激活物体。
operator == 比较两个物体是否相同。
operator != 比较两个物体是否不相同。
DontDestroyOnLoad 加载新场景时确保物体target不被自动销毁。
Projector
类,继承自Behaviour。
脚本界面就是一个Projector组件。
这个Projector可用于场景工程中的任何材料——就像一个真实的世界。这类的属性值就是Projector的检查值。
它可以用来执行斑点或投射阴影。你也可以投射纹理动画或渲染纹理在电影场景的另一个部分。所有物体投影的视图在其观点和提供的材料中。
没有快捷方式在游戏对象或者组件来访问Projector,所以你必须使用GetComponent来做:
void Start() {
// 获取projector
Var proj.Projector=GetComponent(Projector);
//使用这个
Proj.nearClipPlane=0.5;
}
参见:projector.component;
变量
◆var aspectRatio:float
描述:投影的长宽比。
这个是投影的宽度除以高度。比为1.0使这个投影为正方形:比为2.0使得宽为高的2倍。
void Start() {
var proj : Projector = GetComponent (Projector);
proj.aspectRatio = 2.0;
}
参见:projector component.
◆var farClipPlane:float
描述:远裁剪面的距离。
投影器将不会影响任何运离这个距离的物体。
void Start() {
var proj : Projector = GetComponent (Projector);
proj.farClipPlane = 20.0;
}
参见:projector component
◆var fieldofView:float
描述:投影的视野,以度为单位。
这是垂直视野:水平FOV取决于aspectRatio。当投射器是正交时fieldOfView被忽略
(参考orthographic)
void Start() {
var proj : Projector = GetComponent (Projector);
proj.fieldOfView = 80.0;
}
参见:project component
◆var ignoreLayers:int
描述:那个物体层将这个投射器忽略。
参见layer mask
缺省为零,没有层被忽略,在ignoreLayers中设置的每个位将使这个层不会被投射器影
响。
void Start() {
var proj : Projector = GetComponent (Projector);
//使投射器忽略默认的(0)层
proj.ignoreLayers = (1<<0);
}
参见:projector component,Layers.
◆var material:material
描述:这个材质将被投射到每个物体上

如果没有设置材质,投射器不会做任何事情,Standard Assets中的Blob.Shadow文件夹包含一个投射器材质的例子
参见:projector component,Material类。
◆var nearClipPlane:float
描述:近裁剪面的距离。
投影器将不会影响任何比这个距离近的物体。
void Start() {
var proj : Projector = GetComponent (Projector);
proj.nearClipPlane = 0.5;
}
参见:projector component;
◆var orthographic:bool
描述:投射是正交的(true)还是透视的(false)?
当正交为true时,投影被orghographicSize定义。
当正交为false时,投射被fieldOfView定义
void Start() {
var proj : Projector = GetComponent (Projector);
proj.orthographic = true;
}
参见:projector component
◆var orthographicSize:float
描述:在正交模式下投射的一半尺寸。
这个为投影体垂直大小的一半。水平投射的大小取决于aspectRatio,投射器不是正交时,
orthographicSize被忽略(参考orthographic)
void Start() {
var proj : Projector = GetComponent (Projector);
proj.orthographic = true;
proj.orthographicSize = 2.0;
}
参见:projector component
继承的成员
继承的变量
enabled 启用Behaviours被更新,禁用Behaviours不被更新。
transform 附加到这个GameObject的Transform(如果没有为null)。
rigidbody 附加到这个GameObject的Rigidbody(如果没有为null)。
camera 附加到这个GameObject的Camera(如果没有为null)。
light 附加到这个GameObject的Light(如果没有为null)。
animation 附加到这个GameObject的Animation(如果没有为null)。
constantForce 附加到这个GameObject的ConstantForce(如果没有为null)。
renderer 附加到这个GameObject的Renderer(如果没有为null)。
guiText 附加到这个GameObject的GUIText(如果没有为null)。
networkView附加到这个GameObject的NetworkView(如果没有为null)。
Collider 附加到这个GameObject的Collider(如果没有为null)。
hingeJoint附加到这个GameObject的HingeJoint(如果没有为null)。
particleEmitter 附加到这个GameObject的ParticleEmitter(如果没有为null)。
gameObject这个组件所附加的游戏物体。一个组件总是附加到一个游戏物体。
Tag 这个游戏的标签。
Name 对象的名称。
hideFlags 该物体是否被隐藏,保存在场景中或被用户修改?
继承的函数
GetComponet 返回type类型的组件,如果游戏物体上附加一个,如果没有返回null。
GetComponentInchildren 返回type类型的组件,这个组件位于GameObject或者任何它的子物体上,使用深度优先搜索。
GetComponentsInchildren 返回所有type类型的组件,这些组件位于GameObject或者任何它的子物体上。
GetComponets返回Gameobject所有type类型的组件。
CompareTag 这游戏物体被标签为tag?
SendMessageUpwards 在这游戏物体的每个MonoBehaviour和该行为的组先上调用名为methodName方法。
SendMessage 在这游戏物体的每个MonoBehaviour上调用名为
methodName方法。
BoradcastMessage 在这个游戏物体或其任何子上的每个MonoBehaviour上调用methodName方法。
GetInstanceID 返回该物体的实例id。
继承的类函数
Operator bool 这个物体存在吗?
Instatiate 克隆original物体并返回这个克隆。
Destroy 移除一个游戏物体,组件或资源。
DestroyImmediate立即销毁物体obj。强烈建议使用Destroy代替
FindObjectsOfType返回所有类型为type的激活物体。
FindObjectOfType返回第一个类型为type的激活物体。
Operator== 比较两个物体是否相同。
Operator!= 比较两个物体是否不相同。
DontDestroyOnLoad 加载新场景时确保物体target不被自动销毁。
Skybox
类,继承自Behaviour
Skybox component的脚本接口
天空盒只有material属性
参见:skybox component
变量
◆var material:Material
描述:该天空盒使用的材质。
参见:skybox component
继承的成员
继承的变量
Enabled 启用Behaviours被更新,禁用Behaviours不被更新。
Transform附加到这个GameObject的Transform(如果没有为null)。
Rigidbody附加到这个GameObject的Rigidbody(如果没有为null)。
Camera 附加到这个GameObject的Camera(如果没有为null)。
Light 附加到这个GameObject的Light(如果没有为null)。
Animation附加到这个GameObject的Animation(如果没有为null)。
constantForce附加到这个GameObject的ConstantForce(如果没有为null)。
Renderer 附加到这个GameObject的Renderer(如果没有为null)。
guiText 附加到这个GameObject的GUIText(如果没有为null)。
networkView附加到这个GameObject的NetworkView(如果没有为null)。
Collider 附加到这个GameObject的Collider(如果没有为null)。
hingeJoint附加到这个GameObject的HingeJoint(如果没有为null)。
particleEmitter 附加到这个GameObject的ParticleEmitter(如果没有为null)。
gameObject这个组件所附加的游戏物体。一个组件总是附加到一个游戏物体。
Tag 这个游戏的标签。
Name 对象的名称。
hideFlags 该物体是否被隐藏,保存在场景中或被用户修改?
继承的函数
GetComponet返回type类型的组件,如果游戏物体上附加一个,如果没有返
回null。
GetComponentInchildren 返回type类型的组件,这个组件位于GameObject或者任何它的子物体上,使用深度优先搜索。
GetComponentsInchildren 返回所有type类型的组件,这些组件位于GameObject或者任何它的子物体上。
GetComponets返回Gameobject所有type类型的组件。
CompareTag 这游戏物体被标签为tag?
SendMessageUpwards 在这游戏物体的每个MonoBehaviour和该行为的组先上调用名为methodName方法。
SendMessage 在这游戏物体的每个MonoBehaviour上调用名为
methodName方法。
BoradcastMessage 在这个游戏物体或其任何子上的每个MonoBehaviour上调用methodName方法。
GetInstanceID 返回该物体的实例id。
继承的类函数
Operator bool 这个物体存在吗?
Instatiate 克隆original物体并返回这个克隆。
Destroy 移除一个游戏物体,组件或资源。
DestroyImmediate立即销毁物体obj。强烈建议使用Destroy代替
FindObjectsOfType返回所有类型为type的激活物体。
FindObjectOfType返回第一个类型为type的激活物体。
Operator== 比较两个物体是否相同。
Operator!= 比较两个物体是否不相同。
DontDestroyOnLoad 加载新场景时确保物体target不被自动销毁。
collider
类,继承自Component
所有碰撞器的基类
参见:BoxCollider,SphereCollider,CapsuleCollider,MeshCollider,PhysicCollider,Rigidbody.
如果你打算经常移动一个碰撞器,建议再附加一个运动学刚体。
变量
◆var attachedRigidbody:Rigidbody
描述:该碰撞器所附加的刚体。
如果碰撞器附加到非刚体上返回null。
碰撞器被自动链接到刚体,这个刚体附加在与碰撞器相同的游戏物体或者父游戏物体上。
//升起附加在碰撞器上的刚体
Collider.attachedRigidbody.AddForce(1,0,1);
◆var bounds:Bounds
描述:碰撞器在世界空间中的包围盒
◆var isTrigger:bool
描述:该碰撞器是一个触发器?
触发器不会与刚体碰撞,当刚体进入或离开这个触发器时,触发器将发送OnTriggerEnter
OnTriggerExit和OnTriggerStay.
//将附加的碰撞器转化为一个触发器
Collider.isTrigger=true;
◆var material:PhysicMaterial
描述:该碰撞器使用的材质。
如果材质被碰撞器共享,它将复制材质并将它赋给碰撞器。
//让碰撞器你冰一样
Collider.material.dynamicFriction=0;
collider.material.staticFricton=0;
◆var sharedMaterial:PhysicMaterial
描述:该碰撞器的共享物理材质。
修改这个材质将改变所有使用这个材质的碰撞器的表面属性。大多数情况下,你只要修改Collider.material。
Var material:PhysicMaterial;
Collider.shareMaterial=material;
函数
◆void ClosestPointOnBounds(position:Vector3):Vector3
描述:到碰撞器包围上最近的点。
这可以用来计算受到爆炸伤害时伤害点数。
var hitPoints=100.0;
void ApplyHitPoint(explosionPos:Vector3,radius:float){
//从爆炸位置到刚体表面的距离
var closetPoint=collider.ClosePointOnBounds(explosionPos);
var distance=Vector3f.Distance(closestPoint,explosionPos);
//伤害点数随着到伤害点的距离而降低
Var hitPoints=1.0-Math.Clamp0|(distance/radius);
//这是我们要用的最终伤害点数。最大为10
hitPoints=10;
}
◆void Raycast(ray:Ray,outhitInfo:RaycastHIt,distance:float):bool
参数
ray 射线的开始点和方向。
hitInfo 如果没有近回真,hitInfo将包含更多关于碰撞器被碰到什么地方的信息(参考:
RaycastHit).
Distance 射线的长度
返回:布尔值-当射线碰到任何碰撞器时为真,否则为假。
描述:投射一个Ray,它忽略所有碰撞器除了这个。
同上使用ray.origin和ray.direction而不是origin和disrection.
var ray=Camera.main.ScreenPointToRay(Input.mousePostion);
var hit:RaycastHit;
if(collider.Raycast(ray,hit,100){
Debug.drawLine(ray.origin,hit.point);
}
消息传递
◆void OnCollisionEnter(collisionInfo:Collision):void
描述:当这个碰撞器/刚体开始触碰另一个刚体/碰撞器时OnCollisionEnter被调用。
相对于OnTriggerEnter,OnCollisionEnter传递Collision类而不是Collider.Collision类包含接触点,碰撞器速度等细节。如果在函数中不使用CollisionInfo,省略collisionInfo参数以避免不必要的计算。注意如果碰撞器附加了一个非动力学刚体,也只发送碰撞事件。
◆Void OnCollisionEnter(collision:Collision){
//调试绘制所有的接触点和法线
for(var contact:ContacePoint in collision.contacts){
Debug.DrawRay(contact.point,contact.normal,color.white);
}
//如果碰撞物体有较大的冲击就播放声音
If(collision.relativeVelocity.magnitude.2)
Audio.Play();
}
//一枚手榴弹
//在击中一个表面时初始化一个爆炸预设
//然后销毁它
var exploionPrefab:Transform;
void OnCollisionEnter(collision:Collision){
//旋转这个物体使y轴面向沿着表面法线的方向
var contact=collision.contact[0];
var rot=Quaternion.FromToRotation(Vector3.up,contact.normal);
var pos=contact.point;
Instantiate(exploionPrefab,pos,rot);
Destroy(gameObject);
}
◆void OnCollisionExit(collisionInfo:Collision):void
描述:当这个碰撞器/刚体停止触碰另一个刚体/碰撞器时OnCollisionExit被调用。
相当于OnTriggerExit,OnCollisionExit传递Collision类而不是Collider.Collision类包含接触
点,碰撞速度等细节。如果在函数中不使用collisionInfo,省略collisionInfo参数以避免不必要的计算,注意如果碰撞器附加了一个非动力学刚体,也只发关碰撞事件。
void OnCollisionExit(collisionInfo:Collision){
print(“No longer in contact with”+collisionInfo.transform.name);
}
◆void OnCollisionStay(collisionInfo:Collision):void
描述:对于每个与刚体/碰撞器相触碰的碰撞器/刚体,OnCollisionStay将在每一帧中被调用。
相当于OnTriggerStay,OnCollisionStay传递Collision类而不是Collider.Collision类包含接
触点,碰撞速度等细节。如果在函数中不使用collisionInfo,省略collisionInfo参数以避免
不必要的计算。注意如果碰撞器附加了一个非动力学刚体,也只发送碰撞事件。
void OnCollisionStay(collisionInfo:Collision){
//调试绘制所有的接触点和法线
for(var contact:ContactPoint in collision.contacts){
Debug.DrawRay(contact.point,contact.normal,color.white);
}
}
◆void OnTriggerEnter(other:Collider):void
描述:当这个Collider other进入trigger时OnTriggerEnter被调用。
这个消息被发送到这个触发器碰撞器和接触到触发器的刚体(或者是碰撞器如果没有刚体)。注意如果碰撞器附加了一个

刚体,也只发送触发器事件。
//销毁所有进入该触发器的物体
void OnTriggerEnter(other:Collider){
Destroy(other.gameObject);
}
◆void OnTriggerExit(other:Collider):void
描述:当这个Collider other停止触碰trigger时OnTriggerExit被调用。
这个消息被发送到触发器和拉触到这个触发器的碰撞器。注意如果碰撞器附加了一个
刚体,也只发送触发器事件。
销毁所有离开该触发器的物体
void OnTriggerExit(other:Collider){
Destroy(other.gameObject);
}
◆void OnTriggerStay(other:collider):void
描述:对于每个Collider other,当它触碰到trigger 时,OnTriggerStay会在每一帧中都被调用。
这个消息被发送到触发器和接触到这个触发器的碰撞器。注意如果碰撞器附加了一个刚体,也只发送触发器事件。
//对所进入这个触发器的刚体使用一个向上的力
void OnTriggerStay(other:Collider){
if(other.atachedRigidbody){
other.attachedRigidbody.AddForce(Vector3.up*10);
}
}
继承的成员
继承的变量
transform附加到这个GameObject的Transform(如果没有为null)。
rigidbody附加到这个GameObject的Rigidbody(如果没有为null)。
camera 附加到这个GameObject的Camera(如果没有为null)。
light 附加到这个GameObject的Light(如果没有为null)。
animation附加到这个GameObject的Animation(如果没有为null)。
constantForce附加到这个GameObject的ConstantForce(如果没有为null)。
Renderer 附加到这个GameObject的Renderer(如果没有为null)。
guiText 附加到这个GameObject的GUIText(如果没有为null)。
networkView附加到这个GameObject的NetworkView(如果没有为null)。
Collider 附加到这个GameObject的Collider(如果没有为null)。
hingeJoint附加到这个GameObject的HingeJoint(如果没有为null)。
particleEmitter 附加到这个GameObject的ParticleEmitter(如果没有为null)。
gameObject这个组件所附加的游戏物体。一个组件总是附加到一个游戏物体。
tag 这个游戏的标签。
name 对象的名称。
hideFlags 该物体是否被隐藏,保存在场景中或被用户修改?
继承的函数
GetComponet返回type类型的组件,如果游戏物体上附加一个,如果没有返
回null。
GetComponentInchildren 返回type类型的组件,这个组件位于GameObject或者任何它的子物体上,使用深度优先搜索。
GetComponentsInchildren 返回所有type类型的组件,这些组件位于GameObject或者任何它的子物体上。

GetComponets返回Gameobject所有type类型的组件。
CompareTag 这游戏物体被标签为tag?
SendMessageUpwards 在这游戏物体的每个MonoBehaviour和该行为的组先上调用名为methodName方法。
SendMessage 在这游戏物体的每个MonoBehaviour上调用名为
methodName方法。
BoradcastMessage 在这个游戏物体或其任何子上的每个MonoBehaviour上调用methodName方法。
GetInstanceID 返回该物体的实例id。
继承的类函数
Operator bool 这个物体存在吗?
Instatiate 克隆original物体并返回这个克隆。
Destroy 移除一个游戏物体,组件或资源。
DestroyImmediate立即销毁物体obj。强烈建议使用Destroy代替
FindObjectsOfType返回所有类型为type的激活物体。
FindObjectOfType返回第一个类型为type的激活物体。
Operator== 比较两个物体是否相同。
Operator!= 比较两个物体是否不相同。
DontDestroyOnLoad 加载新场景时确保物体target不被自动销毁。

BosCollider

类,继承自Collider
一个盒状的简单碰撞器
参见:SphereCollider,copsuleCollider,PhysicMaterial,Rigidbody
变量
◆var center:vector3
描述:box的中心,基于物体局部空间。
//重置中心到变换的位置
collider.center=Vector3.zero;
◆var size:Vector3
描述:box的尺寸,基于物体局部空间
该box的尺寸将随着变换的缩放面缩放。
//使这个box碰撞器变长
collider.size=Vector3(10,1,1);
继承的成员
继承的变量
attachedRigidbody 该碰撞器所附加的刚体。
isTrigger该碰撞器是一个触发器?
material 该碰撞器使用的材质。
sharedMaterial 该碰撞器的共享物体材质。
bounds 碰撞器在世界空间中包围盘。
Transform附加到这个GameObject的Transform(如果没有为null)。
Rigidbody附加到这个GameObject的Rigidbody(如果没有为null)。
Camera 附加到这个GameObject的Camera(如果没有为null)。
Light 附加到这个GameObject的Light(如果没有为null)。
Animation附加到这个GameObject的Animation(如果没有为null)。
constantForce附加到这个GameObject的ConstantForce(如果没有为null)。
Renderer 附加到这个GameObject的Renderer(如果没有为null)。
audio 附加到这个GameObject的AudioSourec(如果没有为null)。
guiText 附加到这个GameObject的GUIText(如果没有为null)。
networkView附加到这个GameObject的NetworkView(如果没有为null)。
Collider 附加到这个GameObject的Collider(如果没有为null)。
hingeJoint附加到这个GameObject的HingeJoint(如果没有为null)。
particleEmitter 附加到这个GameObject的ParticleEmitter(如果没有为null)。
gameObject这个组件所附加的游戏物体。一个组件总是附加到一个游戏物体。
Tag 这个游戏的标签。
Name 对象的名称。
hideFlags 该物体是否被隐藏,保存在场景中或被用户修改?
继承的函数
ClosestPointOnBounds 附加碰撞器到包围盒最近的点。
Raycast 投射一个Ray,它忽略所有的碰撞器除了这个。
GetComponet 返回type类型的组件,如果游戏物体上附加一个,如果没有返回null。
GetComponentInchildren 返回type类型的组件,这个组件位于GameObject或者任何它的子物体上,使用深度优先搜索。
GetComponentsInchildren 返回所有type类型的组件,这些组件位于GameObject或者任何它的子物体上。
GetComponets返回Gameobject所有type类型的组件。
CompareTag 这游戏物体被标签为tag?
SendMessageUpwards 在这游戏物体的每个MonoBehaviour和该行为的组先上调用名为methodName方法。
SendMessage 在这游戏物体的每个MonoBehaviour上调用名为
methodName方法。
BoradcastMessage 在这个游戏物体或其任何子上的每个MonoBehaviour上调用methodName方法。
GetInstanceID 返回该物体的实例id。
继承的消息传递
OnTriggerEnter当这个Collider other进入trigger进OnTriggerEnter被调用。

OnTriggerExit 当这个Collider other停止触碰trigger时OnTriggerExit被调用。
OnTriggerStay 对于每个Collider other,当它触碰到trigger时,OnTriggerStay会
在每一帧中都被调用。
OnCollisionEnter 当这个碰撞器/刚体开始触碰另一个刚体/碰撞器时
OnCollisionEnter被调用。
OnCollisionExit 当这个碰撞器/刚体停止触碰另一个刚体/碰撞器时OnCollisionExit
被调用
OnCollisionStay 对于每个与刚体/碰撞器相触碰的碰撞器/刚体OnCollisionStay将在每
一帧中被调用。
继承的类函数
Operator bool 这个物体存在吗?
Instatiate 克隆original物体并返回这个克隆。
Destroy 移除一个游戏物体,组件或资源。
DestroyImmediate立即销毁物体obj。强烈建议使用Destroy代替
FindObjectsOfType返回所有类型为type的激活物体。
FindObjectOfType返回第一个类型为type的激活物体。
Operator== 比较两个物体是否相同。
Operator!= 比较两个物体是否不相同。
DontDestroyOnLoad 加载新场景时确保物体target不被自动销毁。
CapsuleCollider
类,继承自Collider
一个胶囊状的简单碰撞器
Capsules是术状的并在每端有一个半球。
参见:BoxCollider,SphereCollder,PhysicMaterial,Rigidbody
变量
◆var center:vector3
描述:胶囊的中心,基于物体的局部空间。
//重置中心到变换的位置
collider.center=Vector3.zero;
◆var direction:int
描述:胶囊的方向
0->胶囊的高度沿着x轴。1->胶囊的高度沿着y轴。2->胶囊的高度沿着z轴。
//使胶囊的高度沿着x轴
collider.direction=0;
◆var height:float
描述:胶囊的高度,基于物体的局部空间
该胶囊的高度将随着变换的缩放而缩放。注意height为包含两端两个半球的实际高度。
collider.height=5;
◆var radius:float
描述:球的半径,基于物体的局部空间。
该胶囊的半径随着变换的缩放而缩放。
collider.radius=1;
继承的成员
继承的变量
attachedRigidbody 该碰撞器所附加的刚体。
isTrigger 该碰撞器是一个触发器?
material 该碰撞器使用的材质。
sharedMaterial 该碰撞器的共享物体材质。
bounds 碰撞器在世界空间中包围盘。
Transform附加到这个GameObject的Transform(如果没有为null)。
Rigidbody附加到这个GameObject的Rigidbody(如果没有为null)。
Camera 附加到

unity脚本学习3相关推荐

  1. Unity 3D学习视觉脚本无需编码即可创建高级游戏

    在本课程中,您将学习如何在Unity中使用可视化脚本(以前称为Bolt)以及如何在不编写一行代码的情况下创建自己的高级游戏所需的一切.本课程将教你如何掌握可视化脚本,即使你以前没有任何关于unity或 ...

  2. Unity(一)Unity脚本程序开发

    最近实验室有AR的项目,需要用Unity进行开发,一边学习一边把知识总结下来.在开始项目之前讨论过项目的技术方案,用Unity开发还是用Unreal开发,本人在两种游戏引擎上都有过初步的接触,认为Un ...

  3. [Unity] 战斗系统学习 4:FlowCanvas 中的 LatentActionNode

    [Unity] 战斗系统学习 2:FlowCanvas 中的 SubGraph 1. 并行执行 FlowScript 可能的魔改方向 其实我原本是想魔改 FlowCanvas 使其支持并行 FlowS ...

  4. Unity VR学习:第一人称射击游戏(1)

    Unity VR学习:第一人称射击游戏(1) 1.封装标签和场景淡入淡出效果实现 (1) 封装标签 1.标签有Player,Enemy,GameController,Fader(画布),MainCam ...

  5. 学习Unity需要学习哪些编程语言

    答案是C#! Unity曾支持过三种语言的开发:C#,UnityScript(接近于JavaScript),Boo.但是,截止到今天,最新的Unity 2018版本已经完全弃用了UnityScript ...

  6. [Unity 学习] Unity 入门学习及第一个游戏

    [Unity 学习] Unity 入门学习及第一个游戏 跟着教程做的一个小游戏,基本上说就算我这样的零基础,两个小时就能实现. 主要就是熟悉一下 C#和 Unity,做一个能跑的东西. 简单的 Dem ...

  7. Unity 2D 学习笔记:游戏实例Sunnyland

    Unity 2D 学习笔记:游戏实例Sunnyland 01安装软件&导入素材 02编辑素材&Tilemap 03图层layer&角色建立 04角色移动 05角色方向& ...

  8. 【Unity3D 教程系列第 10 篇】Unity 脚本中的生命周期流程图

    这是[Unity3D 教程系列第 10 篇],如果觉得有用的话,欢迎关注专栏. 文章目录 一:生命周期流程图 二:常用的生命周期函数 三:脚本初始化和销毁 四:脚本的动态添加与静态添加 五:Awake ...

  9. [Unity/URP学习]风格化水体渲染(一)

    风格化水体的实现内容 文章目录 风格化水体的实现内容 风格化水体实现过程 1.水体颜色 1.1风格化水体颜色渐变 1.2水体深浅区域 1.2.1开启深度纹理 1.2.2深度纹理采样 1.3水体透明度 ...

最新文章

  1. centos exfat格式U盘不支持问题
  2. Simulink仿真---PMSM滞环电流控制仿真模型学习
  3. C++ opengl 方向光
  4. NET Core 3.0 项目中使用 AutoFac
  5. Java订单交易_Java实现获取105发卡平台的订单信息
  6. HDU1754 I Hate It (线段树单点修改+区间查询)
  7. Scala简介、安装、函数、面向对象
  8. lena.raw图片文件下载及打开方式
  9. 几种比较好用的连接PostgreSQL的客户端
  10. Jmeter使用CSV文件读取大量测试数据
  11. 自己收集的全国行政区划,具体到县级,不包括过直辖市和特别行政区
  12. 2022-车道线检测综述
  13. Misc_PNG高宽详解
  14. OLED多级菜单记录
  15. chrome证书错误问题
  16. python PIL库对图片按比例进行分割
  17. 摄影师的“伟大”!分享一组高大上的“照骗”的前期与后期
  18. 山东畜牧兽医职业学院计算机考试,山东畜牧兽医职业学院计算机自编word15套试题11Word模拟试题(1-15).doc...
  19. 手动解除fail2ban的ip
  20. 短视频脚本如何制作?节奏要会把握,视觉要有冲击

热门文章

  1. Netty客户端与服务端
  2. 在html中引入谷歌地图
  3. docker命令使用详解
  4. 电脑连上wifi显示网络正常 但是网页打不开
  5. MATLAB之最小二乘法
  6. 华工简述微型计算机系统的组成,华工 计算机组成原理随堂.doc
  7. android打开网址两种方法
  8. npm安装私有指定路径的依赖包
  9. others_shellcode
  10. 论文解读 | LGD:用于物体检测的标签引导自蒸馏