Unity3D脚本中文教程.doc
《Unity3D脚本中文教程.doc》由会员分享,可在线阅读,更多相关《Unity3D脚本中文教程.doc(15页珍藏版)》请在咨信网上搜索。
1、Unity3D脚本中文教程Part1 一、 脚本概览 这是一个关于Unity内部脚本如何工作的简单概览。 Unity内部的脚本是通过附加自定义脚本对象到游戏物体组成的。在脚本对象内部不同志的函数被特定的事件调用。最常用的列在下面 Update 这个函数在渲染一帧之前被调用这里是大部分游戏行为代码被执行的地方除了物理代码。 FixedUpdate 这个函数在每个物理时间步被调用一次这是处理基于物理游戏的地方。 在任何函数之外的代码 在任何函数之外的代码在物体被加载的时候运行这个可以用来初始化脚本状态。 注意文档的这个部份假设你是用Javascript参考用C编写获取如何使用C和Boo编写脚本的信
2、息。 你也能定义事件句柄它们的名称都以On开始例如OnCollisionEnter为了查看完整的预定义事件的列表参考MonoBehaviour 文档。 概览常用操作 大多数游戏物体的操作是通过游戏物体的Transform或Rigidbody来做的在行为脚本内部它们可以分别通过transform和rigidbody访问因此如果你想绕着Y轴每帧旋转5度你可以如下写 function Update transform.Rotate050 如果你想向前移动一个物体你应该如下写 function Update transform.Translate002 概览跟踪时间 Time类包含了一个非常重要的类变
3、量称为deltaTime这个变量包含从上一次调用Update或FixedUpdate根据你是在Update函数还是在FixedUpdate函数中到现在的时间量。 所以对于上面的例子修改它使这个物体以一个恒定的速度旋转而不依赖于帧率 function Update transform.Rotate05Time.deltaTime0 移动物体 function Update transform. Translate 0 02Time.deltaTime 如果你加或是减一个每帧改变的值你应该将它与Time.deltaTime相乘。当你乘以Time.deltaTime时你实际的表达我想以10米/秒移动
4、这个物体不是10米/帧。这不仅仅是因为你的游戏将独立于帧而运行同时也是因为运动的单位容易理解。 米/秒 另一个例子如果你想随着时间增加光照的范围。下面的表达式以2单位/秒改变半 径。 function Update light.range 2.0 Time.deltaTime 当通过力处理刚体的时候你通常不必用Time.deltaTime因为引擎已经为你考虑到了这一点。 概览访问其他组件 组件被附加到游戏物体附加Renderer到游戏物体使它在场景中渲染附加一个Camera使它变为相机物体所有的脚本都是组件因为它们能被附加到游戏物体。 最常用的组件可以作为简单成员变量访问 Component
5、可如下访问 Transform transform Rigidbody rigidbody Renderer renderer Camera camera only on camera objects Light light only on light objects Animation animation Collider collider 等等。 对于完整的预定义成员变量的列表。查看ComponentBehaviour和MonnoBehaviour类文档。如果游戏物体没有你想取的相同类型的组件上面的变量将被设置为null。 任何附加到一个游戏物体的组件或脚本都可以通过GetComponen
6、t访问。 transform.Translate030 /等同于 GetComponentTransform.Translate0 1 0 注意transfom和Transform之间大小写的区别前者是变量小写后者是类或脚本名称大写。大小写不同使你能够从类和脚本名中区分变量。 应用我们所学你可以使用GetComponent找到任何附加在同一游戏物体上的脚本和组件请注意要使用下面的例子能够工作你需要有一个名为OtherScript的脚本其中包含一个DoSomething函数。OtherScript脚本必须与下面的脚本附加到相同的物体上。 /这个在同一游戏物体桑找到名为OtherScript的脚本
7、 /并调用它上加的DoSomething function Update otherScript GetComponentOtherScript otherScript.DoSomething 概览访问其它游戏物体 大多数高级的代码不仅需要操作一个物体Unity脚本接口有各种方法来找到并访问其他游戏物体和组件。在下面我们假定有个一名为OtherScriptjs的脚本附加到场景的游戏物体上。 var foo 5 function DoSomething param : String printparam quot with foo: quot foo 1.通过检视面板赋值引用 你可以通过检视面板
8、赋值变量到任何物体 /变换拖动到target的物体 var target : Transform function Update target.Translate0 1 0 你也可以在检视面板中公开到其他物体的引用下面你可以拖动一个包含的游戏物体到检视面板中的target槽。 /设置在检视面板中赋值的target变量上的foo调用DoSomething var target : OtherScript function Update /设置target物体的foo变量 target.foo 2 / 调用target上的DoSomething target.DoSomethingquotHell
9、oquot 2.通过物体层次定位 对于一个已经存在的物体可以通过游戏物体的Transform组件来找到子和父物体 /找到脚本所附加的 /游戏物体的子Hand transform.FindquotHandquot.Translate0 1 0 一旦在层次视图中找到这个变换你可以使用GetComponent来获取其他脚本 /找到名为Hand的子 /在附加到它上面的OtherScript中设置foo为2 transform.FindquotHandquot.Translate0 1 0 /找到名为Hand的子 /然后应用一个力到附加在hand上的刚体 transform.FindquotHandqu
10、ot.GetComponentOtherScript.DoSomethingquotHelloquot / 找到名为Hand的了 / 然后应用一个力到附加在hand上的刚体 transform.FindquotHandquot.rigidbody.AddForce0 10 0 你可以循环所有的子 /变换的所有子向上移动10个单位 for var child : Transform in transform child.Translate0 1 0 参考Transform类文档获取更多信息。 Part 2 3.根据名称或标签定位. 你可以使用GameObject.FindWithTag和Game
11、Object.FindGameObjectsWithTag搜索具有特定标签的游戏物体使用GameObject.Find根据名称查找物体。 function Start / 按照名称 var go GameObject.FindquotSomeGuyquot go.transform.Translate0 1 0 / 按照标签 var player GameObject.FindWithTagquotPlayerquot player.transform.Translate0 1 0 你可以在结果上使用GetComponent在找到的游戏物体上得到任何脚本或组件。 function Start
12、/ 按名称 var go GameObject.FindquotSomeGuyquot go.GetComponentOtherScript.DoSomething / 按标签 var player GameObject.FindWithTagquotPlayerquot player.GetComponentOtherScript.DoSomething 一些特殊的物体有快捷方式如主相机使用Camera.main。 4.作为参数传递 一些事件消息在事件包含详细信息。例如触发器事件传递碰撞物体的Collider组件到处理函数。 OnTriggerStay给我们一个到碰撞器的引用。从这个碰撞器我
13、们可以获取附加到其上的刚体。 function OnTriggerStay other : Collider / 如果另一个碰撞器也有一个刚体 / 应用一个力到它上面 if other.rigidbody other.rigidbody.AddForce0 2 0 或者我们可以通过碰撞器获取附加在同一个物体上的任何组件。 function OnTriggerStay other : Collider / 如果另一个碰撞器附加了OtherScript / 调用它上面的DoSomething / 大多数时候碰撞器不会附加脚本 / 所以我们需要首先检查以避免null引用异常 if other.Get
14、ComponentOtherScript other.GetComponentOtherScript.DoSomething 注意通过上述例子中的other变量你可以访问碰撞物体中的任何组件。 5.一种类型的所有脚本 使用Object.FindObjectsOfType找到所有具有相同类或脚本名称的物体或者使用Object.FindObjectOfType.找到这个类型的第一个物体。 function Start / 找到场景中附加了OtherScript的任意一个游戏物体 var other : OtherScript FindObjectOfTypeOtherScript other.Do
15、Something 概览向量 Unity使用Vector3类同一表示全体3D向量3D向量的不同组件可以通过想xy和z成员变量访问。 var aPosition : Vector3 aPosition.x 1 aPosition.y 1 aPosition.z 1 你也能够使用Vector3构造函数来同时初始化所有组件。 var aPosition Vector31 1 1 Vector3也定义了一些常用的变量值。 var direction Vector3.up / 与 Vector30 1 0相同 单个向量上的操作可以使用下面的方式访问 someVector.Normalize 使用多个向量
16、的操作可以使用Vector3类的数 theDistance Vector3.DistanceoneVector otherVector 注意你必须在函数名之前写Vector3来告诉JavaScript在哪里找到这个函数这适用于所有类函数 你也可以使用普通数学操作来操纵向量。 combined vector1 vector2 查看Vector3类文档获取完整操纵和可用属性的列表。 概览成员变量 amp 全局变量变量 定义在任何函数之外的变量是一个成员变量。在Unity中这个变量可以通过检视面板来访问任何保存在成员变量中的值也可以自动随工程保存。 var memberVariable 0.0 上面
17、的变量将在检视面板中显示为名为quotMember Variablequot的数值属性。 如果你设置变量的类型为一个组件类型例如Transform Rigidbody Collider任何脚本名称等等然后你可以在检视面板中通过拖动一个游戏物体来设置它们。 var enemy : Transform function Update if Vector3.Distance enemy.position transform.position lt 10 printquotI sense the enemy is nearquot 你也可以创建私有成员变量。私有成员变量可以用来存储那些在该脚本之外不可
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Unity3D 脚本 中文 教程
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【a199****6536】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【a199****6536】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。