第六讲 Unity脚本概览

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//找到名为”Hand”的物体,调用附加到它上面的 //OtherScript脚本中的DoSomething 函数. transform.Find("Hand").GetComponent(OtherScript).DoSome thing("Hello");
脚本概览:访问其他游戏物体
//找到名为”Hand”的物体,然后应用一个力到附加在 //Hand的Rigidbody上。 transform.Find("Hand").rigidbody.AddForce(0, 10, 0);
脚本概览
例如:在Unity中: 用脚本来做的包括:计分、处理玩家、定义 玩家和外界行为,以及控制GUI接口。
脚本概览:常用操作
Unity内部的脚本,是通过附加自定义脚本对象到游戏 物体组成的。在脚本对象内部,不同的函数被特定的事件 调用,下面是最常用的几个函数: Update: 这个函数在渲染一帧之前被调用。这里是大部分游戏 行为代码被执行的地方。 FixedUpdate: 这个函数在每个物理时间步被调用一次。FixedUpdate 被调用的频率是由在菜单选项Edit >Project Settings >Time中的固定时间间隔所指定的并且你也能改变它。这 是处理基于物理游戏行为的地方。
脚本概览:访问其他游戏物体
1、通过检视面板赋值引用。 在检视面板中可以将任何变量赋值给对象。 //移动拖动到target值的物体 var target : Transform; function Update () { target.Translate(0, 1, 0); }
脚本概览:访问其他游戏物体
脚本概览:跟踪时间
如果想随着时间的变化增加关照的范围,可以用 下面的代码实现:以2单位/秒改变半径。 Function Update () { light.range = 2.0* Time.deltaTime; } 当通过力处理刚体的时候,通常不必使用 Time.deltaTime,因为引擎已经为你考虑到了这一点。
脚本概览:访问其他游戏物体
//移动所有的子物体,向上移动10个单位 for (var child : Transform in transform) { child.Translate(0, 1, 0); }
脚本概览:访问其他游戏物体
3、根据名称或标签定位。 我们可以使用GameObject.FindGameObjectWithTag 和GameObject.Find WithTag 搜索具有特定标签的游戏物 体。使用GameObject.Find 根据名称查找物体。
脚本概览:访问其他组件
组件是被用来附加到游戏物体上的,如果把 Renderer附加到游戏物体上,就可以是游戏物体被 渲染,附加Camera,就可以使游戏物体变为摄像机。 所有的脚本都是组件,因为它们都能被附加到游戏 物体上。
脚本概览:访问其他组件
最常用的组件可以作为简单成员变量访问:
Component: Transform Rigidbody Renderer Camera Light Animation Collider 可如下访问: transform rigidbody renderer camera(only on camera objects) light(only on light objects) animation collider
脚本概览:常用操作
大多数游戏物体的操作是通过游戏物体的 Transform和Rigidbody来做的。在行为脚本内部它 们可以分别通过Transform和Rigidbody访问,因此 如果你想绕着Y轴每帧旋转5度,可以用如下代码实 现: Function Update () { transform.Rotate(0,5,0); }
脚本概览:成员变量&全局变量
定义在任何函数之外的变量是一个成员变量。在 Unity中这个变量可以通过检视面板来访问。任何保存 在成员变量中的值也可以自动随工程保存。 var memberVariable = 0.0; 上面的变量将在检视面板中显示为名为“Member Variable”的数值属性。 如果设置的变量类型是一个组件类型(例如 Transform, Rigidbody, Collider, script ),我们可以 在检视面板中通过拖动一个游戏物体来设置它们。
脚本概览:访问其他游戏物体
4、作为参数传递 一些事件本身包含详细的信息。例如,触发器事件将碰 撞物体的Collider组件传递给处理函数。 OnTriggerStay给我们一个碰撞触发器的引用。从这个碰 撞触发器我们可以获取附加到其上的刚体。
脚本概览:访问其他游戏物体
function OnTriggerStay( other : Collider ) { // 如果另一个碰撞物体也是刚体,给其加上一个力 if (other.rigidbody) { other.rigidbody.AddForce(0, 2, 0); } }
脚本概览:访问其他游戏物体
function Start (){ // 通过名称 var go = GameObject.Find (“SomeGuy”); go.transform.Translate(0, 1, 0); // 通过标签 var player = GameObject.Find WithTag ("Player"); player.transform.Translate(0, 1, 0); }
脚本概览:常用操作
如果想向前移动一个物体,可用如下代码实现:
Function Update () { transform.Translate(0,0,2); }
脚本概览:跟踪时间
Time类包含一个非常重要的类变量,称为 deltaTime。这个变量包含从上一次调用Update或 FixedUpdate到现在的时间量。 所以对于上面的例子,修改它使这个物体以一个 恒定的速度旋转而不依赖于帧率: Function Update () { transform.Rotate(0,5* Time.deltaTime,0); }
脚本概览:访问其他游戏物体
5、一种类型的所有脚本。 使用Object.FindObjectsOfType找到所有具有相同 类或脚本名称的物体,或者使用 Object.FindObjectOfType找到这个类型的第一个物体。 function Start (){ // 找到场景中可以附加到任意一个游戏物体上的OtherScript var other : OtherScript = FindObjectOfType(OtherScript); other.DoSomething(); }
脚本概览:向量
Unity使用Vector3类统一表示所有的3维向量。3维向 量的不同组件可以通过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); var direction = Vector3.forward; // 等同于Vector3(0, 0, 1); var direction = Vector3.right; // 等同于Vector3(1, 0, 0);
脚本概览:访问其他游戏物体
2、通过物体层次定位。 对于一个已经存在的物体,可以通过游戏物体的 Transform组件来找到它的子物体和父物体。
//找到脚本所附加的游戏物体的子物体”Hand” transform.Find("Hand").Translate(0, 1, 0);
脚本概览:访问其他游戏物体
脚本概览:访问其他游戏物体
我们也可以通过碰撞触发器获取附加在同一物体上的 任何组件。 function OnTriggerStay( other : Collider ) { // 如果另一个碰撞物体附加了OtherScript,调用它 //的OtherScript,通常碰撞物体不会附加脚本,所 //以我们需要先检查以避免null引起的异常。 if (other.GetComponent(OtherScript)) { other.GetComponent(OtherScript).DoSomething(); }
脚本概览:跟踪时间
移动物体: Function Update () { transform.Translate(0,0,2* Time.deltaTime); } 当乘以Time.deltaTime时,实际表达的是:想以 5米/秒移动这个物体,而不是5米/帧。这将使游戏独 立于帧运行,同时运动的单位也好理解。
脚本概览:访问其他组件
任何附加到一个游戏物体的组件或者脚本都可以 通过GetComponent访问。 transform.Translate(0,1,0); 等同于 GetComponent(Transform).Translate(0,1,0);
注意:transform和Transform.之间大小写的区别, 前者是变量(小写),后者是类或者脚本名称(大 写)。
一旦找到这个物体,我们就可以使用GetComponent 函数来或取它的脚本。 //找到名为”Hand”的物体,在附加到它上面的 //OtherScript中,设置foo为2. transform.Find("Hand").GetComponent(OtherScript).foo = 2;
脚本概览:访问其他游戏物体
脚本概览:访问其他组件
使用GetComponent可以找到任何附加在同一款 游戏物体上的脚本和组件。
脚本概览:访问其他游ห้องสมุดไป่ตู้物体
大多数高级代码不仅需要操作一个物体。Unity脚 本接口有各种方法来找到并访问其他游戏物体和组 件。下面,我们假定有一个名为OtherScript.js的脚 本附加到场景的游戏物体上。 var foo = 5; function DoSomething ( param : String) { print(param + " with foo: " + foo); }
脚本概览:访问其他游戏物体
我们可以使用GetComponent,在找到的游戏物体上得到任 何脚本或组件。 function Start (){ // 通过名称 var go = GameObject.Find("SomeGuy"); go.GetComponent(OtherScript).DoSomething(); // 通过标签 var player = GameObject.Find WithTag ("Player"); player.GetComponent(OtherScript).DoSomething(); }
脚本概览
脚本概览
简单地说,引擎就是“用于控制所有游戏功 能的主程序,从计算碰撞、物理系统和物体的相 对位置,到接受玩家的输入,以及按照正确的音 量输出声音等等。” 引擎相当于游戏的框架,框架搭好后,关卡 设计师、建模师、动画师只要往里填充内容就可 以了。
脚本概览
引擎提供完成所有困难工作、图形处理、网络等 等的代码。 而脚本被用来将引擎的不同部分连起来,为游戏 进行提供功能,并且实现游戏规则。
将包含OtherScript脚本的游戏对象赋值给target。 var target : OtherScript; function Update () { // 设置target物体的foo变量 target.foo = 2; //调用target物体的DoSomething函数 target.DoSomething(“Hello”); }
相关文档
最新文档