Unity3D脚本学习2

Unity3D脚本参考2
一、 脚本概览
这是一个关于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的脚本附加到场景的游戏物体上。
int foo = 5;
void DoSomething ( param : String) {
print(param + " with foo: " + foo);
}
1.通过检视面板赋值引用
你可以通过检视面板赋值变量到任何物体
//变换拖动到target的物体
Transform target;
void Update ()
{
target.Translate(0, 1, 0);
}
你也可以在检视面板中公开到其他物体的引用,下面你可以拖动一个包含的游戏物体到检视面板中的target槽。
//设置在检视面板中赋值的target变量上的foo,调用DoSomething
Script target ;
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 int 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让你调用一个脚本函数,这个脚本是动画播放的一部分。
变量
◆ 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 ( ) ;
}
}
Array

数组允许你将多个对象存储在一个变量中。
Array类只能用于JavaScript 。更多关于C#或JavaScript中ArrayLists ,字典或哈希表的信息参考MSDN 。
这是一个基本的例子,说明可以使用一个数组类做什么
void Start( )
{
var arr = new Array ( ) ;
arr.Push (“Hello”); //添加一个元素
Print(arr[ 0]); //打印第一个元素
arr length = 2 ; //调整数组大小
arr [ 1] = “World”; //将“World”赋给第二个元素
for (var value : String in arr) //遍历这个数组
{
Print ( value );
}
}
Unity中有两种类型的数组,内置数组和普通的JavaScript数组。
内置的数组(原始的.NET数组),是非常快速和有效的但是它们不能被调整大小。
它们是静态类型的,这允许它们在检视面板中被编辑。这是如何使用内置数组的简单例子。
//在检视面板中公开一个浮点数组,你可以在那里编辑它
var value : float[ ];
Void Start ( )
{
//遍历数组
for ( var value in values){
Print ( value );
}
//因为我们不能调整内置数组的大小
//我们必须重新创建一个数组来调整它的大小
value = new float[ 10 ];
value[ 1 ] = 5.0;//给第二个元素赋值
}
内置数组在性能相关的代码中非常有用的(使用Unity的JavaScript和内置数组可以非常容易使用mesh interface在一秒内处理两万个顶点。) 另一方面,普通的JavaScript数组可以调整大小,排序并可以做所有你期望的数组类的操作。JavaScript数组不显示在检视面板中。你可以容易地在JavaScript数组和内置数组之间转换。
void Start ( )
{
var array = new Array ( Vector3(0,0,0),Vector3(0,0,1));
array .Push (Vector3 (0,0,2));
array .Push (Vector3 (0,0,3));
//拷贝js数组到内置数组
var builtinArray : Vector3[ ] = array . ToBuiltin ( Vector3 );
//将内置数组赋给js数组
var newarr = new Array ( builtinArray );
//newarr与array 包含相同的元素
print ( newarr );
}
注意按照Unity的命名规则下面所有函数均大写开头。为方便JavaScript用户 , Unity数组类也接受小写函数。
变量
◆ var length : int
描述:数组的长度属性,返回或设置数组中元素的数量。
void Start ( )
{
var arr = Array ( “Hello” , “World” ) ;
print (arr . length ) ; //打印两个
arr . Length = 5 ; //调整数组的大小为5
}
函数
◆ void Add ( value : object ) : void
描述:添加 value 到数组末端。
var arr = new Array (“Hello”);
arr.Add (" World “);
Print ( arr ); //打印"Hello “,“World”
◆ void Clear ( ) : void
描述: 清空数组。 数组的长度将为零。
var hello = new Array (“Hello “,“World “);
hello.Clear ( ) ; //现在hello包含零个元素
◆ void Concat ( array :Array , optionalArray0: Array, optionalArray1 : Array):Array
描述:连接两个或多个数组。这个方法不会改变已有的数字并返回连接后的数组拷贝
void Start ( ) {
var arr = new Array (“Hello”,“World”):
var arr2 = new Array (”!”);
var joined = arr.Concat ( arr2 ); //现在jointed包含所有3个字符串
Print ( joined ); //打印"Hello”,“World”,”!”
}
◆ void Join ( seperator :string ) : String
描述:链接数组内容为一个字符串。元素将被seperator字符串分割,并返回数组的拷贝
void Start ( ){
var arr = new Array (“Hello” , “World”);
print ( arr . join (” , “));//打印"Hello,World”
}
◆ void Pop ( ) : object
描述:移除数组最后一个元素并返回它。
var arr = new Array (“Hello “,“World”);
arr . Pop ( );
print ( arr );//只打印"Hello”
◆ void Push (value : object) : int
描述: 添加value到数组末端。并返回新数组长度。
var arr = new Array (“Hello”);
arr.Push (“World”);
print ( arr );//打印"Hello”,“World”
◆ void RemoveAt (index : int ) : void
描述:从数组中移除索引为index的元素。
var arr = new Array (“Hello” , " and good morning" , “World “);
arr.Remove ( 1 ) ; //移除 “and good morning”
print ( arr );//打印 " Hello World "
◆ void Reverse () : Array
描述:颠倒数组中所有元素顺序。
var hello = new Array (” Hello " ,” World “) ;
hello Reverse( ) ;
print (hello);//打印World,Hello
◆ void Shift ( ) :object
描述:移除数组的第一个元素并返回它。
var arr = new Array ( " Hello " , " World “);
arr . Shift ( ) ;
print ( " World " ) ; //现在arr只包含” World "
◆ void Sort( ) : Array
描述:排序所有数组元素
var hello = new Array ( " e " ,” a " ," b “);
hello . Sort ( ) ;
print ( hello ) ;// 打印 a ,b ,c
◆ void Unshift ( newElement : object , optionalElement : object ) : int
描述: Unshift 添加一个或多个元素到数组的开始位置并返回新的数组长度。
var arr = new Array (” Hello “,” World “);
arr . Unshift (” This “,” is ");
print ( arr ) ;//打印 This,is,Hello,World
BitStream

BitStream 类表示序列化的变量,打包到一个流中。
数据可以被序列化,传输,然后远端使用这个类接受。参考 Network View component reference
获取关于网络同步的信息和Network. OnSerializeNetworkView函数获取更多信息。
变量
◆ var isReading : bool
描述:这个BitStream现在在被读吗?
参考Network. OnSerializeNetworkView
◆ var isWriting : bool
描述:这个BitStream现在在被写吗?
参考Network. OnSerializeNetworkView
函数
◆ void Serialize (ref value : bool ) : void
◆ void Serialize (ref value : char ) : void
◆ void Serialize (ref value : short) : void
◆ void Serialize (ref value : int ) : void
◆ void Serialize (ref value : float , maxDelta : float = 0.00001F) : void
◆ void Serialize (ref value : Quaternion, maxDelta : float = 0.00001F) : void
◆ void Serialize (ref value : Vector3, maxDelta : float = 0.00001F) : void
◆ void Serialize (ref value : NetworkPlayer ) : void
◆ void Serialize (ref viewID: NetworkViewID ) : void
描述:BitStream类可以序列化几个不同类型的变量。
包含:bool , char , short , int , float , Quaternion , Vector3 和 NetworkPlayer
注意serialize ( char )系列化一个字节,因此,它只能用于 0…255之间的字符。
BoneWeight
结构
网格上一个顶点的蒙皮骨骼权值
每个被蒙皮的点至多有四个骨头。所有权值的和应该为1。权值和骨骼索引应该被以权值递减的顺序定义。如果一个顶点被少于四个骨骼影响,剩下的权值应该为0。
参见:Mesh.boneWeights变量。
变量
◆ var boneIndex0 : int
描述:第一个骨骼的索引。
参见:weight0 .
◆ var boneIndex1 : int
描述:第二个骨骼的索引。
参见:weight1.
◆ var boneIndex2 : int
描述:第三个骨骼的索引。
参见:weight2 .
◆ var boneIndex3 : int
描述:第四个骨骼的索引。
参见:weight3 .
◆ var weight0 : float
描述:第一个骨骼的蒙皮权值。
参见:boneIndex0.
◆ var weight1 : float
描述:第二个骨骼的蒙皮权值。
参见:boneIndex1.
◆ var weight2 : float
描述:第三个骨骼的蒙皮权值。
参见:boneIndex2.
◆ var weight3 : float
描述:第四个骨骼的蒙皮权值。
参见:boneIndex3.
Bounds
结构
代表一个轴对齐包围盒。
一个轴对齐包围盒,简称为AABB,是与坐标轴对齐的box并且完全包围一些物体。因为这个box不会绕着轴旋转,所以它可以只用center和extents定义,或者用min和max点定义。
Bounds被Collider.bounds,Mesh.bounds,Renderer.bounds使用。
变量
◆var center : Vector3
描述:包围盒子的中心
◆var extents : Vector3
描述:box的宽度。这个总是size的一半
◆var max : Vector3
描述:box的最大点。这个总是等于center + extents。
◆var min : Vector3
描述:box的最小点。这个总是等于center - extents。
◆var size : Vector3
描述:box的总大小。这个总是extents的二倍。
size.x是宽度, size.y 是高度, size.z 是长度。
构造函数
◆static void Bounds ( center : Vector3 , size : Vector3 ) : Bounds
描述:用给定的center和总size创建新的Bounds。Bounds extents将是给定size的一半。
var bounds = Bounds ( Vector3.zero , Vector3(1,2,1));//在原点常见柱状包围盒
函数
◆void Contains ( point : Vector3 ) : bool
描述:point 包含在这个包围盒中吗 ?
◆void Encapsulate ( point : Vector3 ) : void
描述:增大Bounds以包含这个point.
◆void Encapsulate ( bounds : Bounds ) : void
描述:增大bounds来封装另一个bounds。
◆void Expand ( amount : float ) : void
描述:沿着每个面按照amount增加它的size来扩展这个bounds。
◆void Expand ( amount : Vector3 ) : void
描述:沿着每个面按照amount增加它的size来扩展这个bounds。
◆void IntersectRay ( ray : Ray ) : bool
描述:ray与这个包围盒相交吗?
◆void IntersectRay ( ray : Ray , out distance : float ) : bool
描述:ray与这个包围盒相交吗?
当IntersectRay返回真,distance将是到射线源点的距离。
◆void SetMinMax ( min : Vector3, max : Vector3 ) : void
描述:设定边界为盒子的min和max值。
使用这个函数要比分别指定min和max更快。
◆void SqrDistance ( point : Vector3 ) : float
描述: 点到这个包围盒的最小平方距离。
◆void ToString ( ) : string
描述:返回一个格式化好的字符串
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 void GUIContent(image : Texture, tooltip : string) : GUIContent
描述:构建一个包含图片的GUIContent,当用户鼠标悬停在它上面的时候,全局GUItooltip被设置为tooltip。
◆ static void GUIContent(text : string, image : Texture, tooltip : string) : GUIContent
描述:构建一个包含text和image的GUIContent,,当用户鼠标悬停在它上面的时候,全局GUItooltip被设置为tooltip。
◆ static void GUIContent(src : GUIContent) : GUIContent
描述:从另一个GUIContent构建一个GUIContent。
GUILayoutOption

内部类用来传递布局选项给GUILayout函数,不要直接使用这些,而是在GUILayout类的布局函数中构造它们。
参见:
GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight
GUILayoutUtility

用于实现并扩展GUILayout类的工具函数。
使用这个类制作你自己的GUI布局代码
类方法
◆ static void BeginGroup(GroupName : string) : void

◆ static void BeginLayoutGroup(style : GUIStyle, options : GUILayoutOption[], LayoutType : System.Type) : GUILayoutGroup
描述:普通的辅助函数 – 当创建一个布局组的时候使用这个。它将确保所有的事情都正确的排列。
style : 组选项的风格
option : 使用的布局选项
LayoutType : 创建的布局组的类型
◆ static void EndGroup(groupName : string) : void
◆ static void GetAspectRect(aspect : float) : Rect
◆ static void GetAspectRect(aspect : floar, style : GUIStyle) : Rect
◆ static void GetAspectRect(aspect : float, params options : GUILayoutOption[]) : Rect
◆ static void GetAspectRect(aspect : float, style : GUIStyle, params options: GUILayoutOption[]) : Rect
参数
aspect 这个元素的宽高比(宽/高)
style 一个可选的风格。如果指定风格的padding将被添加到返回举行的尺寸并且这个风格的margin将被用于间距。
options 一个可选的布局选项的列表,它用来指定额外的布局属性。任何在这里设置的值将覆盖由Style定义的设置。参见GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight.
返回Rect – 控制的矩形
描述:用一个制定的宽高比获取一个矩形。
◆ static void GetRect(content : GUIContent, style : GUIStyle, params options : GUILayoutOption[]) : Rect
参数
content 让出空间所显示的内容
style用于布局的GUIStyle
options 一个可选的布局选项的列表。它用来指定额外的布局属性。任何在这里设置的值将覆盖由style定义的设置。参见:GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, GUILAyout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight
返回Rect – 一个足够大的矩形区域用来包含用/style/渲染时的/content/。
描述:获取一个以特定风格显示内容的矩形。
◆ static void GetRect(width : float, height : float) : Rect
◆ static void GetRect(width : float, height : float, params options : GUILayoutOption[]) : Rect
◆ static void GetRect(width : float, height : float, style : GUIStyle, params options : GUILayoutOption[]) : Rect
参数
width 你想要的区域的宽度
height 你想要的区域的高度
style 用了布局的可选GUIStyle,如果指定,风格的padding将被添加到尺寸并且它的margin将被用于间距
options 一个可选的布局选项的列表,它用来指定额外的布局属性。任何在这里设置的值将覆盖由style定义的设置。
参见:GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight.
返回Rect – 用于放置控件的矩形
描述:用一个固定的内容区域获取一个矩形
◆ static void GetRect(minWidth : float, maxWidth : float, minHeight : float, maxHeight : float) : Rect
◆ static void GetRect(minWidth : float, maxWidth : float, minHeight : float, maxHeight : float, style : GUIStyle) : Rect
◆ static void GetRect(minWidth : float, maxWidth : float, minHeight : float, maxHeight : float, params options : GUILayerOption[]) : Rect
◆ static void GetRect(minWidth : float, maxWidth : float, minHeight : float, maxHeight : float, style : GUIStyle, paramas option : GUILayoutOption[]) : Rect
参数
minWidth 传回区域的最小宽度
maxWidth 传回区域的最大宽度
minHeight 传回区域的最小高度
maxHeight 传回区域的最大宽度
style 一个可选的风格。如果指定,风格的padding将被添加到尺寸并且它的margin将被用于间距
options 一个可选的布局选项的列表。它用来指定额外的布局属性。任何在这里设置的值将覆盖由style定义的设置。
参见:GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight.
返回Rect – 一个矩形区域在两个轴上的尺寸介于minWidth和maxWidth之间
描述:从布局系统获取一个可扩展的矩形,矩形的尺寸将在min和max值之间。
GUILayout

GUILayout是用于UnityGUI自动布局的类。
参见:GUI Layout tutoria
类方法
◆ static void BeginArea(screenRect : Rect) : void
◆ static void BeginArea(screenRect : rect, text : string) : void
◆ static void BeginArea(screenRect : Rect, image : Texture) : void
◆ static void BeginArea(screenRect : Rect, content : GUIContent) : void
◆ static void BeginArea(screenRect : Rect, style : GUIStyle) : void
◆ static void BeginArea(screenRect : Rect, text : string, style : GUIStyle) : void
◆ static void BeginArea(screenRect : Rect, image : Texture, style : GUIStyle) : void
◆ static void BeginArea(screenRect : Rect, content : GUIContent, style : GUIStyle) : void
参数
text可选的显示在该区域中的文本
image 可选的显示在该区域中的纹理
content 可选的在该区域顶部显示的文本,图片和提示
style 使用的风格。如果留空,空的GUIStyle(GUIStyle.none)将被使用,给出一个透明的背景。参见:EndArea
描述:在屏幕的固定区域开始一个GUI空间的GUILayout块。
默认的,任何使用GUILayout制作的GUI空间都放置在屏幕的左上角。如果你想在任一区域放置一系列自动布局的控件,使用GUILayout.BeginArea定义一个新的区域以便自动布局系统可以使用它。
void OnGUI()
{
GUILayout.BeginArea(Rect(200, 200, 100, 100));
GUILayout.Button(“Click me”);
GUILayout.Button(“Or me”);
GUILayout.EndArea();
}
在混合GUILayout代码是这个函数是非常有用的。必须与EndArea调用匹配。BeginArea / EndArea不能嵌套。
◆ static void BeginHorizontal(params options : GUILayoutOption[]): void
◆ static void BeginHorizontal(style : GUIStyle, params options : GUILayoutOption[]): void
参数
style这个风格用于背景图片和填充值。如果留空,背景是透明的。
options 一个可选的布局选项的列表。它用来指定额外的布局属性。任何在这个设置的值将覆盖由style定义的设置。
参见:GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight
描述:开始一个水平控件组。
所有在这个元素内部渲染的空间将被一个接一个的水平放置,改组必须调用EndHorizontal关闭。

◆ static void BeginScrollView(scrollPosition : Vector2, params options : GUILayoutOption[]) : Vector2
◆ static void BeginScrollView(scrollPosition : Vector2, horizontalScrollbar : GUIStyle, verticalScrollbar : GUIStyle, params options : GUILayoutOption[]) : Vector2
◆ static void BeginScrollView(scrollPosition : Vector2, alwaysShowHorizontal : bool, alwaysShowVertical : bool, params options : GUILayoutOption[]) : Vector2
◆ static void BeginScrollView(scrollPosition : Vector2, style : GUIStyle) : Vector2
◆ static void BeginScrollView(scrollPosition : Vector2, alwaysShowHorizontal : bool, alwaysShowVertical : bool, horizontalScrollbar : GUIStyle, verticalScrollbar : GUIStyle, params options : GUILayoutOption[]) : Vector2
◆ static void BeginScrollView(scrollPosition : Vector2, alwaysShowHorizontal : bool, alwaysShowVertical : bool, horizontalScrollbar : GUIStyle, verticalScrollbar : GUIStyle, background : GUIStyle, params options : GUILayoutOption[]) : Vector2
参数:
scrollPostion 用来显示的位置
alwaysShowHorizontal 可选的参数用来总是显示水平滚动条。如果为假或者留空,它将只在ScrollView中的内容比滚动视宽时显示。
alwaysShowVertical 可选的参数用来总是显示垂直滚动条。如果为假或者留空,它将只在ScrollView中的内容比滚动视高时显示。
horizontalScrollbar 用于水平滚动条的可选GUIStyle。如果不设置,将使用当前GUISkin的horizontalScrollbar。
verticalScrollbar 用于垂直滚动条的可选GUIStyle。如果不设置,将使用当前GUISken的verticalScrollbar风格。
返回Vector2 – 修改过的scrollPosition。回传这个变量,如下的例子:
描述:开始一个自动布局滚动视。
自动布局滚动视,将使用任何你放置在它们中的内容并正常显示出来。如果他不适合,将显示滚动条,BeginScrollView的调用总是与EndScrollView的调用匹配。
//这个变量对于空间来说就是这个滚动视查看子元素的位置。
var scrollPosition : Vector2;
//显示在滚动视中的字符串,下面两个按钮添加,清除这个字符串。
var longString = “This is a long-ish string”;
void OnGUI()
{
//开始一个滚动视,所有矩形被自动计算。
//它将使用任何可用的空间并确保内容排列正确
//这是小的最后两参数来强制滚动条出现
scrollPosition = GUILayout.BeginScrollView(scrollPosition, GUILayout.Width(100), GUILayout.Height(100));
//添加一个简单的标签到滚动视内部。注意
//滚动条如何与文字换行正确的工作。
GUILayout.Height(longString);
//添加一个按钮来消除字符串。这个是在滚动区域内部,因此它
//也将被滚动。注意按钮如何变窄为垂直滚动条留出空间
if(GUILayout.Button(“Clear”)
longString = “”;
//结束我们上面开始的滚动条
GUILayout.EndScrollView();
//现在我们在滚动视外边添加一个按钮 – 这将显示在滚动区域的下边
if(GUILayout.Button(“Add MoreText”))
{
longString += “\nHere is another line.”;
}
◆ static void Box(params option : GUILayoutOption[]) : void
◆ static void Box(style : GUIStyle, params option : GUILayoutOption[]) : void
参数
style 这个风格将用于背景图片和填充值,如果留空,背景是透明的。
options 一个可选的布局选项的列表。它用来指定额外的布局属性。任何在这里设置的值将覆盖由style定义的设置。
参见:GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight.
描述:开始一个垂直控件组。
所有在这个元素内部渲染的空间将被一个接一个地垂直放置。改组必须调用EndVertical关闭。
◆ static void Box(image : Texture, params option : GUILayoutOption[]) : void
◆ static void Box(text : string, params option : GUILayoutOption[]) : void
◆ static void Box(contend : GUIContent, params option : GUILayoutOption[]) : void
◆ static void Box(image : Texture, style : GUIStyle, params option : GUILayoutOption[]) : void
◆ static void Box(text : string, style : GUIStyle, params option : GUILayoutOption[]) : void
◆ static void Box(contend : GUIContent, style : GUIStyle, params option : GUILayoutOption[]) : void
参数
text 显示在该box上的文本
image显示在该box上的Texture
content用于这个box的文本,图形和提示
style 使用的风格。如果不设置,将使用当前的GUISkin的box风格。
options 一个可选的布局选项的列表。它用来指定额外的布局属性。任何在这里设置的值将覆盖由style定义的设置。
参见:GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight.
描述:制作一个自动布局box
这将制作一个实心box,如果你想制作一个包含一些内容的box,使用一个子组函数的
风格参数(BeginHorizontal, BeginVertical, 等等)
◆ static void Button(image : Texture, params options : GUILayoutOption[]) : bool
◆ static void Button(text : string, params options : GUILayoutOption[]) : bool
◆ static void Button(content : GUIContent, params options : GUILayoutOption[]) : bool
◆ static void Button(image : Texture, style : GUIStyle, params options : GUILayoutOption[]) : bool
◆ static void Button(text : string, style : GUIStyle, params options : GUILayoutOption[]) : bool
◆ static void Button(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 functioin EndArea() : void
描述:关闭由BeginArea开始的GUILayout块
◆ static void EndHorizontal() : void
描述:关闭一个开始于BeginHorizontal的组
◆ static functioin EndScrollView() : void
描述:结束由BeginScrollView调用开始的滚动视。
◆ static functioin EndVertical() : void
描述:关闭一个开始于BeginVertical的组
◆ static functioin ExpandHeight(expand : bool) : GUILayoutOption
描述:传递给一个空间的选项来允许或不允许垂直扩展。
◆ static functioin ExpandWidth(expand : bool) : GUILayoutOption
描述:传递给一个空间的选项来允许或不允许水平扩展。
◆ static functioin FlexibleSpace() : void
描述:插入一个灵活的空格元素
灵活的空格用来填充一个布局中任何遗漏的空间。
◆ 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风格。
GUIUtility

用于制作新GUI空间的工具类。
除非从头开始创建自己的GUI控件,否则你不需要使用这些函数。
类变量
◆ static var hotControl : int
描述:当前具有特点的控件controlID。
热点空间是临时激活的一个控件。当用于在一个按钮上按下鼠标时,它变为热点。当一个控件具有热点时,其他控件不允许响应鼠标事件。一旦用户鼠标示范,这个控件设置hotControl为0以便表明其他控件可以响应用户输入。

◆ static var keyboardControl : int
描述:具有键盘焦点控件的controlID。
类方法
◆ static void GetControlID(focus : FocusType) : int
◆ static void GetControlID(hint : int, focus : FocusType) : int
◆ static void GetControlID(content : GUIContent, focus : FocusType) : int
描述:为一个控件获取唯一ID。
◆ static void GetControlID(focus : FocusType, position : Rect) : int
◆ static void GetControlID(hint : int, focus : FocusType, position : Rect) : int
◆ static void GetControlID(content : GUIContent, focus : FocusType, position : Rect) : int
描述:为一个控件获取唯一ID。
◆ static void GetStateObject(t : type, controlID : int) : object
描述:从一个controlID获取一个状态对象。
这将返回一个可重用的状态对象,它的controlID是唯一的。如果没有,一个新的将被创建并添加到ControlID。
◆ static void GUIToScreenPoint(guiPoint : Vector2) : Vector2
描述:将一个点从GUI位置转化为屏幕空间。
参见:GUIUtility, ScreenToGUIPoint
◆ static void MoveNextAndScroll(forward: bool) : void
描述:只允许从OnGUI内部调出GUI函数
◆ static void QueryStateObject(t: Type, controlID : int) : object
描述:从一个controlID获取一个存在的状态物体。
这个返回一个可回收的状态物体。这个物体具有唯一的controlID。如果没有,这个函数将返回null。
◆ static void RotateAroundPivot(angle: float, pivotPoint : Vector2) : void
描述:使GUI围绕一个点旋转的辅助函数。
修改GUI.matrix来绕着pivotPoint旋转所有的GUI元素angel度。
参见:GUI.matrix, ScaleAroundPivot
◆ static void ScaleAroundPivot(scale: Vector2, pivotPoint: Vector2) : void
描述:使GUI围绕一个点缩放的辅助函数。
修改GUI,.matrix来绕着pivotPoint缩放所有的GUI元素angel度。
参见:GUI.matrix, RotateAroundPivot
◆ static void ScreenToGUIPoint(screenPoint : Vector2) : object
描述:将一个点从屏幕空间转化为GUI位置。
用于反转计算GUIToScreenPoint的值。
参见:GUIUtility.GUIToScreenPoint。
GUI

GUI类是Unity GUI的手工定位接口
参见:GUI tutorial
类变量
◆ static var backgroundColor : Color
描述:全局的修改由GUI渲染的所有元素的背景颜色。
这个获取多个color。
参见:contentColor, color
◆ static var changed : bool
描述:有任何控件的输入数据改变吗?
◆ static var color : Color
描述:全局的修改GUI颜色。
这将影响背景和文本颜色。
参见:backgroundColor, contentColor
◆ static var contentColor : Color
描述:修改由GUI渲染的所有文本的颜色。
这个获取多个color。
参见:backgroundColor : Color
◆ static var depth : int
描述:当前执行的GUI行为的排序深度
当你有不同的脚本同时运行时。设置这个来决定顺序。
◆ static var enabled : bool
描述:GUI启用了?
设置这个值为假将禁用所有GUI交互。所有的控件将以半透明方式绘制。并将不响应用户输入。
//这个值跟踪扩展的选项是否可以被打开。
var allOptions = true;
//两个扩展选项
var extended1 = true;
var extended2 = true;
void OnGUI()
{
//制作一个开关控件以便允许用户编辑扩展的选项
allOptions = GUI.Toogle(Rect(0, 0, 150, 20), allOptions, “Edit All Options”);

//将它的值赋给GUIEnabled – 如果上面的复选框被禁用
//这些GUI元素将
GUIenabled = allOptions

//这两个控件只在上面的按钮为On时启用。
extended1 = GUI.Toogle(Rect(20, 20, 130, 20), extended1, “Extended Option 1”);
extended2 = GUI.Toogle(Rect(20, 40, 130, 30), extended2, “Extended Option 2”);

//使用条件语句,以使GUI代码可以再次启用
GUI.enabled = true;
//制作一个OK按钮
if(GUI.Button(Rect(0, 60, 150, 20), “OK”))
print(“user clicked ok”);
}
◆ static var matrix : Matrix4x4
描述:GUI变换矩阵
◆ static var skin : GUISkin
描述:使用的全局皮肤
你可以在任何时候设置这个来改变GUI的外观。如果设置为null,这个皮肤将使用默认的Unity皮肤。
◆ static var tooltip : string
描述:鼠标移动到空间上的提示信息(只读)。
创建GUI空间是。你可以给他传递一个提示。这可以通过改变内容参数来制作一个自定义GUIContent物体,而不是仅仅传递一个字符串。
但鼠标经过带有提示性的控件时,它设置全局的GUI.tooltip值为传入得知。在OnGUI代码的末端,你可以制作一个标签来显示GUI.tooltip的值。
void OnGUI()
{
//制作一个按钮,它使用自定义GUI.Content参数来传递提示。
GUI.Button(Rect(10, 10, 100, 20), GUIContent(“Click me”, “This is the tooltip”));

//显示鼠标指向或具有键盘焦点的控件提示
GUI.Button(Rect(10, 55, 100, 20), “No tooltip here”);
}
你可以使用元素的次序来创建’层次化的’提示
void OnGUI()
{
//这个box比随后的许多元素大,并且它有一个提示。
GUI.Box(Rect(5, 35, 110, 75), GUIContent(“Box”, “this box has a tooltip”));

这个按钮在box内部,但是没有提示,因此它不会覆盖这个box的提示。
GUI.Button(Rect(10, 55, 100, 20), “No tooltip here”);

这个按钮在box内部,并且有一个提示,因此它会覆盖这个box的提示。
GUI.Button(Rect(10, 80, 100, 20), GUIContent(“I have a tooltip”, “This button overrides the box”));
//最后,显示来自鼠标指向或具有键盘焦点的提示
GUI.Label(Rect(10, 40, 100, 40), GUI.tooltip);
}
Tooltip也能用来实现一个OnMouseOver/OnMouseOut消息系统:
var lastTooltip = “”;
void OnGUI()
{
GUILayout.Button(GUIContent(“Play Game”, “Button1”));
GUILayout.Button(GUIContent(“Quit”, “Button2”));

if(Event.current.type == EventType.repaint && GUI.tooltip! = lastTooltip)
{
if(lastTooltip != “”)
SendMessage(lastTooltip + “OnMouseOut”, SendMessageOptions, DontRequireReceiver);
if(GUI.tooltip != “”)
SendMessage(GUI.tooltip + “OnMouseOut”, SendMessageOptions, DontRequireReceiver);
lastTool\tip = GUI.tooltip;
}
}
类方法
◆ static void BeginGroup(position : Rect) : void
◆ static void BeginGroup(position : Rect, text : string) : void
◆ static void BeginGroup(position : Rect, image : Texture) : void
◆ static void BeginGroup(position : Rect, content : GUIContent) : void
◆ static void BeginGroup(position : Rect, style : GUIStyle) : void
◆ static void BeginGroup(position : Rect, text : string, style : GUIStyle) : void
◆ static void BeginGroup(position : Rect, image : Texture, style : GUIStyle) : void
◆ static void BeginGroup(position : Rect, content : GUIContent, style : GUIStyle) : void
参数
position屏幕用于组的矩形区域。
text 显示在该组上的文本。
image显示在该组上的Texture。
content 用于这个组的文本,图形和提示。如果提供,任何鼠标点击被组捕获,并且如果没有设置,不会渲染背景,和传递鼠标点击。
style 用于背景的风格。
描述:
开始组,必须与EndGroup调用匹配。
当你开始一个组时,用于GUI控件的坐标系统被设置为(0, 0)是组的左上角。所有控件被附加到组。组可以嵌套 – 如果使用,子被附加到他们的父。
当你在屏幕上移动一组GUI元素是这是非常有用的。一个普通的用法是设计你的菜单以适合一个特定的屏幕的尺寸。然后在更大的显示器上居中显示GUI。
void OnGUI()
{
//约束所有的绘图在屏幕中心800*600的区域
GUI.BeginGroup(new Rect(Screen.width / 2 – 400, Screen.height / 2 – 300, 800, 600));
//在由BeginGroup定义的新坐标空间中绘制一个box
//注意,现在(0,0)已经被移动了
GUI.Box(new Rect(0, 0, 800, 600), “This box is new centered! – Here you would put your main menu”);
//需要用一个EndGroup来匹配所有的BeginGroup调用。
GUI.EndGroup();
}
参见:matrix, BeginScrollView

◆ static void BeginScrollView(position : Rect, scrollPostion: Vector2, viewRect : Rect) : Vector2
◆ static void BeginScrollView(position : Rect, scrollPostion: Vector2, viewRect : Rect, alwaysShowHorizontal : bool, alwaysShowVertical : bool) : Vector2
◆ static void BeginScrollView(position : Rect, scrollPostion: Vector2, viewRect : Rect, horizontalScrollbar : GUIStyle, verticalScrollbar : GUIStyle) : Vector2
◆ static void BeginScrollView(position : Rect, scrollPostion: Vector2, viewRect : Rect, alwaysShowHorizontal : bool, alwaysShowVertical : bool, horizontalScrollbar : GUIStyle, verticalScrollbar : GUIStyle) : Vector2
参数
position 屏幕上用了ScrollView的矩形区域
scrollPosition 用来显示的位置。
viewRect 用在滚动视内部的矩形。
alwaysShowHorizontal 可选的参数用来总是显示水平滚动条。如果为假或不设置,它只在clientRect比position宽的时候显示
alwaysShowVertical 可选的参数用来总是显示垂直滚动条。如果为假或不设置,它只在clientRect比position长的时候显示。
horizontalScrollbar 用于水平滚动条的可选GUIStyle,如果不设置,将使用当前GUISkin的horizontalScrollbar.
verticalScrollbar 用于水平滚动条的可选GUIStyle,如果不设置,将使用当前GUISkin的verticalScrollbar.
返回Vector2 – 修改过的scrollPosition回传这个变量。如下的例子。
描述:在你的GUI中开始滚动视。
ScrollViews让你在屏幕上制作一个较小的区域。使用放置在ScrollView边上的滚动条来查看一个较大的区域。
//滚动视口的位置
var smallPosition = Vector2.zero;
void OnGUI()
{
//一个绝对位置的例子。制作一个具有较大区域的滚动视。
//并将它放置在一个小的矩形中。
scrollPosition = GUI.BeginScrollView(Rect(10, 300, 100, 100), scrollPosition, Rect(0, 0, 220, 200));
//制作四个按钮 – 每个角上有一个,由BeginScrollView最后一个参数定义的坐标系统。
GUI.Button(Rect(0, 0, 100, 20), “Top-left”);
GUI.Button(Rect(0, 0, 100, 20), “Top-right”);
GUI.Button(Rect(0, 0, 100, 20), “Bottom-left”);
GUI.Button(Rect(0, 0, 100, 20), “Bottom-right”);
//结束前面开始滚动视
GUI.EndScrollView();
}
◆ static void Box(position : Rect, text : string) : void
◆ static void Box(position : Rect, image : Texture) : void
◆ static void Box(position : Rect, content : GUIContent) : void
◆ static void Box(position : Rect, text : string, style : GUIStyle) : void
◆ static void Box(position : Rect, image : Texture, style : GUIStyle) : void
◆ static void Box(position : Rect, content : GUIContent, style : GUIStyle) : void
参数
position屏幕上用于box的矩形区域
text 显示在该box上的文本
image显示在该box上的Texture
content用于这个box的文本,图形和提示
style 使用的风格。如果不设置,将使用当前GUISkin的box风格。
描述:制作一个图形box。
◆ static void BringWindowToBack(windowID: int) : void
参数
windowID 在window调用中创建窗体时使用的唯一标识。
描述:将特定的窗口放到浮动窗口的后面。
◆ static void BringWindowToFront(windowID: int) : void
参数
windowID 在Window调用中创建窗体时使用的唯一标识。
描述:将特定的窗口放到浮动窗口的前面。
◆ static void Button(position : Rect, text : string) : bool
◆ static void Button(position : Rect, image : Texture) : bool
◆ static void Button(position : Rect, content : GUIContent) : bool
◆ static void Button(position : Rect, text : string, style : GUIStyle) : bool
◆ static void Button(position : Rect, image : Texture, style : GUIStyle) : bool
◆ static void Button(position : Rect, content : GUIContent, style : GUIStyle) : bool
参数
position屏幕上用于按钮的矩形区域
text 显示在该按钮上的文本
image显示在该按钮上的Texture
content用于这个按钮的文本,图形和提示
style 使用的风格。如果不设置,将使用当前GUISkin的button风格。
返回bool - /true/当用户单击按钮时
描述:制作一个简单的按钮,用户点击它们的时候,就会有些事情发生。
◆ static void DragWindow(position : Rect) : void
参数
position可以拖动的窗口部分。这个被附加到实际窗口。
描述:让窗口可拖动。
插入这个函数的在你的窗口代码中使窗口可拖动。
var windowRect = Rect(20, 20, 120, 50);

void OnGUI()
{
//注册窗体
windowRect = GUI.Window(0, windowRect, DoMyWindow, “My Window");
}
//制作窗体内容
void DoMyWindows(windowID : int)
{
//制作一个非常长的矩形,高20像素。
//这将使得窗口可以调整大小,通过顶部的标题栏 – 不管它有多宽。
GUI.DragWindow(Rect(0, 0, 10000, 20));
}
◆ static void DragWindow() : void
如果你想将整个窗体背景作为一个可拖动区域,不使用参数并将DragWindow放置到整体函数的最后。
这意味着任何其他类型的控件将首先被处理并且拖动将只在没有其他控件获得焦点时使用。
◆ static void DrawTexture(position : Rect, image : Texture, scaleMode : ScaleMode = stretchToFill, alphaBlend : bool = true, imageAspect : float = 0) : void
参数
position在屏幕上绘制一个内部包含有纹理的矩形。
image需要被绘制的纹理。
scaleMode 定义了当矩形的长宽比和内部图像的长宽比不同时如何缩放图像。
alphaBlend 定义了alpha值是否参与图像的混合(默认为真)。如果为假,图像将会被绘制并显示。
imageAspect 源图像的的长宽比。如果是0(默认值),则使用图像自身的长宽比。
描述:在一个矩形内部绘制一个纹理。
参见:GUI.color, GUI.contentColor
◆ static void EndGroup() : void
描述:结束一个组
参见:BeginGroup()。
◆ static void EndScrollView : void
描述:结束一个由BeginScrollView开始的滚动视。
◆ static void FocusControl(name : string) : void
描述:把键盘焦点转移到定义的控件。
参见:SetNextControlName, GetNameOfFocusedControl。
var username = “username”;
void OnGUI ()
{ // 设置一个文本域中内部名称
GUI.SetNextControlName (“MyTextField”);
// Make the actual text field.
username = GUI.TextField (Rect (10,10,100,20), username);
// If the user presses this button, keyboard focus , will move.
if (GUI.Button (Rect (10,40,80,20), “Move Focus”))
GUI.FocusControl (“MyTextField”);
}
◆ static void FocusWindow(windowID : int) : void
参数:
windowID 当调用Window而创建的窗口的标识符。
描述:使一个窗口被激活。
参见:GUI.UnfocusWindow
◆ static void GetNameOfFocusedControl() : string
描述:返回当前激活的控件的名字。控件的名字是由SetNextControlName函数创建的。当有名字的控件被激活时,函数返回它的名字;否则的话返回一个空字符串。
var login = “username”;
var login2 = “no action here”;
void OnGUI ()
{
GUI.SetNextControlName (“user”);
login = GUI.TextField (Rect (10,10,130,20), login);
login2 = GUI.TextField (Rect (10,40,130,20), login2);
if (Event.current.Equals (Event.KeyboardEvent (“return”)) && GUI.GetNameOfFocusedControl () == “user”)
{
Debug.Log (“Login”);
}
if (GUI.Button (new Rect (150,10,50,20), “Login”))
Debug.Log (“Login”);
}
参见:SetNextControlName, FocusControl
login2 = GUI.TextField(new Rect(10, 40, 130, 20), login2);
if(Event.current.Equals(Event.KeyboardEvent.(“return”))&&GUI.GetNameOfFocusedControl() == “user”)
Debug.log(“Login”);
if(GUI.Button(new Rect(150, 10, 50, 20), “Login”))
Debug.log(“Login”);
}
参见:SetNextControlName
◆ static void HorizontalScrollbar(position : Rect, value : float, size : float, leftValue : float, rightValue : float) : bool
◆ static void HorizontalScrollbar(position : Rect, value : float, size : float, leftValue : float, rightValue : float, style : GUIStyle) : bool
参数
position屏幕上用于滚动条的矩形区域
value在min和max之间的位置
size 能看见多大?
leftValue滚动条左边的值
rightValue 滚动条右边的值
style 用于滚动条背景的风格。如果不设置,将使用当前GUISkin的horizontalScrollbar。
返回float – 修改后的值。这可以通过拖动这个滚动条,或者单击两端的箭头来改变。
描述:制作一个水平滚动条。滚动条可以用来滚动文档。大多数情况下,你会使用scrollViews代替。
找到额外的元素:
在滚动条两端的按钮将在当前皮肤中搜索”leftbutton”和”rightbutton”作为风格。滚动条的滑块(你拖动的东西)将搜索并使用名为“thumb”的风格。
//这将使用下面的风格名来决定该按钮的尺寸/位置
//MyScrollbarrightbutton – 用于左侧按钮的风格名称
//MyScrollbarleftbutton – 用于右侧按钮的风格名称
//MyScrollbarthumb – 用于滑块的风格名称
scrollPos = HoriztontalScrollbar(Rect(0, 0, 100, 20), scrollPos, 1, 0, 100, “My Scrollbar”);
◆ static void HorizontalSlider(position : Rect, value : float, leftValue : float, rightValue : float) : float
◆ static void HorizontalSlider(position : Rect, value : float, leftValue : float, rightValue : float, slider : GUIStyle, thumb : GUIStyle) : float
参数
position屏幕上用于滑杆的矩形区域
value滑杆显示的值。这个决定可拖动的位置。
leftValue滑杆左边的值
rightValue 滑杆右边的值
slider用于显示拖动区域的GUIStyle。如果不设置, 将使用当前GUISkin的 horizontalSlider。
thumb用于显示拖动块的GUIStyle。如果不设置, 将使用当前GUISkin的horizontalSliderThumb。
返回float – 被用户设置的值。
描述:一个用户可以拖动的滑杆。可以在min和max只见改变一个值。
◆ static void Label(position : Rect, text : string) : void
◆ static void Label(position : Rect, image : Texture) : void
◆ static void Label(position : Rect, content : GUIContent) : void
◆ static void Label(position : Rect, text : string, style : GUIStyle) : void
◆ static void Label(position : Rect, image : Texture, style : GUIStyle) : void
◆ static void Label(position : Rect, content : GUIContent, style : GUIStyle) : void
参数
position屏幕上用于标签的矩形区域
text 显示在该标签上的文本
image显示在该标签上的Texture
content用于这个标签的文本,图形和提示
style 使用的风格。如果不设置,将使用当前GUISkin的label
描述:在屏幕上制作一个文本或者纹理标签.
标签没有用户交互,不会获取鼠标点击并总是以普通风格渲染。如果你想制作一个可视化响应用户输入的控件,使用一个Box控件。
例如:绘制一个传统的Hello world字符串
void OnGUI
{
GUI.Label(Rect(10, 10, 100, 20), “Hello world”);
}
例如:在屏幕上绘制一个纹理。标签也用于显示纹理,而不仅是字符串。简单传递一个纹理。
var textureToDisplay : Texture2D;
void OnGUI()
{
GUI.Label(Rect(10, 40, textureToDisplay.width, textureToDiplay.height), textureToDisplay);
}
◆ static void PasswordField(position : Rect, password : string, markChar : char) : string
◆ static void PasswordField(position : Rect, password : string, markChar : char, maxLength : int) : string
◆ static void PasswordField(position : Rect, password : string, markChar : char, style : GUIStyle) : string
◆ static void PasswordField(position : Rect, password : string, markChar : char, markChar : char, style : GUIStyle) : string
参数
position屏幕上用于文本的矩形区域
password 用于编辑的密码。这个函数返回值应该被赋回这个字符串。如下的例 子。
markChar 用来隐藏密码的字符。
maxLength 字符串的最大长度。如果不设置,用户可以一直输入。
style使用的风格。不过不设置,将那个使用当前GUISkin的textField风格。
返回string – 编辑过的密码
描述:制作一个用户可以输入密码的文本域。
var passwordToEdit = “My Password”;

void OnGUI()
{
//制作一个文本来调整stringToEdit。
passwordToEdit = GUI.PasswordField(Rect(10, 10, 200, 20), passwordToEdit, “*”, 25);
}

◆ static void RepeatButton(position : Rect, text : string) : bool
◆ static void RepeatButton(position : Rect, image : Texture) : bool
◆ static void RepeatButton(position : Rect, content : GUIContent) : bool
◆ static void RepeatButton(position : Rect, text : string, style : GUIStyle) : bool
◆ static void RepeatButton(position : Rect, image : Texture, style : GUIStyle) : bool
◆ static void RepeatButton(position : Rect, content : GUIContent, style : GUIStyle) : bool
参数
position 屏幕上用于按钮的矩形区域
text显示在该按钮上的文本
image 显示在该按钮上的Texture
content 用于这个按钮的文本,图形和提示
style使用的风格。不过不设置,将那个使用当前GUISkin的button风格。
返回bool - /true/当用户单击按钮时。
描述:制作一个按钮。当用户按住它时一直是激活的。
◆ static void ScrollTo(position : Rect) : void
描述:滚动所有包含在scrollview中的数据以便position可见。
◆ static void SelectionGrid (position : Rect, selected : int, texts : string[], xCount : int) : int
◆ static void SelectionGrid (position : Rect, selected : int, images : Texture[], xCount : int) : int
◆ static void SelectionGrid (position : Rect, selected : int, content : GUIContent[], xCount : int) : int
◆ static void SelectionGrid (position : Rect, selected : int, texts : string[], xCount : int, style : GUIStyle) : int
◆ static void SelectionGrid (position : Rect, selected : int, images : Texture[], xCount : int, style : GUIStyle) : int
◆ static void SelectionGrid (position : Rect, selected : int, content : GUIContent[], xCount : int, style : GUIStyle) : int
参数
position屏幕上用于网格的矩形区域。
selected选择的网格按钮的索引
texts 显示在网格按钮上的字符串数组
images显示在网格按钮上的纹理数组
contents用于这个网格按钮的文本,图形和提示数组
xCount在水平方向有多少个像素。空间将被缩放来适应,除非风格定义了一 个fixWidth。
style 使用的风格。如果不设置,将使用当前GUISkin的button风格。
返回int – 选择按钮的索引。
描述:制作一个按钮网络。
◆ static void SetNextControlName(name : string) : void
描述:设置下一个控件的名称。
这是接下来的控件被注册。
◆ static void TextArea(position : Rect, text : string) : string
◆ static void TextArea(position : Rect, text : string, maxLength : int) : string
◆ static void TextArea(position : Rect, text : string, style : GUIStyle) : string
◆ static void TextArea(position : Rect, text : string, maxLength : int, style : GUIStyle) : string
参数
position 屏幕上用于文本的矩形区域
text用于编辑的文本。这个函数返回值应该被赋回这个字符串。如下的例子。
maxLength 字符串的最大长度。如果不设置,用户可以一直输入。
style使用的风格。如果不设置,将使用当前GUISkin的textArea。
返回string – 编辑过的字符串
描述:制作一个多行文本区域。这里用户可以编辑这个字符串。
var stringToEdit = “Hello World\nI’ve got 2 lines…”;
void OnGUI()
{
//制作一个多行文本区域来调整stringToEdit
stringToEdit = GUI.TextArea(Rect(10, 10, 200, 100), stringToEdit, 200);
}
◆ static void TextField(position : Rect, text : string) : string
◆ static void TextField(position : Rect, text : string, maxLength : int) : string
◆ static void TextField(position : Rect, text : string, style : GUIStyle) : string
◆ static void TextField(position : Rect, text : string, maxLength : int, style : GUIStyle) : string
参数
position 屏幕上用于文本的矩形区域
text用于编辑的文本。这个函数返回值应该被赋回这个字符串。如下的例子。
maxLength 字符串的最大长度。如果不设置,用户可以一直输入。
style使用的风格。如果不设置,将使用当前GUISkin的textField风格。
返回string – 编辑过的字符串
描述:制作一个单行文本域。这里用户可以编辑这个字符串。
var stringToEdit = “Hello World”;

void OnGUI()
{
//制作一个文本域来调整stringToEdit
stringToEdit = GUI.TextField(Rect(10, 10, 200, 20), stringToEdit, 25);
}
◆ static void Toggle(position : Rect, value : bool, text : string) : bool
◆ static void Toggle(position : Rect, value : bool, image : Texture) : bool
◆ static void Toggle(position : Rect, value : bool, content : GUIContent) : bool
◆ static void Toggle(position : Rect, value : bool, text : string, style : GUIStyle) : bool
◆ static void Toggle(position : Rect, value : bool, image : Texture, style : GUIStyle) : bool
◆ static void Toggle(position : Rect, value : bool, content : GUIContent, style : GUIStyle) : bool
参数
position屏幕上用于按钮的矩形区域
value这个按钮是打开的或关闭
text 显示在该按钮上的文本
image显示在该按钮上的Texture
content用于这个按钮的文本,图形和提示
style 使用的风格。如果不设置,将使用当前GUISkin的toggle风格。
返回bool – 按钮的新值
描述:制作一个on/off开关按钮
◆ static void Toolbar(position : Rect, selected : int, texts : string[]) : int
◆ static void Toolbar(position : Rect, selected : int, images : Texture[]) : int
◆ static void Toolbar(position : Rect, selected : int, contents : GUIContent[]) : int
◆ static void Toolbar(position : Rect, selected : int, texts : string, style : GUIStyle[]) : int
◆ static void Toolbar(position : Rect, selected : int, images : Texture, style : GUIStyle[]) : int
◆ static void Toolbar(position : Rect, selected : int, contents : GUIContent[], style : GUIStyle) : int
参数
position屏幕上用于工具栏的矩形区域
selected选择按钮的索引
texts 显示在该工具栏上的字符串数组
images显示在工具栏按钮上的纹理数组
contents用于这个工具栏的文本,图形和提示数组。
style 使用的风格。如果不设置,将使用当前GUISkin的button风格。
返回int – 选择按钮的索引
描述:制作一个工具栏

◆ static void UnfocusWindows() : void
描述:从所有窗体上移除焦点。
◆ static void VerticalScrollbar(position : Rect, value : float, size : float, topValue : float, buttonValue : float) : float
◆ static void VerticalScrollbar(position : Rect, value : float, size : float, topValue : float, buttonValue : float, style : GUIStyle) : float
参数
position屏幕上用于滚动条的矩形区域。
value在min和max之间的位置。
size 能看见多大?
topValue滚动条顶端的值
bottomValue 滚动条底端的值
style 使用的风格。如果不设置,将使用当前GUISkin的horizontalScrollbar 风格。
返回float – 修改后的值。这可以通过拖动这滚动条,或者单击两端的箭头来改变。
描述:制作一个垂直滚动条。滚动条可以用来滚动文档。大多数情况下,你会使用scrollViews代替。
找到额外的元素:
在滚动条两端的按钮将在当前皮肤中搜索“upbutton”和“downbutton”作为风格。滚动条的滑块(你拖动的东西)将搜索并使用名为“thumb”的风格。
//这将使用下面的风格名来决定该按钮的尺寸位置。
//MyVertScrollbarupbutton – 用于上端按钮的风格名称。
//MyVertScrollbardownbutton – 用于下端按钮的风格名称。
//MyVertScrollbarthumb – 用于滑块的风格名称。
scrollPos = HorizontalScrollbar(Rect(0, 0, 100, 20), scrollPos, 1, 0, 100, “MyVertScrollbar”);

◆ static void VerticalSlider(position : Rect, value : float, topValue : float, buttonValue : float) : float
◆ static void VerticalSlider(position : Rect, value : float, topValue : float, buttonValue : float, slider : GUIStyle, thumb : GUIStyle) : float
参数
position屏幕上用于滑杆的矩形区域。
value滑杆显示的值。这个决定可移动滑块的位置。
topValue滑杆顶端的值
bottomValue 滑杆底端的值
slider用于显示拖动区域的GUIStyle。如果不设置,将使用当前GUISkin的horizontalSlider。
thumb用于显示土洞区域的GUIStyle。如果不设置,将使用当前GUISkin的horizontalSliderThumb。
返回float – 被用户设置的值。
描述:一个用户可以拖动的垂直滑杆。可以在min和max之间改变一个值。
◆ static void Window(id : int, position : Rect, func : WindowVoid, text : string) : Rect
◆ static void Window(id : int, position : Rect, func : WindowVoid, image : Texture) : Rect
◆ static void Window(id : int, position : Rect, func : WindowVoid, content : GUIContent) : Rect
◆ static void Window(id : int, position : Rect, func : WindowVoid, text : string, style : GUISytle) : Rect
◆ static void Window(id : int, position : Rect, func : WindowVoid, image : Texture, style : GUIStyle) : Rect
◆ static void Window(id : int, clientRect : Rect, func : WindowVoid, title : GUIContent, style : GUIStyle) : Rect
参数
id用于每个窗口的唯一ID。这是用于接口的ID。
clientRect 屏幕上用于组的矩形区域。
func在窗体内部创建GUI的函数。这个函数必须使用一个函数 – 当前创建 GUI的窗体id
text作为窗体标签的文本。
image 用于在标题栏上显示图片的Texture
content 用于这个窗口的文本,图形和提示。
style用于窗口的可选风格。如果不设置,将使用当前GUISkin的window。
返回Rect – 窗口位于的矩形位置
描述:制作一个弹出窗口
窗口浮动在普通GUI控件之上,具有单击激活的特点并可以有选择的随意被端用户拖动。不像其他的控件,你需要传递给他们一个独立的功能并放置在窗口中。注意:如果你使用GUILayout在窗口中放置你的组件,你应该使用GUILayout.Window。这是一个小例子帮助你开始:
var windowRect = Rect(20, 20, 120, 50);
void OnGUI()
{
//注册窗口。注意第三个参数。
windowRect = GUI.Window(0, windowRect, DoMyWindow, “My Window”);
}
//制作窗口内容
void DoMyWindow(windowID : int)
{
if(GUI.Button(Rect(10, 20, 100, 20), ”Hello World”))
print(“Get a click”);
}
你可以使用相同的函数来创建多个窗口。需要确保每个窗口有一个自己的ID。例如:
var windowRect0 = Rect(20, 20, 120, 50);
var windowRect1 = Rect(20, 100, 120, 50);
void OnGUI()
//注意窗口。我们创建了两个使用相同函数的窗体
//注意他们的ID不同。
windowRect0 = GUI.Window(0, windowRect0, DoMyWindow, “My Window”);
windowRect1 = GUI.Window(1, windowRect1, DoMyWindow, “My Window”)
}
//制作窗口内容
void DoMyWindow(windowID : int)
{
if(GUI.Button(Rect(10, 20, 100, 20), “Hello World”))
print(“Get a click in window ” + windowID);
//使窗口可以被拖动
GUI.DragWindow(Rect(0, 0, 10000, 10000));
}
停止显示窗口,简单的在DoGUI函数内停止调用GUI.Window。
//布尔变量以决定是否显示窗口
//从游戏GUI,脚本,检视面板中或者其他地方改变这个决定窗口是否可见。
var doWindow() = true;
//制作窗口内容
void OnGUI()
{
//制作一个开关变量来隐藏或显示窗口
doWindow() = GUI.Toggle(Rect(10, 10, 100, 20), doWindow(), “Window 0”);
//确保仅在doWindow()为真时调用GUI.Window
if(doWindow())
GUI.Window(0, Rect(110, 10, 200, 60), DoWindow(), “Basic Window”);
}
为了使窗口从自动GUI获取它的尺寸,使用GUILayout.Window。
调用顺序
窗口需要从后向前绘制。在其他窗口顶部的窗口需要在其他窗口之后绘制。这就意味着你不能指望你的DoWindow函数以任何特定的顺序被调用。为了让这个能够工作,当你的创建窗口时下面值被存储(使用Window函数),当DoWindow被调用时取回:GUI.skin, GUI.enabled, GUI.color, GUI.backgroundColor, GUI.contentColor, GUI.matrix
这就是说很容易像这样制作彩色窗口:
var windowRect0 = Rect(20, 20, 120, 50);
var windowRect1 = Rect(20, 100, 120, 50);
void OnGUI()
{
//这里我们制作了2个窗口,在这个之前设置GUI.color的值。
GUI.color = Color.red;
windowRect0 = GUI.Window(0, windowRect0, DoMyWindow, “Red Window”);
GUI.color = Color.green;
windowRect1 = GUI.Window(1, windowRect1, DoMyWindow, “Green Window”);
}
//制作窗口内容
//GUI.color的值被设置为窗口被创建之前的值
void DoMyWindow(windowID : int)
{
if(GUI.Button(Rect(10, 20, 100, 20), “Hello world!”))
print(“Got a click in window with color ” + GUI.color);
//使窗口可以被拖动
GUI.DragWindow(Rect(0, 0, 10000, 10000));
}
提示:你可以使用GUI.color的alpha组件来淡入淡出窗口。
参见:DragWindow, BringWindowToFront, BringWindowToBack
GeometryUtility

用于普通集合功能的工具类
类方法
◆ static void CalculateFrusturnPlanes(camera : Camera) : Plane[]
描述:计算视锥平面
这个函数取给定的相机视锥并返回它的六个面。
参见:Plane, GeometryUtility.TestPlanesAABB
◆ static void CalculateFrusturnPlanes(worldToProjection : Matrix4x4) : Plane[]
描述:计算视锥平面
这个函数返回由给定的视和投影矩阵定义的视锥的六个面。
参见:Plane, GeometryUtility.TestPlanesAABB
◆ static void TestPlanesAABB(planes : Plane[], bounds : Bounds) : bool
描述:如果包围盒在平面数组内部返回真。
如果包围盒在平面内部或者与任何平面交互返回真。
参见:GeometryUtility.CalculateFrusturnPlanes。
Gizmos

Gizmos用于场景中给出一个可视化的调试或辅助设置。
所有的Gizmos绘制都必须在脚本的OnDrawGizmos或OnDrawGizmosSelected函数中完成。
OnDrawGizmos在每一帧都被调用。所有在OnDrawGizmos内部渲染的Gizmos都是可见的。
OnDrawGizmosSelected尽在脚本所附加的物体被选中时调用。
类变量
◆ static var color : Color
描述:设置下次绘制的Gizmos的颜色。
void OnDrawGizmosSelected()
{
//在物体的前方绘制一个5米长的线
Gizmos.color = Color.red;
var direction = transform.TransformDirection(Vector3.forward) * 5;
Gizmos.DrawRay(transform.position, direction);
}
◆ static var matrix : Matrix4x4
描述:设置用于渲染所有gizmos的矩阵。
类方法
◆ Static void DrawCube(center:Vector3,size:Vector3):void
描述:用center和size绘制一个立方体.
Void OnDrawGizmosSelected(){
//在变换位置处绘制一个变透明的蓝色立方体
Gizmos.color=Color(1,0,0,5);
Gizmos.DrawCube(transform.position,Vector3(1,1,1));
}
◆ Static void DrawGUITexture(screenRect:Rect,texture:Texture,mat:Material=null):void
描述:在屏幕坐标下绘制一个纹理。用于GUI背景。
◆ Static void DrawGUITexture(screenRect:Rect,texture:Texture,leftBorder:int,rightBorder:int,topBorder:int,bottomBorder:int,mat:Material=null):void
描述:在屏幕坐标下绘制一个纹理。用于GUI背景。
◆ Static void Drawicon(center:Vector3,name:string):void
描述:在世界位置center处绘制一个图标.
这个图标被命名为name并放置在Assets/Gizmos文件夹或Unity.app/Resoutces文件夹.DrawIcon允许你在游戏中快速选择重要的物体。
//在物体位置处绘制光源灯泡图标.
//因为我们在OnDrawGizmos函数内部调用它,在场景视图中
//这个图标总是可点选的.
void OnDrawGizmos(){
Gizmos DrawIcon(transform.position,”Light Gizmo.tiff”);
}
◆ Static void DrawLine(from:Vector3,to:Vector3):void
描述:绘制一条线从from到to.
Var Larget:Transform;
void OnDrawGizmosSelected(){
if(target != null)
{
//从transform到target绘制一条蓝色的线
Gizmos.color = Color.blue;
Gizmos.DrawLine(transform.position,target.position);
}
}
◆ static void DrawRay(r:Ray):void
static void DrawRay(from:Vector3,direction:Vector3):void
描述:绘制一个射线从from开始到from + direction.
◆ void OnDrawGizmosSelected(){
Gizmos.color = Color.red;
Direction = transform.TransformDirection(Vector3.forward)*5;
Gizmos.DrawRay(transform.positon,direction);
}
◆ Static void DrawSphere(center:Vector3,radius:flont):void
描述:用center和randins绘制一个球体.
Void OnDrawGizmosSelected(){
//在变换位置处绘制一个黄色的球体
Gizmos.color = Color.yellow;
Gizmos.DrawSphere(transtorm.position,1);
}
◆ Static void DrawWireCube(center:Vector3, size: Vector3):void
描述:用center和radius绘制一个线框立方体.
Void OnDrawGizmosSelected(){
//在变换位置处绘制一个黄色立方体
Gizmos.color = Color.yellow;
Gizmos.DrawWireCube (transtorm.position, Vector3(1,1,1));
}
◆ Static void DrawWireSphere(center:Vector3,radius:float):void
描述:用center和radius绘制一个线框球体.
Var explosionRadius = 5.0;
Void OnDrawGizmosSelected(){
//选中的时候显示爆炸路劲
Gizmos.color = Color.white;
Gizmos.DrawSphere(transtorm.position,explpsionRadius);
}
Graphics

Unity绘制函数的原始接口。
这个是高级快捷地进去Unity优化网格绘制的地方。只限于Unity Pro.
类方法
◆ static void DrawMesh(mesh:Mesh, position: Vector3, rotation: Quaternion, material: Material, layer: int, camera: Camera=null, submeshIndex: int, properties: MaterialPropertyBlock=null): void

◆ static void DrawMesh(mesh:Mesh,matrix:Matrix4x4,material:Material,layer:int,
camera:Camera = null,submeshIndex:int,properties:MaterialPropertyBlock=null):
void
参数
mesh 用于绘制的Mesh.
position 网格的位置。
rotation 网格的旋转。
matrix 网格的变换矩阵(由位置,旋转和变换x组合)
material 使用的Material.
layer 使用的Layer.
Camera 如果是null(缺省),该网格将在所有相机中被绘制,否则它将只会在给定的相机中渲染。
submeshIndex 那个子网格被渲染。这只是在网格使用了多个材质的时候使用。
Properties 在网格绘制前应用到才子的额外材质属性。参考MaterialPropertyBlock.
描述:绘制一个网格
DrawMesh 在一帧中绘制一个网格。这个网格将受到光照的影响,可以投射接收阴影并被投射器影响。就像它是某个物体的一部分。他可以绘制于所有相机,或者只是特定的一些相机
在你想创建人景的网格,而又不想过多的创建和管理游戏物体的时候使用DrawMesh.注意,DrawMesh不会立即绘制网格;它仅仅提交它用于渲染。网格将被作为普通渲染过程的一部分。如果想立即绘制一个网格。使用Graphics.DrawMeshNow。
因为DrawMesh不会立即绘制网格,在调用这个函数之间修改材质属性并会使材质使用它们。如果你想绘制一系列相同材质的网格,但是稍微有些不同的属性(例如,改变每个网格的颜色),那么使用MaterialPropertyBlock参数。
参见:MateralPropertyBlock.
◆ Static void DrawMeshNow(mesh:Mesh,position:Vector3,rotation:Quatemion):void
描述:在给定的position,用给定的rotation绘制一个mesh。
这个函数将设置模型视矩阵并绘制网络。当前设置材质的pass可以被使用(参考Setpass)
◆ Static void DrawMeshNow(mesh:Mesh,position:Vector3,rotation:Quatemion,materallndex:int):void
描述:在给定的position,用给定的rotation和一个materialIndex绘制一个mesh.
◆ Static void DrawMeshNow(mesh:Mesh,matrx:Matrix4x4):void
描述:用给定的matrix绘制一个mesh.
如果这个矩阵有一个负的缩放这个函数将不会正确渲染物体。
◆ Static void DrawMeshNow(mesh:Mesh,matrx:Matrix4x4,materialIndex:int):void
描述:用给定的matrix和materialIndex绘制一个mesh.
如果这个矩阵有一个负的缩放这个函数将不会正确渲染物体。
◆ Static void DrawTexture(screenRect:Rect,texture:Texture,mat:Material = null):void
描述:在屏幕坐标下绘制一个纹理。
◆ Static void DrawTexture(screenRect:Rect,texture:Texture,leftBorder:int,rughtBord:int,topBorder:int,bottomBorder:int,mat:Material=null):void
描述:在屏幕坐标下绘制一个纹理。
◆ Static void DrawTexture(screenRect:Rect,texture:Texture,sourceRect:Rect,leftBorder:int,rughtBord:int,topBorder:int,bottomBorder:int,mat:Material=null):void
描述:在屏幕坐标下绘制一个纹理
◆ static void DrawTexture(screenReet:Rect,texture:Texture,sourceRect:Rect,leftBordr:int.rightBrder:int.topBorder:int,bottomBorder:int,color:Bolor,mat:Material=null):void
描述:在屏幕坐标下绘制一个纹理。
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=horizontalspeed
inpul.getaxis(“mouse X”);
var v=verticalspeed
input.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表示中键.
◆ statie void GetMouseButtonUp(button:int)bool
描述:用户释放给定的鼠标按钮时返回真.
直到用户释放按钮并再次释放它时才返回真.button值为0表示中键左键,1表示右键,2表示中键.
◆ statie void ResetlnputAxes();Void
描述:重置所有输入。在ReaetlnputAxes之后所有轴将返回0并且所有按钮返回0.
这可用于当重生玩家,并且当你不想任何来自键盘的输入还处于按下时。
lnpu.ReaetlnputAxes();
jointDrive
结构
关节如何沿着本地X轴移动
变量
◆ var maximumForce:float
描述:用于向指定的方向推动物体的力的量。仅在Mode包含Velocity时使用。
◆ var mode:jointDriveMode
描述:驱动是否尝试到这个位置和/或速度.
◆ var positionDamper:float
描述:位置弹簧的阻力强度,只用于mode包含位置的时候.
◆ var positionSpring:float
描述:朝着定义的方向推动的一个阻力强度。只用于mode包含位置的时候.
Jointlimits
结构
jointlimits被Hingejoint使用来限制关节角度.
参见:Hingejoint
变量
◆ var max:float
描述:关节的上限。当关节角度或位置的上限。
关节将使用力来约束它。
//设置最小链接角度为20度
hingejoint.limits.max=40;
◆ var maxBounce:float
描述:当关节碰到关节的上限时关节的弹力。
//设置关节反弹时的上限
hingejoint.limits.maxBounce=1;
◆ var min:float
描述:关节的下限。当关节角度或位置的下限。
关节将使用力来约束它。
//设置最小链接角度为20度
hingejoint.limits.min=20;
◆ var minBounce:float
描述:当关节碰到关节的下限时关节的弹力。
//关节反弹时的下限
hingejoint.limits.minBounce=1;
jointMotor
结构
jointMotor用来旋转一个关节
例如:Hingejoint可以被告知以制定的速度和力旋转。关节然后用给定的最大力试图到达这个速度,参见:
变量
◆ var force:float
描述:动力将应用最大为force的力以便取得targetvelocity
◆ var freeSpin:bool
描述:如果freeSpin被启用动力将只加速而不会减速
◆ var targetvelocity:float
描述:动力将应用最大为force的力以便取得targetvelocity
Jointspring
结构
变量
◆ var damper:float
描述:用语阻尼弹簧的阻尼力。
◆ var spring:float
描述:用于达到目标位置的弹力
◆ var targetposition:float
描述:关节试图到达的目的位置
这里一个hingehoint目标位置是目标角度
Keyframe
结构
一个关键帧它可以插入动画的曲线
变量
◆ var in tangent:float
描述:在曲线上从下一个点到这个点时描述切线。
参加:outtangent
◆ var outtangent:float
描述:在曲线上从这个点到下一个点时描述切线。
参见:intangent
◆ var time:float
描述:关键帧时间
在一个2D图形中,你可以把这当做x值
参见:value
◆ var value:float
描述:该动画曲线在关键帧处的值
参见:time
构造函数
◆ static void keyframe(time:float,value:float):keyfranie
描述:创建一个关键帧
◆ static void keyframe(time:float,value:float,intangent:float,outangent:float):keyframe
描述:创建一个关键帧
layermask
结构
layermask允许你在检视面板中显示layermask弹出菜单
类似与camera,cullingmask。layermasks 可以选择性地过滤物体,例如当投射射线,
//使用层蒙板投射一个射线
//它可以在检视面板中修改
var mask larermask=
void Update(){
if(Physics.Raycast(transform.position, transform.forward, 100, mask.value))
{
Debug.Log(“Hit something”;
}
}
变量
◆ var valuc:vin
描述:转化层蒙板的值为一个整形值
//使用层蒙板投射一个射线
//它可以在检视面板中修改
var mask:lnyermask=-1
fonction update(){
if{physics.rayeast(transforn.position.transform.forwatd.100.mask.value))
{
Debug
}
}


  1. 0 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值