Unity3D脚本参考1

一、 脚本概览

这是一个关于Unity内部脚本如何工作的简单概览。
Unity内部的脚本,是通过附加自定义脚本对象到游戏物体组成的。在脚本对象内部不同志的函数被特定的事件调用。最常用的列在下面:
Update:
这个函数在渲染一帧之前被调用,这里是大部分游戏行为代码被执行的地方,除了物理代码。
FixedUpdate:
这个函数在每个物理时间步被调用一次,这是处理基于物理游戏的地方。
在任何函数之外的代码:
在任何函数之外的代码在物体被加载的时候运行,这个可以用来初始化脚本状态。
注意:文档的这个部份假设你是用Javascript,参考用C#编写获取如何使用C#和Boo编写脚本的信息。
你也能定义事件句柄,它们的名称都以On开始,(例如OnCollisionEnter),为了查看完整的预定义事件的列表,参考MonoBehaviour 文档。

概览:常用操作
大多数游戏物体的操作是通过游戏物体的Transform或Rigidbody来做的,在行为脚本内部它们可以分别通过transform和rigidbody访问,因此如果你想绕着Y轴每帧旋转5度,你可以如下写:
void Update(){
transform.Rotate(0,5,0);
}
如果你想向前移动一个物体,你应该如下写:
void Update(){
transform.Translate(0,0,2);
}
概览:跟踪时间
Time类包含了一个非常重要的类变量,称为deltaTime,这个变量包含从上一次调用Update或FixedUpdate(根据你是在Update函数还是在FixedUpdate函数中)到现在的时间量。
所以对于上面的例子,修改它使这个物体以一个恒定的速度旋转而不依赖于帧率:
void Update(){
transform.Rotate(0,5Time.deltaTime,0);
}
移动物体:
void Update(){
transform. Translate (0, ,0,2
Time.deltaTime);
}
如果你加或是减一个每帧改变的值,你应该将它与Time.deltaTime相乘。当你乘以Time.deltaTime时,你实际的表达:我想以10米/秒移动这个物体不是10米/帧。这不仅仅是因为你的游戏将独立于帧而运行,同时也是因为运动的单位容易理解。( 米/秒)
另一个例子,如果你想随着时间增加光照的范围。下面的表达式,以2单位/秒改变半
径。
void Update (){
light.range += 2.0 * Time.deltaTime;
}
当通过力处理刚体的时候,你通常不必用Time.deltaTime,因为引擎已经为你考虑到了这一点。
概览:访问其他组件

组件被附加到游戏物体,附加Renderer到游戏物体使它在场景中渲染,附加一个Camera使它变为相机物体,所有的脚本都是组件,因为它们能被附加到游戏物体。
最常用的组件可以作为简单成员变量访问:
Component 可如下访问
Transform transform
Rigidbody rigidbody
Renderer renderer
Camera camera (only on camera objects)
Light light (only on light objects)
Animation animation [动画播放]
Collider collider
…等等。
对于完整的预定义成员变量的列表。查看Component,Behaviour和MonnoBehaviour类文档。如果游戏物体没有你想取的相同类型的组件,上面的变量将被设置为null。
任何附加到一个游戏物体的组件或脚本都可以通过GetComponent访问。
transform.Translate(0,3,0);
//等同于
GetComponent(Transform).Translate(0, 1, 0);
注意transfom和Transform之间大小写的区别,前者是变量(小写),后者是类或脚本名称(大写)。大小写不同使你能够从类和脚本名中区分变量。

应用我们所学,你可以使用GetComponent找到任何附加在同一游戏物体上的脚本和组件,请注意要使用下面的例子能够工作,你需要有一个名为OtherScript的脚本,其中包含一个DoSomething函数。OtherScript脚本必须与下面的脚本附加到相同的物体上。
//这个在同一游戏物体桑找到名为OtherScript的脚本
//并调用它上加的DoSomething
void Update(){
otherScript = GetComponent(OtherScript);
otherScript.DoSomething();
}
/

概览:访问其它游戏物体
大多数高级的代码不仅需要操作一个物体,Unity脚本接口有各种方法来找到并访问其他游戏物体和组件。在下面,我们假定有个一名为OtherScript,js的脚本附加到场景的游戏物体上。
var foo = 5;
void DoSomething ( param : String) {
print(param + " with foo: " + foo);
}
1.通过检视面板赋值引用
你可以通过检视面板赋值变量到任何物体
//变换拖动到target的物体
var target : Transform;
void Update ()
{
target.Translate(0, 1, 0);
}
你也可以在检视面板中公开到其他物体的引用,下面你可以拖动一个包含的游戏物体到检视面板中的target槽。
//设置在检视面板中赋值的target变量上的foo,调用DoSomething
var target : OtherScript;
void Update ()
{
//设置target物体的foo变量
target.foo = 2;
// 调用target上的DoSomething
target.DoSomething(“Hello”);
}
2.通过物体层次定位
对于一个已经存在的物体,可以通过游戏物体的Transform组件来找到子和父物体;
//找到脚本所附加的
//游戏物体的子“Hand”
transform.Find(“Hand”).Translate(0, 1, 0);
一旦在层次视图中找到这个变换,你可以使用GetComponent来获取其他脚本,
//找到名为“Hand”的子
//在附加到它上面的OtherScript中,设置foo为2;
transform.Find(“Hand”).Translate(0, 1, 0);
//找到名为“Hand”的子
//然后应用一个力到附加在hand上的刚体
transform.Find(“Hand”).GetComponent(OtherScript).DoSomething(“Hello”);
// 找到名为“Hand”的了
// 然后应用一个力到附加在hand上的刚体
transform.Find(“Hand”).rigidbody.AddForce(0, 10, 0);
你可以循环所有的子,
//变换的所有子向上移动10个单位
for (var child : Transform in transform)
{
child.Translate(0, 1, 0);
}
参考Transform类文档获取更多信息。
3.根据名称或标签定位.
你可以使用GameObject.FindWithTag和GameObject.FindGameObjectsWithTag搜索具有特定标签的游戏物体,使用GameObject.Find根据名称查找物体。
void Start ()
{
// 按照名称
var go = GameObject.Find(“SomeGuy”);
go.transform.Translate(0, 1, 0);
// 按照标签

var player = GameObject.FindWithTag(“Player”);
player.transform.Translate(0, 1, 0);
}
你可以在结果上使用GetComponent,在找到的游戏物体上得到任何脚本或组件。
void Start ()
{
// 按名称
var go = GameObject.Find(“SomeGuy”);
go.GetComponent(OtherScript).DoSomething();

// 按标签
var player = GameObject.FindWithTag(“Player”);
player.GetComponent(OtherScript).DoSomething();
}
一些特殊的物体有快捷方式,如主相机使用Camera.main。
4.作为参数传递
一些事件消息在事件包含详细信息。例如,触发器事件传递碰撞物体的Collider组件到处理函数。
OnTriggerStay给我们一个到碰撞器的引用。从这个碰撞器我们可以获取附加到其上的刚体。
void OnTriggerStay( other : Collider ) {
// 如果另一个碰撞器也有一个刚体
// 应用一个力到它上面
if (other.rigidbody) {
other.rigidbody.AddForce(0, 2, 0);
}
}
或者我们可以通过碰撞器获取附加在同一个物体上的任何组件。
void OnTriggerStay( other : Collider ) {
// 如果另一个碰撞器附加了OtherScript
// 调用它上面的DoSomething
// 大多数时候碰撞器不会附加脚本
// 所以我们需要首先检查以避免null引用异常
if (other.GetComponent(OtherScript)) {
other.GetComponent(OtherScript).DoSomething();
}
}
注意通过上述例子中的other变量,你可以访问碰撞物体中的任何组件。
5.一种类型的所有脚本
使用Object.FindObjectsOfType找到所有具有相同类或脚本名称的物体,或者使用Object.FindObjectOfType.找到这个类型的第一个物体。
void Start ()
{
// 找到场景中附加了OtherScript的任意一个游戏物体
var other : OtherScript = FindObjectOfType(OtherScript);
other.DoSomething();
}
概览:向量
Unity使用Vector3类同一表示全体3D向量,3D向量的不同组件可以通过想x,y和z成员变量访问。
var aPosition : Vector3;
aPosition.x = 1;
aPosition.y = 1;
aPosition.z = 1;
你也能够使用Vector3构造函数来同时初始化所有组件。
var aPosition = Vector3(1, 1, 1);
Vector3也定义了一些常用的变量值。
var direction = Vector3.up; // 与 Vector3(0, 1, 0);相同
单个向量上的操作可以使用下面的方式访问:
someVector.Normalize();
使用多个向量的操作可以使用Vector3类的数;
theDistance = Vector3.Distance(oneVector, otherVector);
(注意你必须在函数名之前写Vector3来告诉JavaScript在哪里找到这个函数,这适用于所有类函数)
你也可以使用普通数学操作来操纵向量。
combined = vector1 + vector2;
查看Vector3类文档获取完整操纵和可用属性的列表。

概览:成员变量 & 全局变量
定义在任何函数之外的变量是一个成员变量。在Unity中这个变量可以通过检视面板来访问,任何保存在成员变量中的值也可以自动随工程保存。
var memberVariable = 0.0;
上面的变量将在检视面板中显示为名为"Member Variable"的数值属性。
如果你设置变量的类型为一个组件类型(例如Transform, Rigidbody, Collider,任何脚本名称,等等)然后你可以在检视面板中通过拖动一个游戏物体来设置它们。
var enemy : Transform;
void Update()
{
if ( Vector3.Distance( enemy.position, transform.position ) < 10 );
print(“I sense the enemy is near!”);
}
}
你也可以创建私有成员变量。私有成员变量可以用来存储那些在该脚本之外不可见的状态。私有成员变量不会被保存到磁盘并且在检视面板中不能编辑。当它被设置为调试模式时,它们在检视面板中可见。这允许你就像一个实时更新的调试器一样使用私有变量。
private var lastCollider : Collider;
void OnCollisionEnter( collisionInfo : Collision ) {
lastCollider = collisionInfo.other;
}
全局变量
你也可以使用static关键字创建全局变量
这创造了一个全局变量,名为someGlobal
// 'TheScriptName.js’中的一个静态变量
static var someGlobal = 5;
// 你可以在脚本内部像普通变量一样访问它
print(someGlobal);
someGlobal = 1;
为了从另一个脚本访问它,你需要使用这个脚本的名称加上一个点和全局变量名。
print(TheScriptName.someGlobal);
TheScriptName.someGlobal = 10;

概览:实例化
实例化,复制一个物体。包含所有附加的脚本和整个层次。它以你期望的方式保持引用。到外部物体引用的克隆层次将保持完好,在克隆层次上到物体的引用映射到克隆物体。
实例化是难以置信的快和非常有用的。因为最大化地使用它是必要的。
例如, 这里是一个小的脚本,当附加到一个带有碰撞器的刚体上时将销毁它自己并实例化一个爆炸物体。
var explosion : Transform;
// 当碰撞发生时销毁我们自己
// 并生成给一个爆炸预设
void OnCollisionEnter (){
Destroy (gameObject);
var theClonedExplosion : Transform;
theClonedExplosion = Instantiate(explosion, transform.position, transform.rotation);
}
实例化通常与预设一起使用

概览:Coroutines & Yield
在编写游戏代码的时候,常常需要处理一系列事件。这可能导致像下面的代码。
private var state = 0;
void Update()
{
if (state == 0) {
// 做步骤0
state = 1;
return;
}
if (state == 1) {
// 做步骤1
state = 2;
return;
}
// …
}
更方便的是使用yield语句。yield语句是一个特殊类型的返回,这个确保在下次调用时该函数继续从该yield语句之后执行。
while(true) {
// 做步骤0
yield; //等待一帧
// 做步骤1
yield; //等待一帧
// …
}
你也可以传递特定值给yield语句来延迟Update函数的执行,直到一个特定的事件发生。
// 做一些事情
yield WaitForSeconds(5.0); //等待5秒
//做更多事情…
可以叠加和连接coroutines。
这个例子执行Do,在调用之后立即继续。
Do ();
print (“This is printed immediately”);
void Do ()
{
print(“Do now”);
yield WaitForSeconds (2);
print(“Do 2 seconds later”);
}
这个例子将执行Do并等待直到它完成,才继续执行自己。
//链接coroutine
yield StartCoroutine(“Do”);
print(“Also after 2 seconds”);
print (“This is after the Do coroutine has finished execution”);
void Do ()
{
print(“Do now”);
yield WaitForSeconds (2);
print(“Do 2 seconds later”);
}
任何事件处理句柄都可以是一个coroutine
注意你不能在Update或FixedUpdate内使用yield,但是你可以使用StartCoroutine来开始一个函数。
参考YieldInstruction, WaitForSeconds, WaitForFixedUpdate, Coroutine and MonoBehaviour.StartCoroutine获取更多使用yield的信息。

概览:用C#编写脚本
除了语法,使用C#或者Boo编写脚本还有一些不同。最需要注意的是:
1.从MonoBehaviour继承
所有的行为脚本必须从MonoBehaviour继承(直接或间接)。在Javascript中这自动完成,但是必须在C#或Boo脚本中显示申明。如果你在Unity内部使用Asset -> Create -> C Sharp/Boo Script菜单创建脚本,创建模板已经包含了必需的定义。
public class NewBehaviourScript : MonoBehaviour {…} // C#
class NewBehaviourScript (MonoBehaviour): … # Boo
2.使用Awake或Start函数来初始化
Javascript中放置在函数之外的代码,在C#或Boo中要放置在Awake或Start中。
Awake和Start的不同是Awake在场景被加载时候运行,而Start在第一次调用Update或FixedUpdate函数之前被调用,所有Awake函数在任何Start函数调用之前被调用。
3.类名必须与文件名相同
Javascript中,类名被隐式地设置为脚本的文件名(不包含文件扩展名)。在c#和Boo中必须手工做。
4.在C#中Coroutines有不同语法。
Coroutines必有一个IEnumerator返回类型,并且yield使用yield return… 而不是yield…
using System.Collections;
using UnityEngine;
public class NewBehaviourScript : MonoBehaviour {
// C# coroutine
IEnumerator SomeCoroutine ()
{
// 等一帧
yield return 0;
//等两秒
yield return new WaitForSeconds (2);
}
}
5.不要使用命名空间
目前Unity还不支持将代码放置在一个命名空间中,这个需要将会出在未来的版本中。
6.只有序列化的成员变量会显示在检视面板中
私有和保护成员变量只在专家模式中显示,属性不被序列化或显示在检视面板中。
7.避免使用构造函数
不要在构造函数中初始化任何变量,使用Awake或Start实现这个目的。即使是在编辑模式中Unity也自动调用构造函数,这通常发生在一个脚本被编译之后,因为需要调用构造函数来取向一个脚本的默认值。构造函数不仅会在无法预料的时刻被调用,它也会为预设或未激活的游戏物体调用。
单件模式使用构造函数可能会导致严重的后果,带来类似随机null引用异常。
因此如果你想实现,如,一个单件模式,不要使用构造函数,而是使用Awake。其实上,没有理由一定要在继续自MononBehaviour类的构造函数中写任何代码。

概览:最重要的类
Javascript中可访问的全局函数或C#中的基类
移动/旋转物体
动画系统
刚体
FPS或第二人称角色控制器
概览:性能优化
1.使用静态类型
在使用Javascript时最重要的优化是使用静态类型而不是动态类型,Unity使用一种叫做类型推理的技术来自自动转换Javascript为静态类型编码而不需要你做任何工作。
var foo=5;
在上面的例子里foo会自动被推断为一个整型值。因此,Unity可能使用大量的编译时间来优化。而不使用耗时的动态名称变量查找等。这就是为什么Unity比其他在JavaScript的实现平均快20倍的原因之一。
唯一的问题是,有时并非一切都可以做类型推断。Unity将会为这些变量重新使用动态类型。通过回到动态类型,编写JavaScript代码很简单。但是这也使得代码运行速度较慢。
让我们看一些例子:
void Start ()
{
var foo = GetComponent(MyScript);
foo.DoSomething();
}
这里foo将是动态类型,因此调用DoSomething函数将使用较长时间,因为foo的类型是未知的,它必须找出它是否支持DoSomething函数,如果支持,调用它。
void Start ()
{
var foo : MyScript = GetComponent(MyScript);
foo.DoSomething();
}
这里我们强制foo为指定类型,你将获得更好的性能。
2.使用#pragma strict
当然现在问题是,你通常没有意识到你在使用动态类型。#pragma strict解决了这个!简单的在脚本顶部添加#pragma strict。然后,unity将在脚本中禁用动态类型,强制使用静态类型,如果一个类型未知。Unity将报告编译错误。那么在这种情况下foo将在编译时产生一个错误:
#pragma strict
void Start ()
{
var foo = GetComponent(MyScript);
foo.DoSomething();
}
3.缓存组件查找
另一个优化是组件缓存。不幸的是该优化需要一点编码,并且不一定是值得的,但是如
果你的脚本是真的用了很长时间了,你需要把最后一点表现出来,这是一个很好的优化。
当你访问一个组件通过GetComponent或访问变量,Unity会通过游戏对象找到正确的组件。这一次可以很容易地通过缓存保存在一个私有变量里引用该组件。
简单地把这个:
void Update ()
{
transform.Translate(0, 0, 5);
}
变成:
private var myTransform : Transform;
void Awake ()
{
myTransform = transform;
}
void Update ()
{
myTransform.Translate(0, 0, 5);
}
后者的代码将运行快得多,因为Unity没有找到变换在每一帧游戏组件中的对象。这同样适用于脚本组件,在你使用GetComponent代替变换或者其它的东西。
4.使用内置数组
内置数组的速度非常快,所以请使用它们。
而整列或者数组类更容易使用,因为你可以很容易地添加元素,他们几乎没有相同的速度。内置数组有一个固定的尺寸,但大多数时候你事先知道了最大的大小在可以只填写了以后。关于内置数组最好的事情是,他们直接嵌入在一个结构紧凑的缓冲区的数据类型没有任何额外的类型信息或其他开销。因此,遍历是非常容易的,作为一切缓存在内存中的线性关系。
private var positions : Vector3[];
void Awake ()
{
positions = new Vector3[100];
for (var i=0;i<100;i++)
positions[i] = Vector3.zero;
}
5.如果你不需要就不要调用函数
最简单的和所有优化最好的是少工作量的执行。例如,当一个敌人很远最完美的时间就是敌人入睡时可以接受。直到玩家靠近时什么都没有做。这是种缓慢的处理方式的情况:
void Update ()
{
// 早期进行如果玩家实在是太遥远。
if (Vector3.Distance(transform.position, target.position) > 100)
return;
perform real work work…
}
这不是一个好主意,因为Unity必须调用更新功能,而你正在执行工作的每一个帧。一个比较好的解决办法是禁用行为直到玩家靠近。有3种方法来做到这一点:
1.使用OnBecameVisible和OnBecameInvisible。这些回调都是绑到渲染系统的。只要任何相机可以看到物体,OnBecameVisible将被调用,当没有相机看到任何一个,OnBecameInvisible将被调用。这种方法在很多情况下非常有用,但通常在AI中并不是特别有用,因为只要你把相机离开他们敌人将不 可用。
void OnBecameVisible () {
enabled = true;
}
void OnBecameInvisible ()
{enabled = false;
}
2.使用触发器。一个简单的球形触发器会工作的非常好。一旦你离开这个影响球你将得到OnTriggerEnter/Exit调用。
void OnTriggerEnter (c : Collider)
{
if (c.CompareTag(“Player”))
enabled = true;
}
void OnTriggerExit (c : Collider)
{
if (c.CompareTag(“Player”))
enabled = false;
}
3.使用协同程序。Update调用的问题是它们每帧中都发生。很可能会只需要每5秒检检查一次到玩家的距离。这应该会节省大量的处理周期。
概览:脚本编译(高级)
Unity编译所有的脚本为.NET dll文件,.dll将在运行时编译执行。
这允许脚本以惊人的速度执行。这比传统的javascript快约20倍。比原始的C++代码慢大约50%。在保存的时候,Unity将花费一点时间来编译所有脚本,如果Unity还在编译。你可以在Unity主窗口的右下角看到一个小的旋转进度图标。
脚本编译在4个步骤中执行:
1.所有在"Standard Assets", “Pro Standard Assets” 或 “Plugins"的脚本被首先编译。
在这些文件夹之内的脚本不能直接访问这些文件夹之外脚本。
不能直接引用或它的 变量,但是可以使用GameObject.SentMessage与它们通信。
2.所有在"Standard Assets/Editor”, “Pro Standard Assets/Editor” 或 "Plugins/Editor"的脚本被首先编译。
如果你想使用UnityEditor命名空间你必须放置你的脚本在这些文件夹中,例如添加菜单项或自定义的向导,你都需要放置脚本到这些文件夹。
这些脚本可以访问前一组中的脚本。
3.然后所有在"Editor"中的脚本被编译。
如果你想使用UnityEditor命名空间你必须放置你的脚本在这些文件夹中。例如添加菜单单项或自定义的向导,你都需要放置脚本到这些文件夹。
这些脚本可以访问所有前面组中的脚本,然而它们不能访问后面组中的脚本。
这可能会是一个问题,当编写编辑器代码编辑那些在后面组中的脚本时。有两个解决方法:1、移动其他脚本到"Plugins"文件夹 2、利用JavaScript的动态类型,在javascript中你不需要知道类的类型。在使用GetComponent时你可以使用字符串而不是类型。你也可以使用SendMessage,它使用一个字符串。
4.所有其他的脚本被最后编译
所有那些没有在上面文件夹中的脚本被最后编译。
所有在这里编译的脚本可以访问第一个组中的所有脚本(“Standard Assets”,“Pro
Standard Assets” or “Plugins”)。这允许你让不同的脚本语言互操作。例如,如果你想创建一个JavaScript。它使用一个C#脚本;放置C#脚本到"Standard Assets"文件夹并且JavaScript放置在"Standard Assets"文件夹之外。现在JavaScript可以直接引用c#脚本。
放置在第一个组中的脚本,将需要较长的编译时间,因为当他们被编译后,第三组需要被重新编译。因此如果你想减少编译时间,移动那些不常改变 的到第一组。经常改变的到第四组。/

二、 运行时类
AnimationCurve

动画曲线,在给定的时间添加关键帧并确定曲线。
变量
◆ var keys : Keyframe[]
描述:定义在动画曲线中的所有键。这让你从数组中清理,添加或移除键。
如果键没有按照时间顺序,它们会在赋值的时候自动排序。
◆ var length : int
描述:曲线中键的数量(只读)。
◆ var preWrapMode : WrapMode
描述:第一帧之前动画的行为。
◆ var this[index : int] : Keyframe
描述:取向索引为index的键(只读)。
构造函数
◆ static void AnimationCurve(params keys : Keyframe[]) : AnimationCurve
描述:从任意数量的关键帧创建一个动画曲线。
该函数从可变数量的Keyframe参数创建一个曲线,如果你想从一个关键帧数组中创建一个曲线,创建一个空的曲线并指定keys属性。
//一个慢退慢出的动画曲线(切线都是平的)。
var curve = new AnimationCurve(Keyframe(0, 0), Keyframe(1, 1);
void Update ()
{
transform.position.x = Time.time;
transform.position.y = curve.Evaluate(Time.time);
}
◆ static void AnimationCurve () : AnimationCurve
描述:创建一个空的动画曲线
函数
◆ void AddKey (time : float, value : float) : int
描述:添加一个新的键到曲线。
平滑切线将被自动为该键的计算,返回该键的索引,如果因为在同一时间上已经有另一个关键帧而不能添加键,将返回-1。
◆ void AddKey (key : Keyframe) : int
描述:添加一个新的键到曲线。
返回该键的索引,如果因为在同一时间上已经有另一个关键帧而不能添加键,将返回-1。
◆ void Evaluate (time : float) : float
描述:该动画曲线在time的值。
◆ void MoveKey (index : int, key : Keyframe) : int
描述:移除index处的关键帧并插入键。
如果一个关键帧已经存在于key-time,老的关键帧位置时间key[index].time/将被用来替换,这对于在一个曲线编辑器中拖动关键帧是一个理想的行为,移动它后返回关键帧的索引。
◆ void RemoveKey (index : int) : void
描述:移除一个键
◆ void SmoothTangents (index : int, weight : float) : void
描述:平滑位于index处的关键帧的进出切线。
权值为0时平均切线。
类方法
◆ static void EaseInOut (timeStart : float, valueStart : float, timeEnd : float, valueEnd : float) : AnimationCurve
描述:一个渐进渐出的曲线,开始于timeStart,valueStart并结束于timeEnd, valueEnd.
◆ static void Linear (timeStart : float, valueStart : float, timeEnd : float, valueEnd : float) : AnimationCurve
描述:一个直线,开始于timeStart,valueStart并结束于timeEnd, valueEnd.
AnimationEvent

AnimationEvent类似于SendMessage让你调用一个脚本函数,这个脚本是动画播放的一部分。
变量
◆ var animationState : AnimationState
描述:引发这个事件的动画状态。
当这个方法在动画事件回调之外被调用用时返回null。
◆ var date:string
描述:存储在动画剪辑中的字符串数据并将被发送到动画事件。
◆ var voidName : string
描述:被调用的函数的名称
这与调用gameObject.SendMessage(animationEvent.voidName,animationEvent)相同;
◆ var messageOptions :SendMessageOptions
描述:如果选项被设置为SendMessageOptions.RequireReceiver(缺省),当消息没有被任何组件接收时将打印一个错误消息。
◆ var time:float
描述:该事件被引发的时间。
构造函数
◆ static void AnimationEvent () : AnimationEvent
描述:创建一个新的动画事件

AnimationState

AnimationState完全控制动画混合。
在大多数情况下Animation接口就足够了,并且更容易使用。如果你需要完全控制动画播放过程中的混合时,使用AnimationState。
当动画播放时,AnimationState允许你修改速度,权值。时间和层。也可以设置动画合成和wrapMode
动画
变量
◆ var blendMode : AnimationBlendMode
描述:使用哪个混合模式?
// 设置leanLeft动画为附加混合
animation[“leanLeft”].blendMode = AnimationBlendMode.Additive;
◆ var clip :AnimationClip
描述:该动画状态播放的剪辑。
// 打印动画剪辑的帧频到控制台
print(animation[“walk”]clio.frameRate);
◆ var enabled : bool
描述:启用/禁用动画
对于需要考虑任何影响的动画,权值需要设置成为一个大于零的值。如果动画被禁用,时间将暂停直到动画再次启用。
// 启用walk循环
animation[“Walk”].enabled = true;
animation[“Walk”].weight = 1.0;
◆ var layer : int
描述:动画的层。在计算混合权值时,位于较高层的动画将首先获得它们的权值。
只有较高层的动画没有使用完全全部权值时,较低层的动画才能接收混合权值。
// 放置walk和run动画在层1
animation[“Walk”].layer = 1;
animation[“Run”].layer = 1;
◆ var length : float
描述:动画剪辑的长度,以秒计。
// 打印Walk动画的长度
print (animation[“Walk”].length);
◆ var name :string
描述:动画的名称。
◆ var normalizedSpeed : float
描述:归一化播放速度。
这最常用于混合两个动画时同步播放速度。在多数情况下使用animation.SyncLayer是更容易也更好
// 同步run和walk速度
animation[“Run”].normalizedSpeed = animation[“Walk”].speed;
◆ var normalizedTime : float
描述:动画的当前归一化时间。
1为动画的末端。 0.5为动画的中部。
// 快进到动画的中部
animation[“Walk”].normalizedTime = 0.5;
◆ var speed : float
描述:动画的播放速度。1为正常播放速度。
负的播放速度将回放动画。
// 向后走
animation[“Walk”].speed = -1.0;
// 以双倍速度行走
animation[“Walk”].speed = 2;
◆ var time :float
描述:动画的当前时间
如果时间大于长度它将按照wrapMode回绕。该值可以大于动画的长度。看这种情况下播放模式将在采样前重映射时间。这个值从0到无穷。
// 回退walk动画
animation[“Walk”].time = 0.0;
◆ var weight : float
描述:动画的权值
// 设置walk动画的混合权值为0.5
animation[“Walk”].weight = 0.5;
◆ var wrapMode : WrapMode
描述:动画的回绕模式
默认的wrapMode被初始化为在Animation组件中设置的回绕模式值。
// 设置walk动画回绕模式为循环
animation[“Walk”].wrapMode = WrapMode.Loop;
函数
◆ void AddMixingTransform (mix : Transform, recursive : bool = true) : void
描述:添加应该被动画的变换。这允许你缩减需要创建的动画数量。
例如你可能有一个挥手的动画。你可能想在一个空闲角色或行走的角色上播放挥手动画。那么你需要为空闲和行走分别创建挥手动画。运用合成挥手动画,它将由肩膀完全控制。但是下半身不会受它的影响,继续播放空闲或行走动画。因此你只需要一个挥手动画。
如果recursive为真,所有mix变换的子也都将被动画。如果你不调用AddMixingTransform,所有动画曲线将被使用。
// 使用路径添加混合
var shoulder : Transform;
animation[“wave_hand”].AddMixingTransform(shoulder);
void Start ()
{
//使用路径添加混合变换
var mixTransform = transform.Find(“root/upper_body/left_shoulder”);
animation[“wave_hand”].AddMixingTransform(mixTransform);
}
Application

访问应用程序的运行时数据。
这个类包含静态的方法来查找相关的信息并控制运行时数据。
类变量
◆ static var absoluteURL : string
描述:到web播放器数据文件夹的绝对路径(只读)。
Application.absoluteURL 和Application.srcValue允许你检测unityWeb数据文件是否被移动或链接接到其他位置。你也许想保护这两者来防止盗用数据文件的行为。
// 检测你的数据文件是否被移动到其他的服务器
// 或是被链接到其他地方
void Start ()
{
var isPirated = false;
if (Application.platform == RuntimePlatform.WindowsWebPlayer ||Application.platform == RuntimePlatform.OSXWebPlayer)
{
if (Application.srcValue != “game.unity3d”)
isPirated = true;
if (String.Compare (Application.absoluteURL,http://www.website.com/Game/game.unity3d,true)!=0)
isPirated = true;
if (isPirated)
print(“Pirated web player”);
}
}
◆ static var dataPath : string
描述:包含游戏数据文件夹的路径(只读)。
这个值依赖于运行的平台:
Unity 编辑器: <工程文件夹的路径>/Assets
Mac播放器: <到播发器应用的路径>/Contents
Win播放器: < 包含可执行播发器的文件夹的路径>\Data
Dasboard窗口: < dashboard widget bundle的路径>
Web播放器: 到播放器数据文件夹的绝对路径(没有实际的数据文件名称)
// 打印到数据文件夹的路径
Print(Application.dataPath);
◆ static var isEditor : bool
描述:是在Unity编辑器内运行?(只读)
如果游戏从Unity编辑器中运行,返回真;如果从其他部署目标运行返回假。
if (Application.isEditor)
{
print(“We are running this from inside of the editor!”);
}
◆ static var isLoadingLevel : bool
描述:正在加载某些关卡?(只读)
LoadLevel 和 LoadLevelAdditive不会立即发生 一个新的关卡在当前游戏帧之后被加载。如果关卡加载所请求的帧已经完成isLoadingLevel返回true。
参见:LoadLevel,LoadLevelAdditive
◆ static var isPlaying : bool
描述:在任何类型的播放器中时返回真(只读)。
在Unity编辑器中,如果处于播放模式时返回真。
if (Application.isPlaying)
{
print(“In player or playmode”);
}
◆ static var levelCount : int
描述:可用的总关卡数(只读)。
// 加载一个随机的关卡
Application.LoadLevel (Random.Range(0, Application.levelCount-1));
◆ static var loadedLevel : int
描述:最后一个被加载的关卡的索引(只读)。
print (Application.loadedLevel);
◆ static var loadedLevelName : string
描述:最后一个被加载的关卡的名称(只读)。
print (Application.loadedLevelName);
◆ static var platform : RuntimePlatform
描述:返回游戏运行的平台(只读)。
如果你要做一些平台相关的操作使用这个属性。参见:RuntimePlatform
void Start ()
{
if (Application.platform == RuntimePlatform.WindowsPlayer)
print (“Do something special here!”);
}
◆ static var runInBackground : bool
描述:应用程序在后太时是否应该被运行?
默认为假(当程序在后台时暂停)。
// 让游戏运行,即使是在后台
Application.runInBackground = true;
◆ static var srcValue : string
描述:相对于html文件的web播放器数据文件的路径(只读)。
这是被写到html文件中的路径,它是作为object的src参数和cmbed标签。因此如果它是绝对url,srcvalue将含有绝对路径。
Application.absoluteURL 和 Application.srcValue允许你检测你的unityWeb数据文件是否被移动或链接到其他位置。你也许想保护这两者来阻止盗用数据文件的行为。
// 检测你的数据文件是否被移到其他的服务器
// 或是被链接到其他地方
void Start ()
{
Var isPirated = false;
if (Application.platform == RuntimePlatform.WindowsWebPlayer ||Application.platform == RuntimePlatform.OSXWebPlayer)
{
if (Application.srcValue != “game.unity3d”)
isPirated = true;
if (String.Compare (Application.absoluteURL,“http://www.website.com/Game/game.unity3d”,true)!= 0)
isPirated = true;
if (isPirated)
print(“Pirated web player”);
}
}
◆ static var streamedBytes : int
描述:我们从主Unityweb流中下载了多少字节(只读)。
在web播放器中这将返回到目前为止已经下载的压缩字节数。在独立模式或编辑器中
这个总是返回零。
参见:GetStreamProgressForLevel函数
◆ static var targetFrameRate : int
描述:命令游戏尝试以一个特定的帧率渲染。
设置targetFrameRate为-1(默认)使独立版游戏尽可能快的渲染,并且web播放器游戏以50-60帧/秒渲染,取决于平台。
注意设置targetFrameRate不会保证帧率,会因为平台的不同而波动,或者因为计算机太慢而不能取得这个帧率。
在编辑器中targetFrameRate被忽略。
◆ static var unityVersion : string
描述:用于播放内容的Unity运行时版本。
类方法
◆ static void CancelQuit () : void
描述:取消退出。这可以用来在退出游戏的时候显示一个退出画面。
这个函数只工作在播发器中,在web播放器或编辑器中不做任何事。
// 延迟2秒退出。
// 在这段时间内加载退出画面
var showSplashTimeout = 2.0;
private var allowQuitting = false;
void Awake () {
// 需要在多个关卡中使用的游戏物体
DontDestroyOnLoad (this);
}
void OnApplicationQuit () {
// 如果我们还没有加载到最后的退出画面
if (Application.loadedLevelName.ToLower()!= “finalsplash”)
StartCoroutine(“DelayedQuit”);
// Don’t allow the user to exit until we got permission in
if (!allowQuitting)
Application.CancelQuit();
}
void DelayedQuit ()
{
Application.LoadLevel(“finalsplash”);
// 等待showSplashTimecout
yield WaitForSeconds(showSplashTimeout);
// 然后退出
allowQuitting = true;
Application.Quit();
}
◆ static void CanStreamedLevelBeLoaded(levelIndex : int) : bool
描述:可以加载流式关卡了吗?
参见:GetStreamProgressForLevel函数。

◆ static void CanStreamedLevelBeLoaded(levelName : string) : bool
描述:可以加载流式关卡了吗?
参见:GetStreamProgressForLevel函数。
◆ static void CaptureScreenshot(filename : string) : void
描述:截取屏幕为PNG文件放置在路径filename。
如果文件已经存在,它将被覆盖。如果在web播放器或者Dashboard窗口中使用该函数,它将不做任何事情。
void OnMouseDown () {
Application.CaptureScreenshot(“Screenshot.png”);
}
◆ static void ExternalCall(voidName:string,params args:object[]):void
描述:调用一个包含中网页中的函数(只用于Web Player)。
调用包含在网页中名为voidNameJavaScript函数,并传递给定的参数。支持原始的数据类型(string, int, float, char)和这些类型的数字。如何其他的对象被转化为字符串(使用ToString方法)并作为字符串传递。
传递的参数数量是可变的。
// 调用网页上的MyVoid1并不使用参数。
Application.ExternalCall (“MyVoid1”);
//调用网页上的MyVoid2并使用字符串参数。
Application.ExternalCall (“MyVoid2”, “Hello from Unity!”);
//调用网页上的MyVoid3并使用几个不同类型的参数。
Application.ExternalCall (“MyVoid3”, “one”, 2, 3.0);
被调用的在HTML中的函数只需要使用标准的语法即可,例如:

See Also: Browser to Unity communication, Application.ExternalEval.
◆ static void ExternalEval (script : string) : void
//描述:调用包含在网页中的片段脚本函数(只用于Web Player)。
这将执行包含在网页中JavaScript片段script
// 导航到前一个页面
Application.ExternalEval (“history.back()”);
See Also: Browser to Unity communication, Application.ExternalCall.
◆ static void GetStreamProgressForLevel(levelIndex : int) : float
描述:下载了多少?
在web播放器中这将返回这个关卡的进度。
参见:CanStreamedLevelBeLoaded
◆ static void GetStreamProgressForLevel (levelName : string) : float
描述:下载了多少?[ 0…1]
在web播放器中这将返回关卡的进度。
参见:CanStreamedLeverlBeLoaded 函数。
◆ static void LoadLevel(index : int) : void
描述:加载关卡。
这个函数按照索引加载关卡。在Unity中使用File->Build Settings…菜单可以看到所有 关卡的索引列表。在你能过加载关卡之前你必须将它添加到游戏使用关卡列表中。在 Unity中使用File->Build Settings…并添加你需要的关卡到关卡列表中。
//加载索引为 0 的关卡
Application . LoadLevel(0);
当加载崭新的关卡时,所有已经加载的游戏物体都将被销毁。 如果你想让物体在被加 载新关卡时不被销毁,使用Object.DontDestroyOnLoad 。
◆ Static void LoadLevel( name : string) : void
描述:按照它的名称加载关卡。
在你能够加载关卡之前你必须将它添加到游戏使用的关卡列表中。在Unity中使用
File->Build Settings… 并添加你需要的关卡到关卡列表中。关卡被加载所有激活物体上 的MonoBehaviour . OnLevelWasLoaded都被调用。
// 加载名为“HighScore”的关卡。
Application . LoadLevel(“HighScore”);
当加载新的关卡时,所有已经加载的游戏物体都将被销毁。 如果你想让物体在加载新
关卡时不被销毁,使用Object. DontDestroyOnLoad。
◆ static void LoadLevelAdditive ( index : int ) : void
◆ static void LoadLevelAdditive (name : string ) : void
描述:额外地加载一个关卡。
不同于LoadLevel,LoadLeavelAdditive 不会销毁当前关卡中的物体。新关卡中的物体
将被添加到当前关卡。这对于创建连续的虚拟世界时非常有用的,当你走过时更多的内
荣被加载。
◆ static void OpenURL( url : string ) : void
描述:在浏览器中打开url 。
在编辑器或者独立播放器模式下,这将在缺省的浏览器中使用新页打开url 。这将是浏
览器位于前端。
但在网页中执行时,包含插件的页将被重定向到 url 。
Void Start ( ) {
Application . OpenURL (“http://unity3d.com”);
}
◆ Static void Quit ( ) : void
描述:退出应用程序。在编辑器或者web播放器中退出被忽略。
//当用户点击escape时退出播放器
Void Update ( ){
If ( Input GetKey ( “escape” )){
Application . Quit ( ) ;
}
}

collision

描述碰撞
Collision 信息被传递到Collider . OnCollisionEnter , Collider . OnCollisionStay和Collider.OnCollisionExit事件。参见: ContactPoint.
变量
◆var collider : Collider
描述:碰撞到的Collider ( 只读 ).
为了得到所有被碰撞到的碰撞器的细节,你需要迭代接触点( contacts属性)。
◆var contacts : ContactPoint [ ]
描述:接触点由物理引擎产生。
每个contact包含一个接触点,法线和两个发生碰撞的碰撞器(参考ContactPoint)。在OnCollisionStay或者OnCollisionEnter内可以确保contacts有至少一个元素。
void OnCollisionStay ( collision : Collision ){
//检查碰到碰撞器是否有刚体
//然后使用一个力
for ( var contact : ContactPoint in collision . contacts ) {
print ( contact.thisCollider . name + “hit” + contact . otherCollider .name );
//可视化接触点
Debug.DrawRay ( contact . point , contact . normal, Color .white ) ;
}
}
//一枚手榴弹,在击中一个表面时初始化一个爆炸预设,然后销毁它
var explosionPrefab : Transform;
void OnCollisionEnter( collision : Collision ){
//旋转这个物体使y轴面沿着表面法线的方向
var contact = collision . contact [ 0 ];
var rot = Quaternion . FromToRotation ( Vector3.up , contact . normal ) ;
var pos = contact . point ;
Instantiate ( explosionPrefab , pos , rot ) ;
Destory ( gameObject );//销毁这个投射物
}
◆var gameObject : GameObject
描述:/ gameObject / 是与之碰撞的物体(只读)
◆var relativeVelocity : Vector3
描述: 两个碰撞物体的相对线形速度(只读)。
//当以较大的速度碰到一个物体时播放声音
void OnCllisionEnter ( collision : Collision ) {
if ( collision . relativeVelocity . magnitude > 2 )
audio .Play ( );
}
◆var rigibody : Rigidbody
描述:碰撞到的Rigidbody(只读),如果碰到的物体是一个没有附加刚体的碰撞器,返回null
//让所有碰到的刚体向上飞
void OnCollisionStay ( collision : Collision ) {
//检查碰到的碰撞器是否有一个刚体 ,然后使用力
if ( collision . rigidbody ){
collision . rigidbody .AddForce ( Vector3 . up * 15 ) ;
}
}
◆var transform : Transform
描述:碰撞到的物体的Transform(只读)。
如果碰到一个带有Rigidbody的碰撞器,transform将是所有附加刚体的变换。如果碰到了一个没有刚体的碰撞器,transform将是所有附加碰撞器的变换。
color
结构
表示RGBA颜色。
这个结构被用在整个Unity中传递颜色。每个颜色组件是一个0到1之间的浮点数。
组件(r ,g ,b )在RGB颜色空间内定义一个颜色。Alpha组件(a)透明性 - alpha为0是完全不透明,alpha为1是完全透明。
变量
◆var a : float
描述:颜色的Alpha组件。
var color = Color . white ;
color . a = 0 ;
◆var b : float
描述:颜色的蓝色组件。
var color = Color .white;
color .b = 0 ;
◆var g : float
描述:颜色的绿色组件
var color = Color . white ;
color . g = 0 ;
◆var grayscale : float
描述:颜色的灰度值(只读)
var color = Color ( 3 , 4 ,6 ) ;
print ( color . grayscale ) ;
◆var r : float
描述:颜色的红色组件。
var color = Color . white ;
color . r = 0
◆var this [ index : int ] : float
描述:分别使用[ 0 ] ,[ 1 ] ,[ 2 ] ,[ 3 ]访问r ,g , b ,a组件。
Color p ;
p [ 1 ] = 5 ;//与p .g = 5相同
构造函数
◆static void Color ( r : float , g : float , b : float, a: float ) : Color
描述:用给定的 r , g , b , a ,组件构建一个新的颜色。
var color = Color ( 0.2 , 0.3 , 0.4 , 0.5 ) ;
◆static void Color ( r : float , g : float , b : float ) : Color
描述:用给定的 r , g , b 组件构建一个新的颜色并设置 a 为1
var color = Color (0.2 , 0.3 , 0.4 ) ;
函数
◆void ToString ( ):string
描述:返回格式化好的这个颜色的字符串。
print ( Color .white ) ;
类变量
◆static var black : Color
描述:黑色。 RGBA为( 0 , 0 , 0 , 1 ).
◆static var blue : Color
描述:蓝色。 RGBA为( 0 , 0 , 1 , 1 ).
◆static var clear : Color
描述:完全透明。 RGBA为( 0 ,0, 0, 0 ).
◆static var eyan : Color
描述:青色。 RGBA为( 0 , 1 , 1 , 1 ).
◆static var gray : Color
描述:灰色。RGBA为 ( 5 , 5 , 5 , 1 ).
◆static var green : Color
描述:绿色。RGBA为(0, 1 , 0, 1 ).
◆static var grey : Color
描述:英式拼法为gray。RGBA为(0.5 , 0.5 , 0.5 , 1 ).
◆static var magenta : Color
描述:紫红色。RGBA为(1 , 0 , 1 , 1 ).
◆static var red : Color
描述:全红。RGBA为(1 , 0 , 0, 1 ).
◆static var white : Color
描述:全白。RGBA为(1 , 1 , 1 , 1 ).
◆static var yellow : Color
描述:黄色。RGBA是怪异的(1 , 235/255 , 4/255 , 1 ),但是这个颜色看起来非常好!
类方法
◆static void Lerp ( a : Color , b : Color , t : float ) : Color
描述:在颜色a和颜色b之间按照t插值。
/ t /被限定到0 和1之间,当t为0时返回a . 当t为1时返回b
◆static operator * ( a : Color , b : Color) : Color
描述:乘两个颜色,每个组件被分别乘。
◆static operator * ( a : Color , b : float) : Color
描述:用浮点数b乘以颜色a。每个组件被分别乘。
◆static operator * ( a : float , b : Color) : Color
描述:用浮点数b乘以颜色a。每个组件被分别乘。
◆static operator + ( a : Color , b : Color) : Color
描述:加两个颜色,每个组件被分别加。
◆static operator - ( a : Color , b : Color) : Color
描述:从颜色a中减去颜色b。每个组件被分别减。
◆static operator / ( a : Color , b : float) : Color
描述:乘用浮点数b除以a。每个组件被分别除。
◆static implicit void Color ( v : Vectro4 ) : Color
描述:Colors可以被隐式转化为Vector4,或由它转化而来。
◆static implicit void Vector4 ( c : Color ) : Vector4
描述:Colors以被隐式的转化为Vector4,或由它转化而来。
ContactPoint
结构
描述:碰撞发生的接触点。
接触点被存储在collision结构中,参见collision , collision . OnCollisionEnter, Collision . OnCollisionStay , Collision . OnCollisionExit.
变量
◆var normal : Vector3
描述:接触点的法线
◆var otherCollider : Collider
描述:碰撞中的另一个碰撞器
◆var point : Vector3
描述:接触点
◆var thisCollider : Collider?
描述:碰撞中的第一个碰撞器
ControllerColliderHit

ControllerColliderHit被CharacterController . OnControllerColliderHit使用来给出详细的关于碰撞和如何处理它们的信息。
变量
◆var collider : Collider
描述:被控制器碰到的碰撞器。
◆var controller : CharacterController
描述:碰到该碰撞器的控制器。
◆var gameObject : GameObject
描述:被控制器碰到的游戏物体。
◆var moveDirection : Vector3
描述:从胶囊的中心到接触点的大致方向。
这可以用来找到一个合理的方向将力应用到接触的刚体。
◆var moveLength : float
描述:角色碰到这个碰撞器时已经行走了多远。
注意这可能不同于你传递到CharacterController . Move的。因为所有的移动都是被碰撞器制约的。
◆var normal : Vector3
描述:在世界空间中碰撞表面的法线。
◆var point : Vector3
描述:世界空间中的碰撞点。
◆var rigidbody : Rigidbody
描述:被控制器碰到的刚体。
如果没有接触一个刚体而是一个静态碰撞器时为null。
◆var transform : Transform
描述:被控制器碰到的变换。
Debug

一个类,包含用于开发游戏时的调试方法。
类变量
◆static var isDebugBuild : bool
描述:在Build Settings…对话框中,有一个被称为"strip debug symbols"的复选框。
如果它被选择isDebugBuild将为关。在编辑器中isDebugBuild总是返回真,建议在发布游戏的时候移除所有对Debug .Log的调用,这样你就能够容易的发布带有调试输出的测试版,而最终版没有调试输出。
//只有这是调试版时,记录调试信息
if ( Debug .isDebugBuild ) {
Debug . Log ( " Something bad happened ! " ) ;
}
类方法
◆static void Break ( ) : void
描述:暂停编辑器
Debug . Break ( ) ;
◆static void DrawLine ( start:Vector3, end: Vector3, color : Color = Color . white ) : void
描述:从point开始到end用颜色绘制一条线。
这个线将被绘制在编辑器的场景视图中。如果在游戏视图中启用了gizmo绘制,这个线也将被绘制在这里。
//从世界坐标的原点到点( 1 , 0 , 0 )绘制一条红色的线
void Update ( ) {
Debug . DrawLine ( Vector3 . Zero , new Vector3 ( 1 , 0 , 0 ), Color . red ) ;
}
◆static void DrawRay ( start:Vector3, dir : Vector3, color : Color = Color . white ) : void
描述:从start 到start+dir 用颜色绘制一条线。
//绘制一条10米长的线从position,沿着变换的z轴向前。
void Update ( ) {
var forward = transform . TransformDirection ( Vector3 . forward ) * 10 ;
Debug . DrawRay ( transform . position .Vector3 . forward * 10 , Color . green );
}
◆static void Log ( message : object ) : void
描述:记录message到Unity控制台。
Debug . Log ( “Hello”);
◆static void Log ( message : object . context : Object ) : void
描述:记录message到Unity控制台。
当你在控制台中选择消息的时候一个到上下文物体的链接将被绘制。这是非常有用的。如果你想知道那个物体发生了错误。
Debug . Log ( “Hello” , gameObject ) ;
◆static void LogError ( message : object ) : void
描述:Debug . Log 的一个变体,用来记录错误信息到控制台。
var memberVariable : Transform ;
if ( memberVariable == null )
Debug . LogError ( " memberVariable must be set to point to a Transform. ") ;
◆static void LogError ( message : object , context : Object ) : void
描述:Debug . Log的一个变体,用来记录错误信息到控制台。
等你在控制台中选择消息的时候一个到上下文物体的链接将被绘制。这是非常有用的, 如果你想知道那个发生了错误。
var memberVariable : Transform ;
if ( memberVariable == null )
Debug . LogError ( “memberVariable must be set to point to a Transform " , this ) ;
◆static void LogWarning ( message : object ) : void
描述:Debug . Log 的一个变体,用来记录警告信息到控制台。
◆static void LogWarning ( message : object , context : Object ) : void
描述:Debug . Log的一个变体,用来记录警告信息到控制台。
当你选择控制台中的一个消息时,一个到上下文物体的连接将被绘制。这是非常有用的, 如果你想知道那个物体发生了错误
Event

一个UnityGUI事件。
对应于用户的输入事件(按键,鼠标事件),或者是UnityGUI布局或渲染事件。
对于每个事件OnGUI在脚本中被调用;因此OnGUI在每帧中被潜在调用多次。
Event . current对应于OnGUI调用“当前”事件。
参见:GUIScripting Guide
变量
◆var alt : bool
描述:Alt/Option键被按住?(只读)
在windows下,如果Alt键被按下返回真。在Mac下,如果Option键被按下返回真。
◆var button : int
描述:哪个鼠标键被按下
0表示左键,1表示右键。2表示中键。在EventType . MouseDown ,EventType .MouseUp
事件中使用。
◆var capsLock : bool
描述:Caps Lock 处于打开状态?(只读)
如果Caps Lock为打开返回真
◆var character : char
描述:输入的字符
在EventType . KeyDown 事件中使用,注意EventType . KeyUp事件不包含字符,只包含Event . keyCode .
参见:Event . keyCode.
◆var command : bool
描述:Command/Windows键被按住?(只读)
在Windows下,如果Windows键被按下返回真。在Mac下,如果Command键被按下返回真。
◆var control : bool
描述:Control被按下?(只读)
如果Control被按下返回真。
◆var delta : Vector2
描述:与上次事件相比,鼠标的相对移动。
在EventType .MouseMove,EventType .MouseDrag,,EventType .ScrollWheel时间中使用。
参见:Event . mousePosition
◆var voidKey : bool
描述:当前按下的键是功能键?(只读)
如果当前按下的键是方向键,翻页键,退格键等等时返回真,如果这个键需要特殊处理才能用与文本编辑时,voidKey为打开。
◆var isKey : bool
描述:这个事件是键盘事件?(只读)
◆var isMouse : bool
描述:这个事件是鼠标事件?(只读)
◆var keyCode : KeyCode
描述:用于键盘事件的原始键代码
在EventType . KeyDown 和 EventType . KeyUp事件中使用;返回匹配物理键盘的KeyCode值,使用这个来处理光标,功能键等等。
参见:Event . character 。
◆var mousePosition : Vector2
描述:鼠标位置
在EventType . MouseMove 和EventType . MouseDrag事件中使用。
参见:Event . delta
◆var numeric : bool
描述:当前按下的数字的键?(只读)
使用这个表示区分主&数字键。
◆var shift : bool
描述:Shift被按下?(只读)
如果Shift被按下返回真。
函数
◆void GetTypeForControl ( controlID : int ) : EventType
参数
controlID 查询的控件ID。从GUIUtilty . GetControlID ( ) 获取。参考 EventType获取可能值的列表。
描述:为给定的控件ID获取一个过滤的事件类型。
这个函数可以用来实现鼠标锁和键盘焦点。
◆void Use ( ) : void
描述:使用这个事件。
当已经使用了一个事件时调用这个方法。事件类型将被设置为EventType . Used。使其 他GUI元素忽略它。
类变量
◆static var current : Event
描述:现在被处理的当前事件。
类方法
◆static void KeyboardEvent ( key : string ) : Event
描述:创建一个键盘事件。
这可用于检查某个键是否被按下。可能带有调整器。key字符串是键的名称(与输入管理器中的相同),可以使用任意数量的调整器前缀:& = Alternate , ^ = Controler, % = Command , # = Shift 例如:&f12 = Alternate +F12., " 1 " = Control +keypad0
void OnGUI ( ) {
GUILayout . Lable ( " Press Enter To Start Game “) ;
if ( Event . current . Equals ( Event . KeyboardEvent (”[enter]”)))
Application . LoadLevel ( 1 )
if(Event current Equals(Event KeybordEvent(“return”) ))
Print( “I said enter ,not return – try the keypad” );
}

GL

底层图像库。
使用这个类操作激活的变换矩阵,发送与OpengGL立即模式相同的渲染命令并做一些其他的底层图像操作。注意,在所有情况下使用Graphics.DrawMesh比任何使用立即模式绘制更有效。
这个类只限于Unity Pro.
类变量
◆ static var LINES: int
描述:用于Begin的模式:绘制直线。
参见:GL . Begin, GL . End.
◆ static var modelview:Matrix4x4
描述:当前模型视矩阵。
给这个变量赋值等同于OpenGL中的glLoadMatrix(mat);在其他图形API中对应的功能被模拟。
改变模型视矩阵覆盖当前相机的视参数,因此最常用的是使用GL.PushMatrix和GL.PopMatrix来保存和恢复矩阵。
读取这个变量返回当前模型视矩阵。
◆ static var QUADS:int
描述:用于Begin的模式:绘制四边形
参见:GL.Begin,GL.End.
◆ static var TRIANGLE_STRIP:int
描述:用于Begin的模式:绘制三角面
参见:GL.Begin,GL.End.
◆ static var TRIANGLES:int
描述:用于Begin的模式:绘制三角形
参见:GL.Begin,GL.End.
类方法
◆ static void Begin(mode:int) : void
参数
mode 绘制的几何体:可以是TRIANGLES,TRIANGLE_STRIP,QUADS或
LINES.
描述:开始绘制3D几何体
这个对应OpenGL中的glBegin,在其他图形API中相同的功能被模拟 ,在GL.Begin 和 GL.End之间,可以调用GL .Veriex,GL.Color,GL.TexCoord和其他立即模式绘制函数。
在绘制你自己的几何体时,你应该注意它们的裁剪。裁剪规则可能会因为不同的图形 API而不同。在大多数情况下在shader中使用Cull Off命令是安全的。
参见:GL.End.
◆ static void Clear(clearDepth:bool,clearColor:bool,backgroudColor):void
参数
clearDepth 应该清除深度缓存?
clearColor 应该清除颜色缓存?
backgroudColor 颜色被清理为什么,只有当clearColor为true时使用.
描述:清除当前渲染缓存
这将清除屏幕或激活的RenderTexture.
◆ static void Color(c : Color) : void
描述:设置当前顶点颜色
这个对应OpenGL中的glColor4f(c. r,c.g,c.b,c.a):在其他图形中API中相同的功能被模拟,
为了使逐顶点颜色可以在不同的硬件上工作,你需要使用绑定了颜色通道的shader。参考BindChannels文档.
这个函数只在GL.Begin和GL.End函数之间调用.
◆ static void End( ) : void
描述:结束绘制3D几何体
这个对应OpenGL中的glEnd;在其他图形API中相同的功能被模拟.
参见:GL.Begin.
◆ static void LoadIdentity( ) : void
描述:加载单位矩阵到当前模型视矩阵。
这个函数覆盖当前相机的视参数,因此最常用的是使用GL.PushMatrix和GL.PopMatrix
来保存和恢复矩阵。
◆ static void LoadOrtho( ) : void
描述:辅助函数用来设置一个正交透视变换
调用LoadOrtho知道,视锥从 (0,0,-1) 变化到(1,1,100).
◆ static void LoadPixelMatrix( ) : void
描述:设置一个用于像素修正渲染的矩阵。
这个设置模型视和投影矩阵,因此X,Y坐标直接映射到像素。(0,0)位于当前相机
视口的左下角。Z坐标从-1到+100
这个函数覆盖当前相机的参数,因此最常用的是使用GL.PushMatrix和GL.PopMatrix
来保存和恢复矩阵。
◆ static void LoadPixelMatrix(left:float,right:float,bottom:float,top:float):void
描述:设置一个矩阵的像素正确渲染。
这样设置投影矩阵点以便X、Y坐标图直接像素化。(0,0)在底部左侧当前摄像机的视角。Z坐标是从-1到+100。
这个函数覆盖了相机的参数,所以通常你要保存和恢复矩阵就使用GLPushMatrix和GL.PopMatrix。
◆ static void LoadProjectionMatrix (mat : Matrix4x4) : void
描述:加载到当前任意矩阵投影矩阵。
这个函数重写当前摄像机的投影参数,所以通常你要保存和恢复投影矩阵就使用GLPushMatrix和GL.PopMatrix。
◆ static void MultiTexCoord (unit : int, v : Vector3) : void
描述:设置当前纹理坐标(v.x,v.y,v.z)实际的纹理单元。
在OpenGL中glMultiTexCoord为特定的纹理单元如果多纹理是可用的。在其他图形的API中相同的功能进行了仿真。
这个函数只能被称为介于GL.Begin和GL.End功能之间。
◆ static void MultiTexCoord2 (unit : int, x : float, y : float) : void
描述:设置当前纹理坐标(x,y)的为实际纹理单元。
在OpenGL中glMultiTexCoord为特定的纹理单元如果多纹理是可用的。在其他图形的API中相同的功能进行了仿真。
这个函数只能被称为介于GL.Begin和GL.End功能之间。
◆ static void MultiTexCoord3(unit : int, x : float, y : float, z : float) :void
描述:设置当前纹理坐标(x,y,z)的为实际纹理单元。
在OpenGL中glMultiTexCoord为特定的纹理单元如果多纹理是可用的。在其他图形的API中相同的功能进行了仿真。
这个函数只能被称为介于GL.Begin和GL.End功能之间。
◆ static void MultMatrix (mat : Matrix4x4) : void
描述:复制当前的点矩阵和其中的一个说明。
相当于glMultMatrix(垫在)OpenGL; 在其他图形API的相应功能是相仿的。
换点矩阵覆盖当前相机视图的参数,所以通常你要保存和恢复投影矩阵就使用GLPushMatrix和GL.PopMatrix。
◆ static void PopMatrix () : void
描述:恢复了投影和点矩阵的矩阵堆栈的顶部。
换投影矩阵点覆盖当前相机视图的参数。这些矩阵可以用GLPushMatrix和GL.PopMatrix来保存和恢复。
参见:PushMatrix函数。
◆ static void PushMatrix () : void
描述:节约双方投影矩阵对点和矩阵堆栈。
换投影矩阵点覆盖当前相机视图的参数。这些矩阵可以用GLPushMatrix和
GL.PopMatrix来保存和恢复。
参见:PopMatrix函数
◆ static void SetRevertBackfacing(revertBackFaces : bool) : void
描述:选择是否翻转隐面剔除,是(真)或者不是(假)
◆ static void TextCoord (v : Vector3) : void
描述:为所有纹理单元设置当前纹理坐标(v.x, v.y, v.z)
这个对应于OpengGL中用于所有纹理单元的glMultiTexCoord或者多纹理不可用时的glTexCoord,在其他的图形API中仿真了相同的功能。
这个函数只在GL.Begin和GL.End函数之间调用。
◆ static void TexCoord2(x : float, y : float) : void
描述:为所有纹理单元设置当前纹理坐标(x, y)
这个对应于OpengGL中用于所有纹理单元的glMultiTexCoord或者多纹理不可用时的glTexCoord,在其他的图形API中仿真了相同的功能。
, 这个函数只在GL.Begin和GL.End函数之间调用。
◆ static void TexCoord3(x : float, y : float, z : float) : void
描述:为所有纹理单元设置当前纹理坐标(x, y, z)
这个对应于OpengGL中用于所有纹理单元的glMultiTexCoord或者多纹理不可用时的glTexCoord,在其他的图形API中仿真了相同的功能。
这个函数只在GL.Begin和GL.End函数之间调用。
◆ static void Vertex(v : Vector3) : void
描述:提交顶点
这个对应OpenGL中的glVertex3f(v.x, v.y.v.z); 在其他图形API中相同的功能被模拟。
这个函数只在GL.Begin和GL.End函数之间调用。
◆ static void Vertex3(x : float, y : float, z : float) : void
描述:提交顶点
这个对应OpenGL中的glVertex3f(x, y, z); 在其他图形API中相同的功能被模拟。
这个函数只在GL.Begin和GL.End函数之间调用。
◆ static void Viewport(pixelRect : Rect) : void
描述:设置渲染视口
所有的渲染都被限制在pixelRect之内。

GUIContent

GUI元素的内容
这个与GUIStyle紧密相关,GUIContent定义渲染什么而GUIStyle定义如何渲染。
参见:GUIStyle
变量
◆ var image : Texture
描述:包含图标的图像
◆ var text : string
描述:包含的文本
◆ var tooltip : string
描述:这个元素的提示
与这个内容相关的提示。读取GUItooltip来获取当前用户指向的GUI元素的提示。
构造函数
◆ static void GUIContent() : GUIContent
描述:用于所有形状和尺寸的GUIContent的构造函数
构建一个空的GUIContent。
◆ static void GUIContent(text : string) : GUIContent
描述:构建一个只包含文本的GUIContent物体。
使用GUI是,你不需要为一个简单的文本字符创建GUIContents – 这两行代码功能等效:
void OnGUI()
{
GUI.Button(Rect(0, 0, 100, 20), “Click Me”);
GUI.Button(Rect(0, 30, 100, 20), GUIContent(“Click Me”));
}
◆ static void GUIContent(image : Texture) : GUIContent
描述:构建一个只包含图片的GUIContent对象。
var icon : Texture;
void OnGUI()
{
GUI.Button(Rect(0, 0, 100, 20), GUIContent(icon));
}
◆ static void GUIContent(text : string, image : Texture) : GUIContent
描述:构建一个包含text和图片的GUIContent对象
var icon : Texture;
void OnGUI()
{
GUI.Button(Rect(0, 0, 100, 20), GUIContent(“Click me”, icon));
}
◆ static void GUIContent(text : string, tooltip : string) : GUIContent
描述:构建一个包含text的GUIContent,当用户鼠标悬停在它上面的时候,全局GUI.tooltip被设置为tooltip。
void OnGUI()
{
GUI.Button(Rect(0, 0, 100, 20), GUIContent(“Click me”, “This is a tooltip.”));
//如果用户指向这个按钮,全局提示被设置
GUI.Label(Rect(0, 40, 100, 40), GUI.tooltip);
}
◆ static functioin Height(height : float) : GUILayoutOption
描述:传递给空间的选项以便给它一个绝对高度。
◆ static functioin HorizontalScrollbar(value : float, size : float, leftValue : float, rightValue : float, params options : GUILayoutOption[]) : float
◆ static functioin HorizontalScrollbar(value : float, size : float, leftValue : float, rightValue : float, style : GUIStyle, params options : GUILayoutOption[]) : float
参数
value在min和max之间的位置
size 能看见多大?
leftValue滚动条左端的值
rightValue 滚动条右端的值
style 用于滚动条背景的风格。如果不设置,将使用当前GUISkin的horizontalScrollbar
options 一个可选的布局选项的列表。它用来指定额外的布局属性。任何在这里设置的值将覆盖由style定义的设置。
参见:GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight
返回floar – 修改后的值。这可以通过拖动这个滚动条,或者单击两端的箭头来改变。
描述:一个水平滚动条。滚动条可以用来滚动文档。大多数情况下,你会使用滚动视代替。
找到额外的元素:
在滚动条两端的按钮将在当前皮肤中搜索“leftButton”和“rightButton”作为风格,滚动条的滑块(你拖动的东西)将搜索并使用名为“thumb”的风格。
//这将使用下面的风格名来决定该按钮的尺寸/位置
//MyScrollbarleftButton - 用于左侧按钮的风格位置
//MyScrollbarrightButton - 用于右侧按钮的风格位置
//MyScrollbarthumb - 用于滑块的风格名称
scrollPos = GUILayout.HorizontalScrollbar(scrollPos, 1, 0, 100, “MyScrollbar”);
◆ static functioin HorizontalSlider(value : float, leftValue : float, rightValue : float, params options : GUILayoutOption[]) : float
◆ static functioin HorizontalSlider(value : float, leftValue : float, rightValue : float, slider : GUIStyle, thumb : GUIStyle, params options : GUILayoutOption[]) : float
参数
value滑块显示的值。这个决定可拖动滑块的位置。
leftValue滑杆左端的值。
rightValue 滑杆右边的值。
slider用于显示拖动区域的GUIStyle。如果不设置,将使用当前GUISkin的horizontalSlider。

thumb 用于显示拖动块的GUISkin。如果不设置,将使用当前的GUISkin的horizontalSliderThumb
options 一个可选的布局选项的列表。它用来指定额外的布局属性。任何在这里设置的值将覆盖由style定义的设置。
参见:GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight.
返回float – 被用户设置的值。
描述:一个用户可以拖动的滑杆。可以在min和max之间取一个值。
◆ static void Label(image : Texture, params options : GUILayoutOption[]) : void
◆ static void Label(text : string, params options : GUILayoutOption[]) : void
◆ static void Label(content : GUIContent, params options : GUILayoutOption[]) : void
◆ static void Label(image : Texture, style : GUIStyle, params options : GUILayoutOption[]) : void
◆ static void Label(text : string, style : GUIStyle, params options : GUILayoutOption[]) : void
◆ static void Label(content: GUIContent, style : GUIStyle, params options : GUILayoutOption[]) : void
参数
text 显示在该标签上的文本。
image显示在标签上的Texture。
content用于这个标签的文本,图形和提示。
style 使用的风格。如果不设置。将使用当前GUISkin的label。
options 一个可选的布局选项的列表。它用来指定额外的布局属性。任何在这里设置的值将覆盖由style定义的设置。
参见:GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight.
描述:制作一个自动布局label
标签没有用户交互。不会获取鼠标点击并总是以普通风格渲染。如果你想制作一个可视化响应用户输出的控件,使用一个Box控件。
◆ static void MaxHeight(maxHeight : float) : GUILayoutOption
描述:传递给控件的选项来指定一个最大高度。
◆ static void MaxWidth(maxWidth : float) : GUILayoutOption
描述:传递给控件的选项来指定一个最大宽度。
◆ static void MinHeight(minHeight : float) : GUILayoutOption
描述:传递给控件的选项来指定一个最小高度。
◆ static void MinWidth(minWidth : float) : GUILayoutOption
描述:传递给控件的选项,来指定一个最小宽度
◆ static void PasswordField(password : string, maskChar : char, params options : GUILayoutOption[]) : string
◆ static void PasswordField(password : string, maskChar : char, maxLength : int, params options : GUILayoutOption[]) : string
◆ static void PasswordField(password : string, maskChar : char, style : GUIStyle, params options : GUILayoutOption[]) : string
◆ static void PasswordField(password : string, maskChar : char, maxLength : int, style : GUIStyle, params options : GUILayoutOption[]) : string
参数
password 用于编辑的密码。这个函数返回值应该被赋回这个字符串。如下的例子。
maskChar 用来隐藏密码的字符。
maxLength 字符串的最大长度。如果不设置,用户可以一直输入。
style 使用的风格。如果不设置,将使用当前GUISkin的textField风格。
返回string – 编辑过的密码。
描述:制作一个用户可以输入密码的文本域。
var passwordToEdit = “My Password”;
void OnGUI()
{// 制作一个密码与来调整stringToEdit。
passwordToEdit = GUILayout.PasswordField(passwordToEdit, “*”, 25);
}
◆ static void RepeatButton(image : Texture, params options : GUILayoutOption[]) : bool
◆ static void RepeatButton(text : string, params options : GUILayoutOption[]) : bool
◆ static void RepeatButton(content : GUIContent, params options : GUILayoutOption[]) : bool
◆ static void RepeatButton(image : Texture, style : GUIStyle, params options : GUILayoutOption[]) : bool
◆ static void RepeatButton(text : string, style : GUIStyle, params options : GUILayoutOption[]) : bool
◆ static void RepeatButton(content : GUIContent, style : GUIStyle, params options : GUILayoutOption[]) : bool
参数
text显示在该按钮上的文本。
image 显示在该按钮上的Texture。
content 用于这个按钮的文本,图形和提示。
style使用的风格,如果不设置,将使用当前GUISkin的button风格。

options 一个可选的布局选项的列表。它用来指定额外的布局属性。任何在这里设置的值将覆盖由style定义的设置。
参见:GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight.
返回bool - /true/当用户按住按钮时
描述:制作一个重复按钮,只要用户按住鼠标这个按钮一直返回真。
◆ static void SeletionGrid(selected : int, texts : string[], xCount : int, params options : GUILayoutOption[]) : int
◆ static void SeletionGrid(selected : int, images : Texture[], xCount : int, params options : GUILayoutOption[]) : int
◆ static void SeletionGrid(selected : int, contents : GUIContent[], xCount : int, params options : GUILayoutOption[]) : int
◆ static void SeletionGrid(selected : int, texts : string[], xCount : int, style : GUIStyle, params options : GUILayoutOption[]) : int
◆ static void SeletionGrid(selected : int, images : Texture[], xCount : int, style : GUIStyle, params options : GUILayoutOption[]) : int
◆ static void SeletionGrid(selected : int, contents : GUIContent[], xCount : int, style : GUIStyle, params options : GUILayoutOption[]) : int
参数
selected选择按钮的索引
texts 显示在按钮的字符串数组。
images在按钮上纹理数组
contents用于按钮的文本,图形和提示。
xCount 在水平方向多少个元素,元素将被缩放来适应,除非风格定义了一个fixedWidth,空间高度将由元素的数量决定。
style 使用的风格。如果不设置,将使用当前GUISkin的button风格。
options 一个可选的布局选项的列表,它用来指定额外的布局属性。任何在这里设置的值将覆盖由style定义的设置。
参见:GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight.
返回int – 选择按钮的索引
描述:制作一个选择网格
◆ static void Space(pixel : float) : void
描述:在当前布局组中插入一个空格
空格的方向依赖与使用这个命令时当前所在布局组。如果在垂直组,空格是垂直的。
void OnGUI()
{
GUILayout.Button(“I’m the first button”);
//在两个按钮间插入20像素
GUILayout.Space(20);

}
GUILayout.Button(“I’m a bit futher down”);
}
在水平组,pixels将是水平的;
void OnGUI()
{
//开始水平组以便显示水平空格
GUILayout.BeginHorizontal(“box”);
GUILayout.Button(“I’m the first button”);
//在两个按钮间插入20像素
GUILayout.Space(20);
GUILayout.Button(“I’m to the right”);
//结束上面开始的水平组
GUILayout.EndHorizontal();
}
◆ static void TextArea(text : string, params options : GUILayoutOption[]) : string
◆ static void TextArea(text : string, maxLength : int, params options : GUILayoutOption[]) : string
◆ static void TextArea(text : string, style : GUIStyle, params options : GUILayoutOption[]) : string
◆ static void TextArea(text : string, maxLength : int, style : GUIStyle, params options : GUILayoutOption[]) : string
参数
text 用于编辑的文本。这个函数返回值应该被赋回这个字符串。如下的例子。
maxLength 字符串的最大长度。如果不设置,用户可以一直输入。
style 使用的风格。如果不设置,则使用当前GUISkin的textField风格。
options 一个可选的布局选项的列表。它用来指定额外的布局属性。任何在这里设置的值将覆盖由style定义的设置。
参见:GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight.
返回string – 编辑过的字符串。
描述:制作一个多行文本域。这里用户可以编辑这个字符串。
◆ static void TextField(text : string, params options : GUILayoutOption[]) : string
◆ static void TextField (text : string, maxLength : int, params options : GUILayoutOption[]) : string
◆ static void TextField (text : string, style:GUIStyle, params options : GUILayoutOption[]) : string
◆ static void TextField (text : string, maxLength : int, style : GUIStyle, params options : GUILayoutOption[]) : string
参数
text 用于编辑的文本。这个函数返回值应该被赋回这个字符串,如下的例子。

maxLength 字符串的最大长度。如果不设置,用户可以一直输入。
style 使用的风格。如果不设置,将使用当前的GUISkin的textArea
options 一个可选的布局选项的列表,它用来指定额外的布局属性。任何在这里设置的值将覆盖由style定义的设置。
参见:GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight.
返回string – 编辑过的字符串。
描述:制作一个单行文本域。这里用户可以编辑这个字符串。
var stringToEdit = “Hello, world”;
void OnGUI()
{
//制作一个文本域来调整stringToEdit
stringToEdit = GUILayout.TextField(stringToEdit, 25);
}
◆ static void Toogle(value : bool, image : Texture, params options : GUILayoutOption[]) : bool
◆ static void Toogle(value : bool, text : string, params options : GUILayoutOption[]) : bool
◆ static void Toogle(value : bool, content : GUIContent, params options : GUILayoutOption[]) : bool
◆ static void Toogle(value : bool, image : Texture, style : GUIStyle, params options : GUILayoutOption[]) : bool
◆ static void Toogle(value : bool, text : string, style : GUIStyle, params options : GUILayoutOption[]) : bool
◆ static void Toogle(value : bool, content : GUIContent, style : GUIStyle, params options : GUILayoutOption[]) : bool

参数
value按钮是打开或关闭
text 显示在该按钮上的文本
image显示在该按钮上的Texture
content用于这个按钮的文本,图形和提示
style 使用的风格。如果不设置,将使用当前GUISkin的button风格。
options 一个可选的布局选项的列表,它用来指定额外的布局属性。任何在这里设置的值将覆盖由style定义的设置。
参见:GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight.
返回bool – 按钮的新值
描述:制作一个on/off开关按钮。

◆ static void Toolbar(selected: int, texts : string[], params options : GUILayoutOption[]) : int
◆ static void Toolbar(selected: int, images : Texture[], params options : GUILayoutOption[]) : int
◆ static void Toolbar(selected: int, contents: GUIContent[], params options : GUILayoutOption[]) : int
◆ static void Toolbar(selected: int, texts : string[], style : GUIStyle, params options : GUILayoutOption[]) : int
◆ static void Toolbar(selected: int, image : Texture[],style : GUIStyle, params options : GUILayoutOption[]) : int
◆ static void Toolbar(selected: int, content : GUIContent[],style : GUIStyle, params options : GUILayoutOption[]) : int
参数
selected选择按钮的索引
texts 显示在按钮上的字符串数组
images在按钮上的纹理数组
contents用于按钮的文本,图形和提示数组
style 使用的风格。如果不设置,将使用当前GUISkin的button风格。
options 一个可选的布局选项的列表。它用来指定额外的布局属性。任何在这里设置的值将覆盖由style定义的设置。
参见:GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight.
返回int – 选择按钮的索引
描述:制作一个工具栏
◆ static void VerticalScrollbar(value: float, size : float, topValue : float, buttomValue : float, params options : GUILayoutOption[]) : float
◆ static void VerticalScrollbar(value: float, size : float, topValue : float, buttomValue : float, style : GUIStyle, params options : GUILayoutOption[]) : float
参数
value在min和max之间的位置
size 能看见多大?
topValue滚动条顶端的值
bottomValue 滚动条底端的值
style 用于滚动条背景的风格。如果不设置,将使用当前GUISkin的horizontalScrollbar。
options 一个可选的布局选项的列表。它用来指定额外的布局属性。任何在这里设置的值将覆盖由style定义的设置。
参见:GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight.
返回float – 修改后的值。这可以通过拖动这个滚动条,或者单击两端的箭头来改变。
描述:制作一个垂直滚动条。滚动条可以用来滚动文档。大多数情况下,你会使用scollView代替。
找到额外的元素:
在滚动条两端的按钮将在当前皮肤中搜索“upbutton”和“downbutton”作为风格。滚动条的滑块(你拖动的东西)将搜索并使用名为thumb的风格。
//这将使用下面的风格名来决定该按钮的尺寸/位置
//MyVerticalScrollbarupbutton – 用于顶端按钮的风格名称
//MyVerticalScrollbardownbutton – 用于底端按钮的风格名称
//MyScrollbarthumb – 用于滑块的风格名称
scrollPos = GUILayout.HorizontalScrollbar(scrollPos, 1, 0, 100, “MyVerticalScrollbar”);
◆ static void VerticalSlider(value : floar, leftValue : float, rightValue : float, params options : GUILayoutOption[]) : float
◆ static void VerticalSlider(value : floar, leftValue : float, rightValue : float, slider : GUIStyle, thumb : GUIStyle, params options : GUILayoutOption[]) : float
参数
value滑杆显示的值。这个决定可拖动滑块的位置。
topValue滑杆顶端的值。
downValue 滑杆底端的值。
slider 用于显示拖动区域的GUIStyle。如果不设置,将使用当前GUISkin的horizontalSlider。
thumb 用于显示拖动块的GUIStyle。如果不设置,将使用当前的GUISkin的horizontalSliderThumb。
options 一个可选的布局选项的列表,它用来指定额外的布局属性。任何在这里设置的值将覆盖由style定义的设置。
参见:GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight.
◆ static void Width(width : float) : GUILayoutOption
描述:传递给控件的选项以便给它一个绝对宽度
◆ static void Window(id : int, screenRect : Rect, func : GUIWindowVoid, text : string) : Rect
◆ static void Window(id : int, screenRect : Rect, func : GUIWindowVoid, image : Texture) : Rect
◆ static void Window(id : int, screenRect : Rect, func : GUIWindowVoid, content : GUIContent) : Rect
◆ static void Window(id : int, screenRect : Rect, func : GUIWindowVoid, text : string, style : GUIStyle) : Rect
◆ static void Window(id : int, screenRect : Rect, func : GUIWindowVoid, image : Texture, style : GUIStyle) : Rect

◆ static void Window(id : int, screenRect : Rect, func : GUIWindowVoid, content : GUIContent, style : GUIStyle) : Rect
参数
id 用于每个窗口唯一的ID。这是用于接口的ID。
clientRect 屏幕上用于窗口的矩形区域。布局系统将试图使窗体在他内部。如果不能,它将调整矩形去适应它
func 在窗体内部创建GUI的函数。这个函数必须使用一个函数 – 当前创建GUI的窗体id。
image 用于在标题栏上显示图片的Texture。
content 用于这个窗口的文本,图形和提示。
style 使用的风格。如果不设置,将使用当前GUISkin的button风格。
options 一个可选的布局选项的列表,它用来指定额外的布局属性。任何在这里设置的值将覆盖由style定义的设置。
参见:GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight.
返回Rect – 窗口位于举行位置。这个可能与你传入的一个具有不同位置和尺寸。
描述:制作一个弹出窗口。它的内容是自动布局的。
窗口浮动在普通GUI控件之上。具有单击激活的特点并可以有选择的随意被用户拖动。不像其他的控件,你需要传递给他们一个独立的功能并放置在窗口中这儿是一个小例子来帮助你开始:
var windowRect = Rect(20, 20, 120, 50);

void OnGUI()
{
//注册窗口,注意第三个参数
windowRect = GUILayout.Window(0, windowsRect, DoMyWindow, “My Window”);
}

//制作窗口内容
void DoMyWindow(windowed : int)
{
//这个按钮将调整以适应物体
if(GUILayout.Button(“Hello World”))
print(“Get a click”);
}
你传入的客户区域只是作为一个参考,为了对窗口使用额外的限制。闯入一些额外的布局选项。用在这里的一个将覆盖尺寸的计算。这是一个简单的例子。
var windowRect = Rect(20, 20, 120, 50);

void OnGUI()
{
//注册窗口,这里我们指示布局系统必须使窗体为100像素宽。
windowRect = GUILayout.Window(0, windowRect, DoMyWindow, “My Window”, GUILayout.width(100));
}

//制作窗体内容
void DoMyWindow(windowID : int)
{
//这个按钮大小不能适应这个窗体
//通常,这个窗体将被扩展以便适应这个按钮。但是由于GUILayout.Width将只允//许窗体为100像素宽
if(GUILayout.Button(“Please click me a lot”))
print(“Get a click”);

}
GUISettings

用于GUI如何表现的通用设置。
这些被所有在GUISkin中的元素共享。
变量
◆ var cursorColor : Color
描述:文本域中光标的颜色。
◆ var cursorFlashSpeed : float
描述:文本域指示的闪动速度。
这个是闪动/秒。如果设置为0,闪动将被禁用。如果设置为-1,闪动速度将匹配系统的默认速度。
◆ var doubleClickSelectsWord : bool
描述:文本域中双击是否选择单词。
◆ var selectionColor : Color
描述:文本域中选择矩形的颜色。
◆ var tripleClickSelectsLine : bool
描述:文本域中点击鼠标三次是否选择整行文本。
GUIStyleState

为GUIStyle物体使用的给定状态的一个特定值。
GUIStyle包含用于显示GUI元素的所有值
变量
◆ var background : Texture2D
描述:在这个状态中被GUI元素使用的背景图片。
◆ var textColor : Color
描述:在这个状态中被GUI元素使用的文本颜色。
GUIStyle

GUI元素的风格位置
这个类包含一个GUI元素如何被渲染的所有信息。它包含用于字体,图标位置,背景图标,和间距的信息。它不包含关于它包含什么的信息 – 仅仅定义用这个风格渲染的文本如何被显示。它不定义这个元素可以发生什么交互,但是定义了用于交互的显示设置。
一个GUIStyle的设置。这是模仿一个CSS样式。它包含下列事项的设置:
背景图片
这些被渲染在空间后面。不同的图像可以被指定为正常显示。当用户将鼠标放在元素上时的显示,当使用者按下选择 – 以及当元素被打开,如触发按钮,下面的这些都被称为风格的状态。参见:normal, hover, active, onNormal, onHover, onActive – 这些包含每个状态的背景图片,文本颜色属性。
文本渲染
这个风格都可以定义一个字体渲染,以及文本对齐,换行和剪裁的设置,它也定了该风格元素不同状态的文本颜色参考 : font, alignment, wordWrap, normal, hover, active, onHover, onActive
图标位置
GUIStyle可以渲染文本,图标或者两者兼而有之。GUIStyle定义渲染时这两者间的相关位置(这可以强制它只显示他们其中之一)。参见:imagePosition
尺寸和间距选项
GUIStyle包含填充,边缘和边界。这些不严格地对应类似命名的CSS属性。一个GUIStyle可以选择的定义一个固定的宽度和高度。参见:margin, padding, border, fixedWidth, fixedHieght
变量
◆ var active : GUIStyleState
描述:空间被按下时的渲染设置。
◆ var alignment : TextAnchor
描述:文本对齐
◆ var border : RectOffset
描述:所有背景图片的边界。
这个对应于GUITexture的边界设置。它只影响渲染的背景图像,不影响定位。
◆ var clipOffset : Vector2
描述:用于该GUIStyle内容的剪裁偏移。
◆ var clipping : TextClipping
描述:当渲染的内容相对于给定的区域太大时做什么
◆ var contentOffset : Vector2
描述:用于该GUIStyle内容的像素偏移。
◆ var fixedHeight : float
描述:如果非0,任何用这个风格渲染的GUI元素将有这里指定的高度。
◆ var fixedWidth : float
描述:如果非0,任何用这个风格渲染的GUI元素将有这里指定的宽度。
◆ var focused : GUIStyleState
描述:元素获得键盘焦点时的渲染设置。
◆ var font : Font
描述:用于渲染的字体。如果null,当前的GUISkin的默认字体将被使用。
◆ var hover : GUIStyleState
描述:鼠标悬停在控件时的渲染设置。
◆ var imagePosition : ImagePosition
描述:GUIContent的图片和文本如何组合。
◆ var lineHeight : float
描述:这个风格一行文本的高度。以像素为单位。(只读)
◆ var margin : RectOffset
描述:以这种风格渲染的元素和任何其他GUI元素之间的边界。
这个只影响自动布局。(参见 : GUILayout)
◆ var name : string
描述:GUIStyle的名称。用来基于名称获取它们。
◆ var normal : GUIStyleState
描述:组建正常显示是渲染设置。
◆ var onActive : GUIStyleState
描述:元素被打开并具有键盘焦点时的渲染设置。
◆ var onFocused : GUIStyleState
描述:元素被打开并被按下时的渲染设置。
◆ var onHover : GUIStyleState
描述:控件被打开并且鼠标悬停在它上面时的渲染设置
◆ var onNormal : GUIStyleState
描述:控件被打开时的渲染设置。
◆ var overflow : RectOffset
描述:添加到背景图片的额外间距。
这可用于如果你的图片要投射一个阴影,并且向扩展背景图片超出使用这个风格的制定GUI元素的矩形时。
◆ var padding : RectOffset
描述:从GUIStyle边界到内容开始的间距
◆ var stretchHeight : bool
描述:这个风格的GUI元素可以被垂直拉伸以便更好的布局么?
◆ var stretchWidth : bool
描述:这个风格的GUI元素可以被水平拉伸以便更好的布局么?
◆ var wordWrap : bool
描述:文本换行?
这将导致任何包含的文本被换行以便适应控件的宽度。
构造函数
◆ static void GUIStyle() : GUIStyle
描述:
◆ static void GUIStyle(other:GUIStyle) : GUIStyle
描述:
函数
◆ void CalcHeight(content : GUIContent, width : float) : float
描述:当渲染content并制定width时这个元素的高度。
◆ void CalcMinMaxHeight (content : GUIContent, outminWidth : float, outmaxWidth : float) : void
描述:计算以这个风格渲染的content的最大最小宽度。
被GUILayout使用来正确处理换行。
◆ void CalcScreenSize(contentSize : Vector2) : Vector2
描述:计算用这个风格格式化的元素的尺寸,和一个给定的内容空格。
◆ void CalcSize(content : GUIContent) : Vector2
描述:如果内容使用这个风格渲染,计算某些内容的尺寸。
这个函数不考虑换行。要做到这点,你需要确定宽度,然后打调用CalcHeight分配计算出wordwrapped高度。
◆ void Draw(position : Rect, isHover: bool, isActive : bool, on : bool, hasKeyboardFocus : bool) : void
描述:
◆ void Draw(position : Rect, text : string, isHover: bool, isActive : bool, on : bool, hasKeyboardFocus : bool) : void
描述:用GUIStyle绘制一个文本字符串。
◆ void Draw(position : Rect, image : Texture, isHover: bool, isActive : bool, on : bool, hasKeyboardFocus : bool) : void
描述:用GUIStyle绘制图片。如果图片太大,它将被缩小。
◆ void Draw(position : Rect, content : GUIContent, isHover: bool, isActive : bool, on : bool, hasKeyboardFocus : bool) : void
描述:用GUIStyle绘制文本和图片。如果图片太大,它将被缩小。
◆ void Draw(position : Rect, content : GUIContent, controlID : int, on : bool = false) : void
描述:GUI代码中使用的主要绘制函数。
◆ void DrawCursor(position : Rect, content : GUIContent, controlID : int, Character : int) : void
描述:用选定的内容绘制这个GUIStyle
◆ void DrawWithTextSelection(position : Rect, content : GUIContent, controlID : int, firstSelectedCharacter : int, lastSelectedCharacter : int) : void
描述:用选定的内容绘制这个GUIStyle
◆ void GetCursorPixelPosition(position : Rect, content : GUIContent, cursorStringIndex : int) : Vector2
描述:获取给定字符串索引的像素位置。
◆ void GetCursorStringIndex(postion : Rect, content : GUIContent, cursorPixelPosition : Vector2) : int
描述:当用户在cursorPixelPosition处点击时获取光标位置(索引到内容文本)这部计算内容中任何图片。
类变量
◆ static var none : GUIStyle
描述:空GUIStyle的快捷方式。
这个风格不包含装饰而仅仅以缺省字体渲染所有东西。
void OnGUI()
{ //制作一个没有装饰的按钮
GUI.Button(“I’m very bare”, GUIStyle.none);
}
类方法
◆ static implicit void GUIStyle(str : string) : GUIStyle
描述:从当前皮肤获取一个名为GUI风格。
GUI

GUI类是Unity GUI的手工定位接口
参见:GUI tutorial

Hashtable

函数
◆ void Add(key:Object, value:Object):void
描述:添加指定的键和值到哈希表。
◆ void Clear():void
描述:数量被设置为0,并且从该集合中元素到其他对象的引用也将被释放,容量没有改变。///这个方法是O(n)操作,这里n是元素数量。
◆ void Contains(key:object):bool
描述:决定该哈希表中是否包含指定的键。
◆ void ContainsKey (key:object):bool
描述:从哈希表中移除指定键的元素。
◆ void Remove(key:object):void
描述:从哈希表中移除指定键的元素。
HostData

这个是用来保存单个主机信息的数据结构。
从master服务器取回的主机列表,使用这个类表示单个主机。
变量
◆ var comment:string
描述:一个多用途的注释(可以保存数据)

◆ var conneetedfPlaycrs:int
描述:当前连接的玩家
◆ var gameName:stting
描述:游戏的名称(像John Doe’s Game)
◆ var gameType:string
描述:游戏类型(像MyUniqueGameType)
◆ var ip:string[]
描述:服务器IP地址
◆ var passwordProtected:bool
描述:服务器需要密码吗?
◆ var playerLimit:int
描述:最大玩家限制
◆ var port:int
描述:服务器端口
◆ var nseNat:bool
描述:这个服务器需要NAT穿透吗?

input

到输入系统的接口。
使用这个类读取在Input Manager中设置的轴。
使用Input.GetAxis用下面的缺省轴读取轴心:"Horizontal"和"Vertical"被映射到摇杆,A,W,S,D和方向键,"Mouse X"和"Mouse Y"被映射到鼠标添量,“Fire1”,“Fine2”,"Fine3"映射到Ctrl,Alt,Cmd键和鼠标的三键或腰杆按钮。新的输入轴可以在Input Manager中添加。
如果你在为任何一种运动行为使用输入,那么使用Inpur.GetAxis。它给你一种平滑的可配置的输入,这个输入可以被映射到键盘,摇杆或鼠标。
使用Input.GetButton用于像事件一样的行为,不要将它用于移动,Input.GetAxis将使脚本代码更小更简单。
类变量
◆ static var anyKey:bool
描述:当前按住了任何键或鼠标按钮吗?(读取)
◆ static var anyKeyDown:bool
描述:用户按下任何键或鼠标按钮返回(Rend Only)。直到用户释放所用键/按钮并再次接下任何键/按钮时才返回真。
◆ static var input: String
描述:返回这一帧中键盘的输入(只读)。
只有ASCII可以包含在inputString中。
该字符串可以包含两个能被处理的特殊字符:字符“\b”代表退格。
符"\n"表示回车。
//显示如何从键盘读取输入
//(例如,用户输入它的名字)。
//你需要附加这个脚本到一个GUTText物体。void Updarc(){
for (var c;char in Input inputString){
//退格,移除最后一个字符
if(c=="\b") {
iftguiText.Lcngth.text.Substring(0,guiText.text Length-1);
}
//结束
efse if (e=="\n"){
prinr(“Uscr cntered his name:”+guiText,text);
}
//正常的文本输入.附加到尾部
elsc
}
guiText.text+=c;}}}
◆ static var mousePosition:Vcctor3
描述:当前鼠标在像素坐标下的位置。
屏幕或窗体的左下为(0,0),屏幕或窗体的左上为(Screen.width,Screen.height).
var particle:GamcObject,
void Update() {
if (lnput,GctButtonDown{“Firel”)){
//从当前鼠标坐标处创建一个射线
var ray=Camera.main.ScreenPointToRay(Input mousePositicn);
if{Physics.Raycast(ray)) {
//如果碰到创建一个粒子
Instontiatc(particlc,transfonn.position,transfonn.rotation);}}}
类方法
◆ static void CetAxis(axinName:string):float
描述:设置由axinName确实虚拟轴的值。
对于键盘和摇杆输入,这个值将在-1…1。
一个非常简单的行驶在x-z平面的汽车。var spced=10.0;
var cotatinnSpeed=100.0;void update()}
//获取水平和垂直轴,默认滴它们被映射到方向键
//这个值的范围在-1到1
var transtation=loput.getaxis(“vertical”)
spccd;
var rotation=inpul getaxis ("horizontal"rotarionspeed)
//使它以10米/秒速度移动而不是10米/帧
translation
=time delta time
//沿着物体的Z轴移动变换
transtorm.transtate(1010translation);
//绕着Y轴旋转
transform.rotate(0.rotation.0);}
//指定一个鼠标查看
var horizontalspccd=2.0;
var verticelspeed=2.0
void update()
{获取鼠标增量,这个没有在范围-1…1之间
var h=horizontalspeedinpul.getaxis(“mouse X”);
var v=verticalspeedinput.getaxis(“mouse Y”);
transform.rotate(v.h.0);}
◆static void getaxisraw(axisname:string):float
描述:设置由axisname确定虚拟轴的值,并且没有使用平滑过滤,
对于键盘和摇杆输入,这个值将在-1…1的范围内。因为输入没有被平滑,
总是-1,0或1.如果你想自己处理所有键盘输入的平滑,这个是很有用的。
void update(){
var speed=input.getaxisraw(“horizoatal”*time deta time);
transform rotate(0.speed.0);
}
◆static void getbutton(button name:string):bool
描述:当时由button name 确定的虚按钮被按住时返回真。
考虑自动开火-这个将在按钮被按住时一直返回真。
//如果每0.5秒实例化一个projcctile,
//如果firel按钮(默认为Ctrl)被按下
var projectile:game object;
var firerate=0.5;
private var nextfire=0.0;
void update()
{
fi(input getbutton(“firel”)&&time.time>nextfire){
nextfire=time.time+firerate;
clone=instantiate(peojecctile,teansform,position,transffrm,rotation);
}
}
只有使用这个实现事件行为例如,射击,使用input.getaxis 用于任意类型的移动行为
◆static void getbuttondown(button name:steing):bool
描述:当由:button name 确定的虚拟按钮被按下时返回真。
知道用户释放并再次按下时返回真。
//当用户按下firel按钮时实黎化一个projcctile
var projectile:gameobject;
void update(){
if(input getbution down(“firel”)){
elone=instantiate(projectile,transforrn,position.transforn.rotinon);
}
}
只使用这个实现事件行为例如,射击,使用lnput.GetAxis用于任意类型的移动行为。
◆ static void GetButton Up(buttonName:string):bool
描述:当由buttonName确定的虚拟按钮被释放时返回真.
直到用户按下按钮并再次松开时返回真。
//当用户按下Fire;按钮时实例化一个projectile.
var projectile:GameObject;
void Update O;
if(lnput GetButtonUp(“Firel”)){
clcne=lnstantiate{projectile,transtorm.position,transform.rotation);
}
}
只使用这个实现事件行为例如,射击。使用lnput.GetAXis用于任意类型的移动行为,
◆ static funcrion GetKey(name:string):bool
描述:当用户按住由name确定的键时返回真,考虑自动开火。
键标识列表参考输入管理器。在处理输入时建议使用lnput.GetAxis和lnput.GetButton
因为它允许端用户定义这些键.
funcrion Update(){
if(lnput.GetKey(“up”)){
print(“up arrow key is held down”);
}
if(lnput.GetKey(“down”))
}
print(“down arrow key is held down”);
}
}
◆ static junction GetKey(key:keyGode):bool
描述:当用户按住由key KeyCode枚举参数确定的键时返回真.
funcrion Update(){
if(lnput.GetKey(KeyCode.UpArrow))}
print(“up arrow key is held down”);
}
if(lnput.GetKey(KeyCode.DownArrow)){
print(“down arrow key is held down”);
}
}
◆ static void GetkeyDown(name:string):bool
描述:当用户开始按下由name确的键时返回真.
直到用户释放按钮并再次按下时返回真.
键标示列表参考lnput Manager.在处理输入时建议使用lnput.GetAxis和Input.GetBUtton
void Update();
if(input GetkeyDown(“space”))
print(“space key was pressed”);
}
}
static void GetKeyDown(Key:KeyCode):bool
描述:当用户按下由Key KeyCode枚举参数确定的键时返回真.
void Update();
if{lnput GetKeyDown(KeyCode.Space))
print(“space key was pressed”);
}
}
◆ static void GetKeyUp(name:sting):bool
描述:当用户释放由name确定的键时返向真.
直到用户按下按钮并再次松开时返向真。
键标示列表参考lntpot Manager.在处理输入时建议使用lnput.GetAxis和lnput.GetButton
因为它允许端用户定义这些键.
void Update();{
if(lnput.GetKeyUp(“space”);
}
}
◆ static void GetKeyUP(Key:KeyCode):bool
描述:当用户释放由Key KeyCde 校举参数确定的键时返回真.
void Update(){
if(lnput,GetKeyUp(KeyCode.Space));
print(“space key was feleased”);
}
}
◆ statie void GetMouseButton(button:int):bool
描述:返回给定的鼠标按钮是否被按住。
/button/值为0表示左键,1表示右键,2表示中键.
◆ statie void GetMouseButtonDown(button:int)bool
描述:用户按下给定的鼠标按钮时返回真.
直到用户释放按钮并再次按下它时才返回真.button值为0表示中键左键,1表示右键,2表示中键.
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();
}

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;
继承的成员
继承的变量
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类组件。

Camera
类,继承自Behaviour。Camera是一个设备,玩家通过它来看世界。屏幕空间点用像素定义。屏幕左下为(0,0);右上是(pixelWidth.pixelHeight)。z的位置是以世界单位衡量到相机的距离。视口空间点是归一化的并且是相对于相机的。相机左下为(0,0);右上是(1,1)。z的位置是以世界单位衡量到相机的距离。世界空间点是以全局坐标定义的(例如Transform.position)。
参见:camera component
◆ 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);
}
}
◆ 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之后确定。
◆ 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。
变量
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.deltaTime*1);
}
为了得到从最后一个调用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);
}
}

用上述着色器绘制一个全屏四边形
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;
}
}

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;
}
DontDestroyOnLoad 加载新场景时确保物体target不被自动销毁。
Skybox
类,继承自Behaviour
Skybox component的脚本接口
天空盒只有material属性
参见:skybox component
变量
◆var material:Material
描述:该天空盒使用的材质。
◆ var rotation: Quaternion
描述:刚体的旋转
这个与设置transform.rotation相同,然而rotation只在物理的最后被应用到变换。如果
你想连续移动一个刚体或运动学刚体,使用MovePosition和MoveRotation。
void Start(){
rigidbody.rotation=Quaternion.identity;
}
◆ var sleepAngularVelocity: float
描述:角速度,低于该值的物体将开始休眠。(默认0.14)范围{0, infinity}
参考Rigidbody Sleeping获取更多信息。
◆ var sleepVelocity: float
描述:线行速度,低于该值的物体将开始休眠。(默认0.14)范围{0, infinity}
参考Rigidbody Sleeping获取更多信息。
Rigidbody.sleepingVelocity=0.1;
◆ var solverIterationCount: int
描述:允许你覆盖每个刚体的求解迭代数。
solverIterationCount决定关节和接触点如何精确地计算。如果出现链接的物体震荡和行
为怪异,为solver Iteration Count设置一个较高的值将改善他们的稳定性。
rigidbody.solverIterationCount=10;
◆ var useConeFriction: bool
描述:用于该钢铁的立锥摩擦力
这确保所有接触包含的行为将使用锥摩擦力。这对于性能有负面影响。默认这个是关
闭的,一个更快和更好的被称为金字塔摩擦的近似方法被使用。在大多数情况下建议保留
这个值为关闭。
◆ var useGravity: bool
描述:控制重力是否影响这个刚体
如果设置为假刚体的行为会像是在外层空间。
在所有进入这个碰撞器的所有刚体上禁用重力
void OnTriggerEnter(other: Collider)
{
if(other.attachedRigidbody)
{
other.attachedRigidbody.useGravity=false;
}
}
//启用时将这个碰撞器改变为一个触发器
collider.isTrigger=true;
◆ var velocity: Vector3
描述:刚体的速度向量
在大多数情况下,你不应该直接修改速度,因为这会导致不真实的结果。不要再每个
物体步设置物体的速度,这将导致不真实的物理模拟。一个典型的例子是,当你在FPS中
使用跳的时候,改变速度,因为你想立即改变速度。
void FixedUpdate(){
if(Input.GetButtonDown(“Jump”)){
rigidbody.velocity.y=10;}
}
◆ var worldCenterOfMass: Vector3
描述:世界空间中刚体的质量重心(只读)。
函数
◆ void AddExplosionForce (explosionForce : float, explosionPosition : Vector3,
explosionRadius : float, upwardsModifier : float = 0.0F, mode : ForceMode =
ForceMode.Force): void
描述:应用一个力到刚体来模拟爆炸效果。爆炸力将随着到刚体的距离线形衰减。
这个功能也对人偶有很好的作用。如果radius为0,将使用全部的力不论position距
离刚体多远.upwardModifier就像从物体下方使用这个力. 这个是非常有用的,以为爆炸
将向上抛这个物体而不是将它们推向一边,这个看起来非常的酷。值2将应用一个力在低
于物体2米处,然而不会改变实际的爆炸位置. explosionPositon是爆炸力被应用的位置.
explosionRadius是爆炸的半径,超过explosionRadius距离的刚体将不会受到影响.
var radius=5.0;
var power=10.0;
void Start(){
//应用一个爆炸力到所有附加的刚体上
var explosionPos=transform.position;
var colliders: Collider[]=Physics.OverlapSphere(explosionPos, radius);
for (var hit in colliders){
if(!hit)
continue;
if(hit.rigidbody){
hit.rigidbody.AddExplosionForce(power.explosionPos, radius, 3.0);
}
}
}
◆ void AddForce(force: Vector3, mode: ForceMode=ForceMode.Force): void

描述:为刚体添加一个力。作为结果刚体将开始移动。
//在全局坐标空间中添加一个向上的力
void FixedUpdate(){
rigidbody.AddForce(Vector3.up10);
}
◆ void AddForce(x: float, y: float, z: float, mode: ForceMode=ForceMode.Force): void
描述:为刚体添加一个力,作为结果刚体将开始移动。
//全局坐标空间中添加一个向上的力
void FixedUpdate(){
rigidbody.AddForce(0,10,0);
}
如果你想在多针帧中使用力,你应该在FixedUpdate中而不是Update使用使用它。
◆ void AddForceAtPosition(force: Vector3, position: Vector3, mode: ForceMode=
ForceMode.Force): void
描述:在位置position处使用force。这个将应用力矩和力到这个物体上。
对于真的的效果position应该近似地在刚体表面的范围内. 这个最常用于爆炸。当使用
爆炸的时候最好应用力到多帧而不是一帧中。主要当position远离刚体的中心时,使用的力
矩阵将非常不真实。
void ApplyForce(body: Rigidbody){
direction=body.transform.position-transform.position;
body.AddForceAtPosition(direction.normalized, transform.position);
}
◆ void AddRelativeForce(force: Vector3, mode: ForceMode=ForceMode.Force): void
描述:相对于它的坐标系统添加一个力到刚体。
作为结果刚体将开始移动。
//沿着自身z轴向前移动刚体
void FixedUpadate(){
rigidbody.AddRelativeForce(Vector3.forward
10);
}
◆ void AddRelativeForce(x: float, y: float, z: float, mode: ForceMode=
ForceMode.Force): void
描述:相对于它的坐标系统添加一个力到刚体。
作为结果刚体将开始移动。
//沿着自身z轴向前移动刚体
void FixedUpadate(){
rigidbody.AddRelativeForce(0,0,10);
}
如果你想在多帧中使用力,你应该在FixedUpdate中而不是Update使用使用它。
◆ void AddRelativeTorque(torque: Vector3, mode: ForceMode=ForceMode.Force):
void
描述:相对于刚体自身的坐标系统,添加一个力矩到刚体。
刚体将绕着torque轴旋转。
//绕着全局y轴旋转刚体
void FixedUpadate(){
rigidbody.AddRelativeForce(Vector3.up10);}
◆ void AddRelativeTorque(x: float, y: float, z: float, mode: ForceMode=
ForceMode.Force): void
描述:相对于刚体自身的坐标系统,添加一个力矩到刚体。
刚体将绕着torque轴旋转。
//绕着自身y轴旋转刚体
void FixedUpadate(){
rigidbody.AddRelativeForce(0,10,0);}
如果你想在多帧中使用力,你应该在FixedUpdate中而不是Update使用使用它。
◆ void AddTorque((torque: Vector3, mode: ForceMode=ForceMode.Force): void
描述:为刚体添加一个力矩。
刚体将绕着torque轴旋转。
//绕着全局y轴旋转刚体
void FixedUpadate(){
rigidbody.AddTorque(Vector3.up
10);
}
如果你想在多帧中使用力,你应该在FixedUpdate中而不是Update使用使用它。
◆ void AddTorque(x: float, y: float, z: float, mode: ForceMode=ForceMode.Force):
void
描述:为刚体添加一个力矩。
刚体将绕着torque轴旋转。
/绕着全局y轴旋转到刚体
void FixedUpadate(){
rigidbody.AddTorque(0,10,0);
}
◆ void ClosestPointOnBounds(position: Vector3): Vector3
描述:到碰撞器包围盒上最近点。
这可以用来计算受到爆炸伤害时的伤害点数。或计算作用到刚体表面上一个点的爆炸
力。
var hitPoints=10.0;
void ApplyHitPoints(explostionPos: Vector3, radius: float){
//从爆炸位置到刚体表面的距离
var ClosestPoint=rigidbody.ClosestPointOnBounds(explosionPos);
var distance=Vector3f.Distance(closestPoint, explosionPos);
//伤害点数随着到伤害的距离而降低
var damage=1.0-Mathf.Cllamp01(distance/radius);
//这是我们要用的最终伤害点数。 10 at maximum
damage*=10;
//应用伤害
hitPoints=damage;
}
◆ void GetPointVelocity(worldPoint: Vector3): Vector3
描述:刚体在世界空间中worldPoint点处的速度.
GetPointVelocity在计算速度的时候将考虑刚体的angularVelocity。
//打印车轮的速度
point=transform.InverseTransformPoint(Vector3(0,-2,0));
var velocity=rigidbody.GetPointVelocity(point);
print(velocity.magnitude);
◆ void GetRelativeVelocity(relativePoint: Vector3): Vector3
描述:相对于刚体在relativePoint处的速度。
GetRelativePointVelocity在计算速度的时候将考虑刚体的angularVelocity。
//打印车轮的速度
var relativeVelocity=rigidbody.GetRelativePointVelocity(Vector3(0,-2,0));
print(relativeVelocity.magnitude);
◆ void IsSleeping(): bool
描述:刚体处于休眠?
参考Rigidbody Sleeping获取更多信息。
if(rigidbody.IsSleeping())
print(“Sleeping”);
◆ void MovePosition(position: Vector3): void
描述:移动刚体到position.
对于运动学刚体,它基于刚体的运动应用摩擦力。这个让你模拟刚体位于移动平台之
上的情况。如果你想其他的刚体与运动学刚体交互,你需要在FixedUpdate函数中移动它。
var speed=Vector3(3,0,0);
void FixedUpdate()
{
rigidbody.MovePosition(rigidbody.position+speedTime.deltaTime);
}
◆ void MoveRotation(rot: Quaternion): void
描述:旋转刚体到rotation.
对于运动学刚体,它基于刚体的运动应用摩擦力。这个让你模拟刚体位于移动/旋转平
台之上的情况。如果你想其他的刚体与运动学刚体交互,你需要在FixedUpdate函数中移
动它。
var eulerAngleVelocity=Vector3(0,100,0);
void FixedUpdate()
{
var deltaRotation=Quaternion.Euler(eulerAngleVelocity
Time.deltaTime);
rigidbody.MoveRotation(rigidbody.rotation*deltaRotation);
}
◆ void SetDensity(density: float): void
描述:基于附加的刚体和固定的密度设置质量。
这个可以用来设置质量为随着碰撞器的尺寸而缩放。
rigidbody.SetDensity(1.5);
◆ void Sleep(): void
描述:强制刚体休眠至少一帧
一个常见的使用是从Awake中调用它以便使刚体在启用的时候休眠。参考Rigidbody
Sleeping获取更多信息。
rigidbody.Sleeping()
◆ void WakeUp(): void
描述:强制刚体苏醒
rigidbody.WakeUp()
参考Rigidbody Sleeping获取更多信息。
消息传递
◆ void OnCollisionEnter(collisionInfo: Collision): void
描述:当这个碰撞器/刚体开始碰撞另一个刚体/碰撞器时OnCollisionEnter被调用。
相对于OnTriggerEnter,OnCollisionEnter传递Collision类而不是Collider.Collision类包
含接触点,碰撞速度等细细。如果在函数中不使用collisionInfo,省略collisionInfo参数以避
免不必要的计算。主要如果碰撞器附加了一个非动力刚体,也只发送碰撞事件。
void OnCollisionEnter(collision:Collision){
//调试绘制所以的接触点和法线
for(var contact:ContactPoint in collision.contacts){
Debug.DrawRay(contact.point, contact.normal, Color.white);
}
//如果碰撞物体有较大的冲劲就播放声音
if(collision.relativeVelocity.magnitude>2)
audio.Play();
}
//一枚手榴弹
//-在击中一个表面时初始化一个爆炸预设
//-然后销毁它
var explosionPrefab: Transform;
void OnCollisionEnter(collision: Collision){
//旋转这个物体使y轴面向沿着表面法线的方向
var contact-collision.contacts[0];
var rot=Quaternion.FormToRotation(Vector3.up, contact.mormal);
var pos=contact.point;
Instantiate(explosionPrefab, pos, rot);
//销毁这个发射物
Destroy(gameObject);
}
◆ void OnCollisionExit(collisionInfo: Collision): void
描述:当这个碰撞器/刚体停止碰撞另一个刚体/碰撞器时OnCollisionExit被调用。
相对于OnTriggerExit,OnCollisionExit传递Collision类而不是Collider.Collision类包含
接触点,碰撞速度等细细。如果在函数中不使用collisionInfo,省略collisionInfo参数以避免
不必要的计算。主要如果碰撞器附加了一个非动力刚体,也只发送碰撞事件。
void OnCollisionExit(collision: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(collision:Collision){
void OnCollisionEnter(collision:Collision){
//调试绘制所以的接触点和法线
for(var contact:ContactPoint in collision.contacts){
Debug.DrawRay(contact.point, contact.normal, Color.white);
}
继承的成员
继承的变量
transform 附加到这个GameObject的Transform(如果没有为null)。
rigidbody 附加到这个GameObject的Rigidbody(如果没有为null)。
camrea 附加到这个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的激活物体。

FindObjectsOfType 返回第一个类型为type的激活物体。
operator== 比较两个物体是否相同。
operator != 比较两个物体是否不相同。
DontDestroyOnLoad 加载新场景时确保物体target不被自动销毁。
TextMesh
类,继承自Component
text mesh component的脚本接口
参见:text mesh component.
变量
◆ var font: Font
描述:使用的Font.
参见:text mesh component.
//设置附加的文本网格的文本
var newFont: Font;
GetComponent(TextMesh).font=newFont;
◆ var font: string
描述:显示的文本.
参见:text mesh component.
//设置附加的文本网格的文本
GetComponent(TextMesh).text=“Hello World”;
继承的成员
继承的变量
transform 附加到这个GameObject的Transform(如果没有为null)。
rigidbody 附加到这个GameObject的Rigidbody(如果没有为null)。
camrea 附加到这个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)。
rigidbody.velocity=transform.right*10;
PhysicsMaterial
类,继承自Object
载体材质描述:如何处理物体碰撞(摩擦,弹性)
参见:Collider
变量
◆ var bounceCombine: PhysicsMaterialCombine
描述:决定弹力是如何组合的。
传统上弹性属性依赖于两种相互接触的材质的组合。然而在游戏中这是不切实的。可以
使用组合模式来调整两个材质的弹性如何被组合。
collider.material.bounceCombine=FrictionCombineMode.Average;
◆ var bouncyness: float
描述:表面的弹力如何?0值没有弹力。1值没有能力损失的反弹。
collider.bouncyness=1;

GUISkin
类,继承自ScriptableObject
变量
◆ var box: GUIStyle
描述:用于GUI.Box控件的缺省风格
◆ var button: GUIStyle
描述:用于GUI.Button控件的缺省风格

Shader
类,继承自Object
用于所以渲染的着色器脚本
大多数高级的渲染都是通过Material类控制的. Shader类类最常用于检查一个着色器时
否能够运行在用户的硬件上(isSupported属性)并根据名称找到着色器(Find方法).
参见:Material类,Materials,ShaderLab documentation.
变量
◆ var isSupported: bool
描述:这个着色器能够运行在端用户的显卡上?(只读)
如果这个着色器重的设置和任何fallback函数被支持,返回真。在实现特定的效果时,
最常使用这个。例如,Unity Pro中的image effects,如果这个着色器不被支持那么Unity将
自动禁用它们。
//如果材质的着色器不被支持,禁用渲染器
if(!renderer material.shader.isSupported)

TerrainData
类,继承自Object
TerrainData类存储高度图,细节网格位置,树实例,和地形纹理alph图,
Terrain组件链接地形数据并渲染它。
变量
◆ var heightmapHeight: int
描述:采样的地形高度(只读)
◆ var heightmapWidth: int
描述:采样的地形宽度(只读)
◆ var size: Vector3
描述:地形在世界单位下的总大小
Cubemap
类,继承自Texture
处理立方贴图的类,用这个来创建或修改已有的cube map assets.
变量
◆ var format: TextureFormat
描述:纹理中像素数据的格式(只读)
使用这个确定纹理的格式。
构造函数
◆ static void Cubemap(size: int. format: TextureFormat, mipmap: bool): Cubemap
描述:创建新的空立方贴图纹理;

MovieTexture
类,继承自Texture
Movie Textures是可以播放电影的纹理
它们可以用于过场动画电影序列,或者渲染电影到场景中。
变量
◆ var audioClip: AudioClip
描述:返回属于MovieTexture的AudioClip.
注意这是一个特定的AudioClip它总是与电影同步播放音频。在编辑器重如果你将电影
的audioClip附加到一个源上,它将在电影播放的时候自动开始播放,否则你必须收动开
始它,剪辑只能被附加到一个AudioSource。

PlayerPrefs

在游戏会话中保持并访问玩家偏好设置。
在Mac OS X上PlayerPrefs存储在-/Library/PlayerPrefs文件夹,名文unity/[company
name][product name].plist,这里company和product是在Project Setting中设置的,相同
的plist用于在编辑器中运行的工程和独立模式.
在Windows独立模式下,PlayerPrefs被存储在注册表的HKCU Software[company
name][product name]键下,这里company和product是在Project Setting中设置的.
在Web模式,PlayerPrefs存储在Mac OS X的二进制文件
-/Library/Preferences/Unity/WebPlayerPrefs中和Windows的
%APPDATA%\Unity\WebPlayerPrefs中,一个偏好设置文件对应一个web播放器URL并且
文件大小被限制为1兆。如果超出这个限制,SetInt,SetFloat和SetString将不会存储值并相处一个PlayerPrefsException.

KeyCode
KeyCode是由Event.keyCode返回的。这些直接映射到键盘上的物理键。

Backspace 退格键 Delete Delete键 TabTab键 Clear Clear键 Return 回车键
Pause 暂停键 Escape ESC键 Space 空格键 Keypad0 小键盘0 Keypad1 小键盘1
Keypad2 小键盘2 Keypad3 小键盘3 Keypad4 小键盘4Keypad5 小键盘5
Keypad6 小键盘6 Keypad7 小键盘7Keypad8 小键盘8 Keypad9 小键盘9
KeypadPeriod 小键盘“.” KeypadDivide 小键盘“/”KeypadMultiply小键盘“*”
KeypadMinus 小键盘“-” KeypadPlus 小键盘“+” KeypadEnter 小键盘“Enter”
KeypadEquals 小键盘“=”UpArrow 方向键 DownArrow 方向键下RightArrow 方向键右
LeftArrow 方向键左 Insert Insert键Home Home键EndEnd键 PageUp PageUp键 PageDown PageDown键F1功能键F1 F2功能键F2 F3功能键F3 F4功能键F4F5功能键F5
F6功能键F6F7功能键F7 F8 功能键F8 F9 功能键F9 F10 功能键F10 F11 功能键F11
F12 功能键F12 F13 功能键F13 F14 功能键F14F15 功能键F15
Alpha0 按键0 Alpha1 按键1 Alpha2 按键2 Alpha3 按键3Alpha4 按键4
Alpha5 按键5 Alpha6 按键6Alpha7 按键7Alpha8 按键7Alpha9 按键9
Exclaim ‘!’键 DoubleQuote双引号键 Hash Hash键Dollar ‘$’键
AmpersandAmpersand键 Quote 单引号键LeftParen 左括号键RightParen右括号键
Asterisk ‘ * ’键Plus ‘ + ’键 Comma ‘ , ’键 Minus ‘ - ’键
Period ‘ . ’键 Slash ‘ / ’键 Colon ‘ : ’键Semicolon‘ ; ’键
Less ‘ < ‘键Equals ‘ = ‘键Greater ‘ > ‘键 Question ‘ ? ’键
At ‘@’键 LeftBracket‘ [ ‘键 Backslash ‘ \ ’键RightBracket‘ ] ’键
Caret ‘ ^ ’键Underscore‘ _ ’键BackQuote‘ ` ’键A ‘a’键B ‘b’键
C ‘c’键 D ‘d’键 E ‘e’键 F ‘f’键 G ‘g’键 H ‘h’键 I ‘i’键 J ‘j’键 K ‘k’键L ‘l’键 M ‘m’键 N ‘n’键 O ‘o’键 P ‘p’键
Q ‘q’键 R ‘r’键S ‘s’键 T ‘t’键 U ‘u’键 V ‘v’键 W ‘w’键
X ‘x’键Y ‘y’键 Z ‘z’键 Numlock Numlock键 Capslock 大小写锁定键
ScrollLockScroll Lock键 RightShift 右上档键LeftShift 左上档键RightControl右Ctrl键
LeftControl左Ctrl键RightAlt 右Alt键LeftAlt 左Alt键LeftApple 左Apple键
LeftWindows左Windows键RightApple右Apple键RightWindows右Windows键
AltGr Alt Gr键Help Help键Print Print键SysReq Sys Req键Break Break键
Mouse0 鼠标左键Mouse1 鼠标右键Mouse2 鼠标中键Mouse3 鼠标第3个按键
Mouse4 鼠标第4个按键Mouse5 鼠标第5个按键Mouse6 鼠标第6个按键
JoystickButton0手柄按键0JoystickButton1手柄按键1 JoystickButton2手柄按键2
JoystickButton3手柄按键3 JoystickButton4手柄按键4 JoystickButton5手柄按键5
JoystickButton6手柄按键6 JoystickButton7手柄按键7 JoystickButton8手柄按键8
JoystickButton9手柄按键9 JoystickButton10手柄按键10 JoystickButton11手柄按键11
JoystickButton12手柄按键12 JoystickButton13手柄按键13 JoystickButton14手柄按键14
JoystickButton15手柄按键15JoystickButton16手柄按键16JoystickButton17手柄按键17 JoystickButton18手柄按键18 JoystickButton19手柄按键19

Light如何被渲染。
参见: light组件

◆ LightRenderMode.Auto
描述: 自动选择渲染模式。
选择是否渲染这个Light为像素光或者顶点光源(建议缺省)。
// 设置光源的渲染模式为自动
light.renderMode = LightRenderMode.Auto;
参见: light组件
◆ LightRenderMode.ForcePixel
描述: 强制Light为像素光源。
只将这个用于真正重要的光源,例如一个玩家的手电筒。
// 强制光源为像素光源
light.renderMode = LightRenderMode.ForcePixel;
参见: light组件
◆ LightRenderMode.ForceVertex
描述: 强制Light为顶点光源。
这个选项对于背景光或远处的光照是非常好的。
// 强制光源为顶点光源
light.renderMode = LightRenderMode.ForceVertex;
参见: light组件
LightShadows
Light的阴影投射选项。
参见: light组件

◆ LightShadows.Hand
描述:投射“hard”阴影(没有阴影过滤)
//设置光源为投射硬阴影
Light.shadows=LightShadows.Hard;
参见:light component
◆LightShadows.None
描述:不投射阴影(默认)
//设置光源为不投射阴影
Light.shadows=lightshadows.None;
参见:light component
◆LightShadows.Soft
描述:投射Soft阴影(带有4倍PCF过滤)
//设置光源为投射4倍过滤的软阴影阴影
Light.shadows=lightshadows. Soft;
参见:light component
LightType
Light的类型。
参见:Light.typelight component

◆LightType.Directional
描述:这个光源是一个直射光源。
参见:Light.type, light component
//制作一个直射光源
Light.type=LightType.Directional;
◆LightType.Point
描述:这个光源是一个点光源。
参见:Light.type,light component
//制作一个直射光源
Light.type=LightType.Point;
◆LightType.Spot
描述:这个光源是一个透射光源。
参见:Light.type, light component
//制作一个透射光源
Light.type=LightType.Spot;
MonoScript
类,继承自TextAsset
表示脚本资源
注意:这是一个编辑器类,为了使用它你必须放置脚本到工程文件夹的Assets/Editor中,编辑器类位于UnityEditor命名空间因此对于C#脚本你需要在脚本开始位置添加”usingUnityEditor”
这个类表示存储在工程中的C#,javaScript和Boo文件
函数
void GetClass () : System.Type
描述:返回由这个脚本实现的类的System.Type对象

先介绍一些基本函数(具体用法自己查文档):
1.场景切换:Application.LoadLevel(“Level1”)
2.读取场景时不移除物体:DontDestroyOnLoad(object) //会保留该物体的任何数据,包括坐标,可以用于任何物体,也包括GUI哦,可以灵活运用。
3.设置该物体激活状态(移除物体前先执行这个,预防组件在运行状态不允许移除):SetActiveRecursively(bool)
4.移除物体(移除不掉时候先设置他的激活状态为false):Destroy()
5.创建prefab或者其他object的克隆:Instantiate(xxx)
然后介绍一些基础知识:

1.文件间传递可以用static静态类型来桥接数据(见我另外一篇blog),当然场景间传递也可以。
2.注意引用与值传递!!a.如果你传的是个引用类型,但引用的东西却是场景实物,那你就得用上面第二个函数保留该物体(否则下一场景这个引用所指的内容就不存在了,会出错的),这样在新场景中可以直接继承他的所有即时属性;b.当然如果你传的这个引用指向一个prefab,那就不存在这问题了,这里如果当前场景已经改变了角色数据,那你传递引用后也要传递被改变的属性,好在新的场景中重新赋值给这个prefab的克隆体。(如果你用文件记录角色状态,那用b方法是最好的)
最后是实例讲解:

目标:场景1选择好一辆车 GO-> 场景2使用选中的车比赛
流程介绍:
场景1(车库):

选车(有好几辆车可以选的),然后将这个车的prefab引用传递到一个js文件的static变量里储存
进入场景2:

在原先地面指定的坐标克隆刚才引用的prefab,完成目标(注意代码设置一些数据,比如摄像机跟踪参数等)。
对手车是随机的^ ^原理一样,只不过不需要传值,订好坐标随机产生AI就可以。

现在就恨自己没钱买MacBook pro和iphone了,游戏基本成型,就差iphone上的手感调试、功能性能测试和界面调试了。


  1. 0 ↩︎

Unity3D脚本学习1相关推荐

  1. Unity3D课程学习笔记(一)

    Unity3D课程学习笔记(一) 1.解释游戏对象(GameObjects)和资源(Assets)的区别与联系 官方文档对Assets的解释:An asset is representation of ...

  2. Unity3D——脚本编程

    在本章中我们将学习的是Unity3D的脚本编程,Unity3d目前支持javascript,c#,Boo这三种脚本的开发!由于本人开发过C++所以就直接用C#来进行unity3d的脚本开发!在脚本开发 ...

  3. Python for虚幻引擎编辑器工具脚本学习教程

    Python for Unreal Engine Editor Tools Scripting MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz,2 Ch 语言:英语+中英 ...

  4. 按键精灵脚本 php,HTML_按键精灵 脚本-学习VBS的一个不错的教程,今天我就从总体上对VBS进行介 - phpStudy...

    按键精灵 脚本-学习VBS的一个不错的教程 今天我就从总体上对VBS进行介绍,希望能给大家一个直观的印象.另外,讲解与按键官网的按键精灵教程(李悦制作)相结合,帮大家看懂这个东东. 一.概述 要让计算 ...

  5. Unity3D脚本中文系列教程(七)

    http://dong2008hong.blog.163.com/blog/static/4696882720140311445677/?suggestedreading&wumii Unit ...

  6. Shell脚本(学习笔记1)

    shell脚本学习记录 为什么学习shell脚本? 在一些复杂的linux维护工作过程中,大量的重复性的输入和交互操作不但费时费力,而且容易出现错误:然而编写shell脚本程序,可以批量处理.自动化的 ...

  7. linux用两种方法找到cuond,很基础的Linuxshell脚本学习.doc

    很基础的Linuxshell脚本学习 详细介绍Linux shell脚本基础学习(一) 2010-03-05 10:24 佚名 互联网 我要评论(9) 字号:T | T Linux shell脚本基础 ...

  8. BASH命令和SHELL脚本学习

    BASH命令和SHELL脚本学习 转载于:https://www.cnblogs.com/huolong123/p/6228049.html

  9. Unity3D脚本中文系列教程(五)

    http://dong2008hong.blog.163.com/blog/static/4696882720140302848544/?suggestedreading&wumii Unit ...

  10. linux perl 单例模式,Perl脚本学习经验(三)--Perl中ftp的使用

    使用use Net::FTP; Demo: my $Server = '192.168.1.1'; my $User = 'admin'; my $Password = 'admin'; my $ft ...

最新文章

  1. 6. 管理你的css和js文件 - 从零开始学Laravel
  2. 【OpenGL】用OpenGL shader实现将YUV(YUV420,YV12)转RGB-(直接调用GPU实现,纯硬件方式,效率高)...
  3. 佛系程序员的月薪五万指南
  4. 掌握常见的内部排序方法(插入排序,冒泡排序,选择排序,快速排序,堆排序,希尔排序,归并排序,基数排序等)...
  5. 【Pytorch神经网络实战案例】20 基于Cora数据集实现图卷积神经网络论文分类
  6. Springboot+Mysql企业员工绩效工资管理系统
  7. Java 网络编程(三) 创建和使用URL访问网络上的资源
  8. MySQL优化步骤和my.cnf优化配置
  9. 算法:翻转整数7. Reverse Integer
  10. qt将tablewidget导出为excel
  11. 【Unity3D应用案例系列】Unity3D中实现《3D照片墙》
  12. Oracle使用sqluldr2
  13. Windows10怎么下载MySQL,详解Windows10下载mysql的教程图解
  14. 手绘风格的原型图制作工具
  15. Blender导出json格式插件安装
  16. Python随记(27)bs4爬取豆瓣250
  17. Apple苹果ID怎么修改地区经验之谈
  18. ATECC508A芯片开发笔记(二):开发准备之 CryptoAuthLib 库简介与移植
  19. 【H5】 svg画扇形饼图
  20. iOS 【适配iPhone XR/iPhone XS Max】

热门文章

  1. 基于auto.js的网课自动签到软件以及facerig控制摄像头内容及auto.js新手教学
  2. mysql认证考试_MySQL 8 OCP(1Z0-908)认证考试题库原题(第12题)
  3. 在linux中加固mysql_linux安全加固十六法则
  4. UtIL DBUtil
  5. OpenWrt--高通QCA9563添加多wan口方法
  6. 字符串分割的时候用StringUtils.split()方法代替string自带的split,特殊字符不用转义
  7. 爱搞事情:关于黑苹果Intel网卡驱动这件事
  8. 这几款好加密软件让你不再担心担心隐私泄露!
  9. 计算机系统动态库修复,xp系统恢复dll动态链接库的修复步骤
  10. 城市数字孪生解决方案