全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Unity 是一个以 Mono 为基础的游戏开发环境,能同时支持三种脚本语言,包括 C#、Javascript 和Boo (类似 Python)。由于Unity 的开发工具暂时只有 Mac 的版本,所以暂时未能测试。但是它有很详细的文档,看上来很易用,所以就从文字上学习它的Script 使用方式。根据一些Tutorial 及参考手册,我用 Graphviz 画了一个 (我认为) 最核心的 UML 类别图:从这个类别图我们可以理解它的结构,及如何把一些常用功能映射至这系统里,以下分节讨论。-来自狗刨学习网GameObject 和 Component Unity 的执行环境里,会有一个场境 (Scene)。这个场境包含一个 GameObject 物件的层阶(Hierarchy)。这个 GameObject 类别只是一个包容器,本身没有其他功能。使用者需要为 GameObject 加入各种Component 物件来定义它的行为,而不是透过继承 (inherit) GameObject 来加入 行为。一个物件可拥有多个Component 物件,但有一些Component 类别只可以在一个 GameObject 中有一个实体(instance)。MonoBehavior 我最感兴趣的,是使用者如何自行定义行为来做出不同的 Gameplay。在Unity 中,程式员编写的Script,其实也是Component 的一种,所有的Script 都会继承自 MonoBehavior 类别。以下是一个简单例子:var speed = 5.0;function Update () var x = Input.GetAxis(Horizontal) * Time.deltaTime * speed;var z = Input.GetAxis(Vertical) * Time.deltaTime * speed;transform.Translate(x, 0, z); 把这个Script 加进一个 GameObject 的话 (成为该 GameObject 的一个Component),Runtime 会在每帧呼叫 Update(),玩家就可以用上下左右键控制那个 GameObject 在水平方向移动。Transform每个能在三维空间里的 GameObject 都会有 Transform Component (未有详细看是否有一些GameObject 可以省郄 Transform,例如一个用来定义一个游戏任务的 GameObject)。Transform 包括位置、旋转及缩放。之前的例子已用了 transform component,不过它其实是 Object 类别的一个 shortcut(快捷办法),这 shortcut(快捷办法)其实等同:GetComponent(Transform).Translate(x, 0, z)Component 的连结在Script Tutorial 里的例子是写一个 Follow 的行为,拥有这个Component 的 GameObject 会自动追踪 (面对着) 一个目标物件:var target : Transform;function Update () transform.LookAt(target); 这个Script 暴露了一个 target 变数 (应当作成员变数吧),使用者可以把其他物件的变数 assign 至这个变数。这 assignment(任务) 有两种方法实现,其一是利用Unity 的 GUI 工具把一个Component 实体的变数 (如Transform) drag-and-drop 至这个Component 实体的 target 变数,而另一个方法是写代码:var newTarget = GameObject.Find(Cube).transform;GetComponent(Follow).target = newTarget; 用代码就可以这样动态改变这些Component 之间的联结方式。或者另一个说法是,GUI 工具是可以设定起始的联结,而Script 可以在执行期改变这些联结。渲染一个可被渲染的 GameObject 需要有以几个 Components,以 Mesh 为例:1. MeshFilter: 用来找出现时的 Mesh 物件2. MeshRenderer: 用来渲染 Mesh 的 Component,会参考一个 material 物件要注要 Mesh 和 Material 物件并非 Component,它们是继承自 Object 的。但是你仍然可以去动态改变它们。但由于它们不是Component ,所以可以被分享,例如多个 GameObject 的 MeshRenderer都参考到同一个 Material。一个Component 实体只属于一个 GameObject (所以在 UML 中我用黑色钻石表示 Composition)。而 Light 和 Camera 则是 Component,这意未着可以简单的设定联结。分析 Unity 的Script 物件模型是以Component 为基础的。透过把Component 实体加入 GameObject 实体来组合不同功能的物件,而Component 实体之间可以建立联结。这种方式不需要透过继承 (inheritance),而是透过聚合 (aggregation)加入物件的功能和行为。使用聚合的好处是不会产生复杂的继承层阶,亦可以动态改变聚合的结构 (例如在执行期加入或移除Component)。有一些细节我暂时未清楚,例如多个Component 在一个 GameObject 中的执行次序如何设定;联结会否有 cylic(环)的问题等等。可能要拿到软件再试用才可以知道。结语 Unity 的脚本系统给我的感觉是使用非常简单。透过很少的代码就能写一些行为,甚至把行为组合到物件中。但是,通常容易的东西都会有相对的缺点,例如在效能上或是 Scalability(扩展性)上。后者可能是一个很大的问题,当游戏规模扩大,Component 和联结就会变成一个很复杂的 graph(图表),由于连结是发生于执行期(而非静态),可能要作改动会变得困难。换句话说,就是改几十个类别容易,改它们的几千个实体就会很困难。软件设计世界里当然没有银子弹,每个方案都适合不同的情况。我认为Unity 的一个设计目标是容易使用,就
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 甘肃省兰州市一中2025-2026学年高二上生物期末统考试题含解析
- 放射科CT扫描对比剂注射操作技巧
- 2025年河北省遵化市生物高二第一学期期末质量检测试题含解析
- 睡眠障碍治疗方案探讨
- 新疆轻工职业技术学院《食品质量检验技能训练》2024-2025学年第一学期期末试卷
- 房产活动后评估
- 急诊科急性脑卒中溶栓治疗培训教程
- 结核病治疗护理细则大纲
- 麻醉科全麻术后镇痛规范
- H1N1流感流行期防治措施
- TCI 368-2024 供电服务客服调度管理规范
- HG∕T 2454-2014 溶剂型聚氨酯涂料(双组份)
- 2023-2024学年全国小学六年级上英语人教版期中试卷(含答案解析)
- 解读心肺复苏专家共识课件
- 译林版二年级上册英语期中卷(含听力材料)
- 玉米脱粒机项目计划方案
- DZ∕T 0283-2015 地面沉降调查与监测规范(正式版)
- 明清古家具鉴赏 知到智慧树网课答案
- 大学生职业规划大赛成长赛道参赛作品
- 快递物流反恐怖防范规范
- 《水浒传》中的角色形象塑造与人物形象分析
评论
0/150
提交评论