收藏 分享(赏)

Unity3d 脚本参考大全.doc

上传人:dzzj200808 文档编号:2532896 上传时间:2018-09-21 格式:DOC 页数:456 大小:1.55MB
下载 相关 举报
Unity3d 脚本参考大全.doc_第1页
第1页 / 共456页
Unity3d 脚本参考大全.doc_第2页
第2页 / 共456页
Unity3d 脚本参考大全.doc_第3页
第3页 / 共456页
Unity3d 脚本参考大全.doc_第4页
第4页 / 共456页
Unity3d 脚本参考大全.doc_第5页
第5页 / 共456页
点击查看更多>>
资源描述

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

2、时间句柄。他们的名称都以 On 开始, (例如 OnCollisionEnter).为了查看完整的预定义时间的列表,请参考 MonoBehaviour 文档。概览:常用操作大多数游戏物体的操作是通过游戏物体的 Transform 和/或 Rigidbody 来做的。在行为脚本内部他们可以分别通过 transform 和 rigidbody 访问,因此如果你想绕着 Y 轴每帧旋转 5 度,你可以如下写:function Update()transform.Rotate(0,5,0);如果你想向前移动一个物体,你应该如下写:function Update()transform.Transtate(

3、0,0,2);概览:跟踪时间Time 类包含一个非常重要的类变量,成为 deltaTime.这个变量包含从上一次调用 Update或 FixedUpdate(根据你是在 Update 函数还是在 FixedUpdate 函数中)到现在的时间量。所以对于上面的例子,修改它使这个物体以一个恒定的速度旋转而不依赖于帧率:function Update()transform.Rotate(0,5*Time.deltaTime,0);移动物体:function Update()transform.Transtate(0,0,2*Time.deltaTime);如果你加或减一个每帧改变的值,你应该将它与

4、Time.deltaTime 相乘,当你乘以Time.deltaTime 时,你实际表达的是:我想以 10 米/ 秒移动这个物体而不是 10 米/ 帧。这不仅仅是因为你的游戏将独立于帧率运行,同时也是因为运动的单位容易理解。 (10 米/秒)另一个例子,如果你想随着时间增加光照的范围。下面的表达式,以 2 单位/ 秒改变半径:function Update()light.range += 2.0*Time.deltaTime;当通过力处理刚体的时候,你通常不必用 Time.deltaTime 乘,因为引擎已经为你考虑到了这一点。概览:访问其他组件组件被附加到游戏物体。附加 Renderer 到

5、游戏物体使得它在场景中渲染,附加一个Camera 使它变为相机物体。所有的脚本都是组件,因为他们能被附加到游戏物体。最常用的组件可以作为简单成员变量访问:Component可如下访问Transform transformRigidbody rigidbodyRenderer rendererCamera camera(only on camera objects)Light light(only on light objects)Animation animationCollider collider等等。对于完整的预定义成员变量的列表,请查看 Component,Behaviour 和 Mo

6、noBehaviour类文档。如果游戏物体没有你想取回类型的组件,上面的变量将被设置为 null。任何附加到一个游戏物体的组件或者脚本都可以通过 GetComponent 访问。transform.Translate(0,1,0);/等同于GetComponent(Transform).Translate(0,1,0);注意 transform 和 Transform 之间大小写的区别,前者是变量(小写) ,后者是类或者脚本名称(大写) ,大小写的不同使你能够从类和脚本名中区分变量。应用我们所学,你可以使用 GetComponent 找到任何附加在同一游戏物体上的脚本和组件。请注意要使下面的例

7、子能够工作,你需要有一个名为 OtherScript 的脚本,其中包含一个 DoSomething 函数。OtherScript 脚本必须与下面的脚本附加到相同的游戏物体上。/这个用于在同一个游戏物体上找到名为 OtherScript 的脚本/并调用它上面的 DoSomething 函数.function Update() otherScript = GetComponent(OtherScript);otheScript.DoSomething();概览:访问其他游戏物体大多数高级的代码不仅需要操作一个物体。Unity 脚本接口有各种方法来找到并访问其他游戏物体和组件。在下图,我们假定有一个

8、名为 OtherScript.js 的脚本附加到场景的游戏物体上。var foo = 5;function DoSomething(param:String)print(param + ”with foo:” + foo);1. 通过检视面板赋值引用。你可以通过检视面板赋值变量到任何物体。/变量拖动到 target 槽的物体var target : Transform;function Update()target.Translate(0,1,0);你也可以在检视面板中公开到其他物体的引用。下面你可以一个包含 OtherScript 的游戏物体到检视面板中的 target 槽。/设置在检视面板

9、中赋值的 target 变量上的 foo,调用 DoSomething.var target:OtherScript;function Update()/设置 target 物体的 foo 变量target.foo = 2;/调用 target 上的 DoSomethingtarget.DoSomething(“Hello”);2. 通过物体层定位。对于一个已存在的物体,可以通过游戏物体的 Transform 组件来找到子和父物体:/找到脚本所附加的/游戏物体的子“Hand”transform.Find(“Hand”).Translate(0,1,0);一旦在层次视图中找到这个变换,你可以使用

10、 GetComponent 来获取其他脚本,/找到名为“Hand”的子。/调用附加到它上面的 OtherScript 脚本的 DoSomething.transform.Form(“Hand”).GetComponent(OtherScript)DoSomething(“Hello”);/找到名为”Hand”的子/然后应用一个力到附加在 hand 上的刚体transform.Find(“Hand”).rigidbody.AddForce(0,10,0);你可以循环所有的子。/变换的所有子向上移动 10 个单位for(var child : Transform in transform)chil

11、d.Transform(0,1,0);参考 Transform 类文档获取更多的信息3. 根据名称或标签定位你可以使用 GameObject.FindWithTag 和 GameObject.FindGameObjectWithTag 搜索具有特定标签的游戏物体。使用 GameObject.Find 根据名称查找物体。function Start()/按照名称var go = GameObject.Find(“SomeGuy”);go.transform.Translate(0,1,0);/按照标签var player = GameObject.FindWithTag(“Player”);pl

12、ayer.transform.Transform(0,1,0);你可以在结果上使用 GetComponent,在找到的游戏物体上得到任何脚本或组件。function Start()/按名称var go = GameObject.Find(“SomeGuy”);go.GetComponent(OtherScript).DoSomething();/按标签var player = GameObject.FindWithTag(“Player”);player.GetComponent(OtherScript).DoSomething();一些特殊的物体有快捷方式,如主相机使用 Camera.mai

13、n。4. 作为参数传递一些事件消息在事件中包含详细信息。例如,触发事件传递碰撞物体的 Collider 组件到处理函数。OntriggerStay 给我们一个碰撞器的引用。从这个碰撞器我们可以获取附加到其上的刚体。function OnTriggerStay(other : Collider)/如果另一个碰撞器也有一个刚体/应用一个力到它上面if(other.rigidbody)other.rigidbody.AddForee(0,2,0);或者我们通过碰撞器获取附加在同一物体上的任何组件。function OnTriggerStay(other:Collider)/如果另一个碰撞器附加了 O

14、therScript/调用它上面的 DoSomething/大多数时候碰撞器不会附加脚本/所以我们需要首先检查以避免 null 引用异常if(other.GerComponent(OtherScript)other.GetComponent(OtherScript).DoSomething();注意通过上述例子中的 other 变量,你可以访问碰撞物体中的任何组件。5 一种类型的所有脚本使用 Object.FindObjectsOfType 找到所有具有相同类或脚本名称的物体,或者使用Object.FindObjectOfType 找到这个类型的第一个物体。function Start() /

15、找到场景中附加了 OtherScript 的任意一个游戏物体var other : OtherScipt = 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

16、);Vector3 也定义了一些常用的常量值。var direction = Vector3.up;/与 Vector3(0,1,0);相同单个向量上的操作可以使用下面方式访问:someVector.Normalize();使用多个向量的操作可以使用 Vector3 类函数:theDistance = Vector3.Distance(oneVector,otherVector);(注意你必须在函数名之前写 Vector3.来告诉 JS 在哪里找到这个函数,这适用于所有类函数。 )你也可以使用普通数学操作来操纵向量。combined = vector1 + vector2;查看 Vector3

17、 类文档获取完整操作和可用属性的列表。概览:成员变量function Update()if(Vector3.Distance(enemy.position,transform.position) Create - C Sharp/Boo Script 菜单创建脚本,创建模板已经包含了必需的定义。public class NewBehaviourScript : MonoBehaviour . / C#class NewBehaviourScript (MonoBehaviour): . # Boo2.使用 Awake 或 Start 函数来初始化Javascript 中放置在函数之外的代码,在

18、 C#或 Boo 中要放置在 Awake 或 Start 中。Awake 和 Start 的不同是 Awake 在场景被加载时候运行,而 Start 在第一次调用 Update 或FixedUpdate 函数之前被调用,所有 Awake 函数在任何 Start 函数调用之前被调用。3.类名必须与文件名相同Javascript 中,类名被隐式地设置为脚本的文件名(不包含文件扩展名) 。在 c#和 Boo 中必须手工做。4.在 C#中 Coroutines 有不同语法。Coroutines 必有一个 IEnumerator 返回类型,并且 yield 使用 yield return 而不是 yie

19、ldusing System.Collections;using UnityEngine;public class NewBehaviourScript : MonoBehaviour / C# coroutineIEnumerator SomeCoroutine ()/ 等一帧yield return 0;/等两秒yield return new WaitForSeconds (2);5不要使用命名空间目前 Unity 还不支持将代码放置在一个命名空间中,这个需要将会出在未来的版本中。6.只有序列化的成员变量会显示在检视面板中私有和保护成员变量只在专家模式中显示,属性不被序列化或显示在检视面

20、板中。7避免使用构造函数不要在构造函数中初始化任何变量,使用 Awake 或 Start 实现这个目的。即使是在编辑模式中 Unity 也自动调用构造函数,这通常发生在一个脚本被编译之后,因为需要调用构造函数来取向一个脚本的默认值。构造函数不仅会在无法预料的时刻被调用,它也会为预设或未激活的游戏物体调用。 单件模式使用构造函数可能会导致严重的后果,带来类似随机 null 引用异常。因此如果你想实现,如,一个单件模式,不要使用构造函数,而是使用 Awake。其实上,没有理由一定要在继续自 MononBehaviour 类的构造函数中写任何代码。概览:最重要的类Javascript 中可访问的全局

21、函数或 C#中的基类移动/旋转物体动画系统刚体FPS 或第二人称角色控制器概览:性能优化1使用静态类型在使用 Javascript 时最重要的优化是使用静态类型而不是动态类型,Unity 使用一种叫做类型推理的技术来自自动转换 Javascript 为静态类型编码而不需要你做任何工作。var foo=5;在上面的例子里 foo 会自动被推断为一个整型值。因此,Unity 可能使用大量的编译时间来优化。而不使用耗时的动态名称变量查找等。这就是为什么 Unity 比其他在 JavaScript 的实现平均快 20 倍的原因之一。唯一的问题是,有时并非一切都可以做类型推断。Unity 将会为这些变量

22、重新使用动态类型。通过回到动态类型,编写 JavaScript 代码很简单。但是这也使得代码运行速度较慢。让我们看一些例子:function Start ()var foo = GetComponent(MyScript);foo.DoSomething();这里 foo 将是动态类型,因此调用 DoSomething 函数将使用较长时间,因为 foo 的类型是未知的,它必须找出它是否支持 DoSomething 函数,如果支持,调用它。function Start ()var foo : MyScript = GetComponent(MyScript);foo.DoSomething();

23、这里我们强制 foo 为指定类型,你将获得更好的性能。2使用#pragma strict当然现在问题是,你通常没有意识到你在使用动态类型。#pragma strict 解决了这个!简单的在脚本顶部添加#pragma strict。然后,unity 将在脚本中禁用动态类型,强制使用静态类型,如果一个类型未知。Unity 将报告编译错误。那么在这种情况下 foo 将在编译时产生一个错误:#pragma strictfunction Start ()var foo = GetComponent(MyScript);foo.DoSomething();3.缓存组件查找另一个优化是组件缓存。不幸的是该优

24、化需要一点编码,并且不一定是值得的,但是如 果你的脚本是真的用了很长时间了,你需要把最后一点表现出来,这是一个很好的优化。当你访问一个组件通过 GetComponent 或访问变量,Unity 会通过游戏对象找到正确的组件。这一次可以很容易地通过缓存保存在一个私有变量里引用该组件。简单地把这个:function Update () transform.Translate(0, 0, 5);变成:private var myTransform : Transform;function Awake ()myTransform = transform;function Update ()myTran

25、sform.Translate(0, 0, 5);后者的代码将运行快得多,因为 Unity 没有找到变换在每一帧游戏组件中的对象。这同样适用于脚本组件,在你使用 GetComponent 代替变换或者其它的东西。4.使用内置数组内置数组的速度非常快,所以请使用它们。而整列或者数组类更容易使用,因为你可以很容易地添加元素,他们几乎没有相同的速度。内置数组有一个固定的尺寸,但大多数时候你事先知道了最大的大小在可以只填写了以后。关于内置数组最好的事情是,他们直接嵌入在一个结构紧凑的缓冲区的数据类型没有任何额外的类型信息或其他开销。因此,遍历是非常容易的,作为一切缓存在内存中的线性关系。private

26、 var positions : Vector3;function Awake ()positions = new Vector3100;for (var i=0;i 100)return;perform real work work.这不是一个好主意,因为 Unity 必须调用更新功能,而你正在执行工作的每一个帧。一个比较好的解决办法是禁用行为直到玩家靠近。有 3 种方法来做到这一点:1.使用 OnBecameVisible 和 OnBecameInvisible。这些回调都是绑到渲染系统的。只要任何相机可以看到物体,OnBecameVisible 将被调用,当没有相机看到任何一个,OnBe

27、cameInvisible 将被调用。这种方法在很多情况下非常有用,但通常在 AI 中并不是特别有用,因为只要你把相机离开他们敌人将不可用。function OnBecameVisible () enabled = true;function OnBecameInvisible ()enabled = false;2.使用触发器。一个简单的球形触发器会工作的非常好。一旦你离开这个影响球你将得到OnTriggerEnter/Exit 调用。function OnTriggerEnter (c : Collider)if (c.CompareTag(“Player“)enabled = true;

28、function OnTriggerExit (c : Collider)if (c.CompareTag(“Player“)enabled = false;3.使用协同程序。Update 调用的问题是它们每帧中都发生。很可能会只需要每 5 秒检检查一次到玩家的距离。这应该会节省大量的处理周期。概览:脚本编译(高级)Unity 编译所有的脚本为.NET dll 文件,.dll 将在运行时编译执行。这允许脚本以惊人的速度执行。这比传统的 javascript 快约 20 倍。比原始的 C+代码慢大约 50%。在保存的时候,Unity 将花费一点时间来编译所有脚本,如果 Unity 还在编译。你可

29、以在 Unity 主窗口的右下角看到一个小的旋转进度图标。脚本编译在 4 个步骤中执行:1.所有在“Standard Assets“, “Pro Standard Assets“ 或 “Plugins“的脚本被首先编译。在这些文件夹之内的脚本不能直接访问这些文件夹之外脚本。不能直接引用或它的 变量,但是可以使用 GameObject.SentMessage 与它们通信。2.所有在“Standard Assets/Editor“, “Pro Standard Assets/Editor“ 或 “Plugins/Editor“的脚本被首先编译。如果你想使用 UnityEditor 命名空间你必须放

30、置你的脚本在这些文件夹中,例如添加菜单项或自定义的向导,你都需要放置脚本到这些文件夹。这些脚本可以访问前一组中的脚本。3.然后所有在“Editor“中的脚本被编译。如果你想使用 UnityEditor 命名空间你必须放置你的脚本在这些文件夹中。例如添加菜单单项或自定义的向导,你都需要放置脚本到这些文件夹。这些脚本可以访问所有前面组中的脚本,然而它们不能访问后面组中的脚本。这可能会是一个问题,当编写编辑器代码编辑那些在后面组中的脚本时。有两个解决方法:1、移动其他脚本到“Plugins“文件夹 2、利用 JavaScript 的动态类型,在 javascript 中你不需要知道类的类型。在使用

31、GetComponent 时你可以使用字符串而不是类型。你也可以使用SendMessage,它使用一个字符串。4.所有其他的脚本被最后编译所有那些没有在上面文件夹中的脚本被最后编译。所有在这里编译的脚本可以访问第一个组中的所有脚本(“Standard Assets“,“Pro Standard Assets“ or “Plugins“) 。这允许你让不同的脚本语言互操作。例如,如果你想创建一个 JavaScript。它使用一个 C#脚本; 放置 C#脚本到“Standard Assets“文件夹并且 JavaScript 放置在“Standard Assets“文件夹之外。现在 JavaScr

32、ipt 可以直接引用 c#脚本。放置在第一个组中的脚本,将需要较长的编译时间,因为当他们被编译后,第三组需要被重新编译。因此如果你想减少编译时间,移动那些不常改变 的到第一组。经常改变的到第四组。 二、 运行时类AnimationCurve类动画曲线,在给定的时间添加关键帧并确定曲线。变量 var keys : Keyframe描述:定义在动画曲线中的所有键。这让你从数组中清理,添加或移除键。如果键没有按照时间顺序,它们会在赋值的时候自动排序。 var length : int描述:曲线中键的数量(只读) 。 var preWrapMode : WrapMode描述:第一帧之前动画的行为。 v

33、ar thisindex : int : Keyframe描述:取向索引为 index 的键(只读) 。构造函数 static function AnimationCurve(params keys : Keyframe) : AnimationCurve描述:从任意数量的关键帧创建一个动画曲线。该函数从可变数量的 Keyframe 参数创建一个曲线,如果你想从一个关键帧数组中创建一个曲线,创建一个空的曲线并指定 keys 属性。/一个慢退慢出的动画曲线(切线都是平的) 。var curve = new AnimationCurve(Keyframe(0, 0), Keyframe(1, 1)

34、;function Update ()transform.position.x = Time.time;transform.position.y = curve.Evaluate(Time.time); static function AnimationCurve () : AnimationCurve描述:创建一个空的动画曲线函数 function AddKey (time : float, value : float) : int描述:添加一个新的键到曲线。平滑切线将被自动为该键的计算,返回该键的索引,如果因为在同一时间上已经有另一个关键帧而不能添加键,将返回-1。 function Ad

35、dKey (key : Keyframe) : int描述:添加一个新的键到曲线。返回该键的索引,如果因为在同一时间上已经有另一个关键帧而不能添加键,将返回-1。 function Evaluate (time : float) : float描述:该动画曲线在 time 的值。 function MoveKey (index : int, key : Keyframe) : int描述:移除 index 处的关键帧并插入键。如果一个关键帧已经存在于 key-time,老的关键帧位置时间 keyindex.time/将被用来替换,这对于在一个曲线编辑器中拖动关键帧是一个理想的行为,移动它后返回

36、关键帧的索引。 function RemoveKey (index : int) : void描述:移除一个键 function SmoothTangents (index : int, weight : float) : void描述:平滑位于 index 处的关键帧的进出切线。权值为 0 时平均切线。类方法 static function EaseInOut (timeStart : float, valueStart : float, timeEnd : float, valueEnd : float) : AnimationCurve描述:一个渐进渐出的曲线,开始于 timeStart

37、,valueStart 并结束于 timeEnd, valueEnd. static function Linear (timeStart : float, valueStart : float, timeEnd : float, valueEnd : float) : AnimationCurve描述:一个直线,开始于 timeStart,valueStart 并结束于 timeEnd, valueEnd.AnimationEvent类AnimationEvent 类似于 SendMessage 让你调用一个脚本函数,这个脚本是动画播放的一部分。 变量 var animationState

38、: AnimationState 描述:引发这个事件的动画状态。当这个方法在动画事件回调之外被调用用时返回 null。 var date:string描述:存储在动画剪辑中的字符串数据并将被发送到动画事件。 var functionName : string描述:被调用的函数的名称这与调用 gameObject.SendMessage(animationEvent.functionName,animationEvent)相同; var messageOptions :SendMessageOptions描述:如果选项被设置为 SendMessageOptions.RequireReceiver

39、(缺省) ,当消息没有被任何组件接收时将打印一个错误消息。 var time:float描述:该事件被引发的时间。构造函数 static function AnimationEvent () : AnimationEvent描述:创建一个新的动画事件AnimationState类AnimationState 完全控制动画混合。在大多数情况下 Animation 接口就足够了,并且更容易使用。如果你需要完全控制动画播放过程中的混合时,使用 AnimationState。当动画播放时,AnimationState 允许你修改速度,权值。时间和层。也可以设置动画合成和 wrapMode动画变量 va

40、r blendMode : AnimationBlendMode描述:使用哪个混合模式?/ 设置 leanLeft 动画为附加混合animation“leanLeft“.blendMode = AnimationBlendMode.Additive; var clip :AnimationClip 描述:该动画状态播放的剪辑。/ 打印动画剪辑的帧频到控制台print(animation“walk”clio.frameRate ) ; var enabled : bool描述:启用/禁用动画对于需要考虑任何影响的动画,权值需要设置成为一个大于零的值。如果动画被禁用,时间将暂停直到动画再次启用。/

41、 启用 walk 循环animation“Walk“.enabled = true;animation“Walk“.weight = 1.0; var layer : int描述:动画的层。在计算混合权值时,位于较高层的动画将首先获得它们的权值。只有较高层的动画没有使用完全全部权值时,较低层的动画才能接收混合权值。/ 放置 walk 和 run 动画在层 1animation“Walk“.layer = 1;animation“Run“.layer = 1; var length : float描述:动画剪辑的长度,以秒计。/ 打印 Walk 动画的长度print (animation“Wal

42、k“.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“.normaliz

43、edTime = 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描述:动画的权值/ 设置 w

44、alk 动画的混合权值为 0.5animation“Walk“.weight = 0.5; var wrapMode : WrapMode描述:动画的回绕模式默认的 wrapMode 被初始化为在 Animation 组件中设置的回绕模式值。/ 设置 walk 动画回绕模式为循环animation“Walk“.wrapMode = WrapMode.Loop;函数 function AddMixingTransform (mix : Transform, recursive : bool = true) : void描述:添加应该被动画的变换。这允许你缩减需要创建的动画数量。例如你可能有一个挥

45、手的动画。你可能想在一个空闲角色或行走的角色上播放挥手动画。那么你需要为空闲和行走分别创建挥手动画。运用合成挥手动画,它将由肩膀完全控制。但是下半身不会受它的影响,继续播放空闲或行走动画。因此你只需要一个挥手动画。如果 recursive 为真,所有 mix 变换的子也都将被动画。如果你不调用 AddMixingTransform,所有动画曲线将被使用。/ 使用路径添加混合var shoulder : Transform;animation“wave_hand“.AddMixingTransform(shoulder);function Start ()/使用路径添加混合变换var mixTr

46、ansform = transform.Find(“root/upper_body/left_shoulder“);animation“wave_hand“.AddMixingTransform(mixTransform);Application类访问应用程序的运行时数据。这个类包含静态的方法来查找相关的信息并控制运行时数据。类变量 static var absoluteURL : string描述:到 web 播放器数据文件夹的绝对路径(只读) 。Application.absoluteURL 和 Application.srcValue 允许你检测 unityWeb 数据文件是否被移动或链

47、接接到其他位置。你也许想保护这两者来防止盗用数据文件的行为。 / 检测你的数据文件是否被移动到其他的服务器/ 或是被链接到其他地方function Start ()var isPirated = false;if (Application.platform = RuntimePlatform.WindowsWebPlayer |Application.platform = RuntimePlatform.OSXWebPlayer)if (Application.srcValue != “game.unity3d“)isPirated = true;if (String.Compare (App

48、lication.absoluteURL,http:/ = true;if (isPirated)print(“Pirated web player“); static var dataPath : string描述:包含游戏数据文件夹的路径(只读) 。这个值依赖于运行的平台:Unity 编辑器: /AssetsMac 播放器: /ContentsWin 播放器: DataDasboard 窗口: Web 播放器: 到播放器数据文件夹的绝对路径(没有实际的数据文件名称)/ 打印到数据文件夹的路径Print(Application.dataPath) ; static var isEditor

49、: 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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报