- 1、本文档共15页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
(Unity讲义ch6
6 实例化与刚体
在这章中,我们将探讨三维游戏设计中的两个基本概念。首先,我们研究“实例化”的概念,利用它可以实现在运行时建立物体;然后通过实现一个“实例化”的实例来学习刚体的物理特性。
当在我们制作游戏场景之初,一般我们不会将所有的物体全部展现在场景中。利用一些拼图类游戏中,不可能将全部小物体全部放到场景中,那将占用大量的资源,屏幕也摆放不下。
本章将在我们的小岛上实现实例,利用刚体的物理特性,实现简单的“投椰子”游戏。其中椰子在游戏开始时并不存在,这时将用到“实例化”。通过指定一个资源(如预制件)的位置和方向,可以创建一个游戏对象,通过这个功能我们可以在玩家按键时来创建椰子。
为了将这个小游戏与前面的开门整合在一起,我们删除一个开门用的电池,打玩家通过打椰子游戏后将会得到一个电池。本书素材中已经提供了一个打椰子用的平台模型,我们将自己建立椰子预制件,并编写代码控制目标靶被打中的效果。目标靶素材已经提供了“翻倒”和“复位”两个动画,我们将编写代码实现在目标靶被打中一定时间后自动复位的功能。这就要求玩家要玩赢得游戏必须在指定时间内同时打倒三个目标靶才行,这加大了游戏的难度,要求玩家掌握一定的投掷技巧,使游戏具有更好的可玩性。
在本章中,具体将实现以下内容:
? 准备用于实例化的预制件
? 使用命令来完成实现化
? 检测玩家按键状态
? 给刚体添加物理性能
? 给玩家提供反馈
6.1 实例化介绍
在这节中,我们将学习在如何在程序运行时大量制作和复制物体,许多游戏中利用这个原理可以制作发射物体、可收集物体,甚至用于生成角色和敌人等。
6.1.1 设计原理
实例化是利用一个模板(如预制件)在游戏运行时大量制作物体的简单方法,它也可用于复制场景中已经存在的物体。
实例化方法通常包含以下几步:
? 建立要在场景中实例化的物体对象,为其添加必要的组件属性。
? 为这个物体建立一个预制件,将这个物体拖放到这个预制件上。
? 删除原来的物体,只保预制件资源。
? 编写脚本使用Instantiate() 命令引用制作的预制件完成实例化,将脚本附加到一个场景物体上。
6.1.2 脚本实现
实例化脚本中的主要命令是Instantiate(),它有三个参数,具体其格式如下:
Instantiate(要建立的物体, 建立物体的位置,建立物体的方向);
仔细理解三个参数的作用是使用该命令的关键。
1、传递物体
为了传递一个物体参数,可以使用公共成员变量作为Instantiate()函数的第一个参数。
在顶部代码中建立一个GameObject类型的公共成员变量,可以在Inspector窗口中拖放一个预制件到该变量作为实参。变量定义及引用如下:
var myPrefab : GameObject;
Instantiate(myPrefab, position to create it, rotation to give it);
我们也可以限制只允许拖放指定的类型的预制件到myPrefab变量,例如可以写:
var myPrefab : Rigidbody;
Instantiate(myPrefab, position to create it, rotation to give it);
这将限制只有具有Rigidbody组件属性的预制件可以被引用。
2、位置和方向
被建立的物体的位置和方向要求指定们一个Vector3向量值,例如:
Instantiate(myPrefab, Vector3(0, 12, 30), Vector3(0, 0, 90));
它们也可以从其它物体继承位置和方向的值,当指定要实例化的物体的位置时,首先要确定物体是建立在局部空间还是世界空间。例如,当建立椰子预制件时,我们将它建立在世界空间的一个点上,该点由一个空的游戏对象来定义。这个空对象是玩家对象的一个子物体。这样,椰子建立在局部空间上,由于玩家位置的移动,所以每次建立的位置可能不同。
这咱方案要求我们将脚本附加到上面的空物体上,建立的位置由这个空物体而定,可以用点语法来取得,transform.position 作为Instantiate()命令的参数。这样椰子取得空物体的位置,方向的取得同上。
代码实现如下:
var myPrefab : GameObject;
Instantiate(myPrefab, transform.position, transform.rotation);
后面我们将实现这个程序,但首先要学习下刚体的物体属性及它在游戏中的重要性。
6.2 刚体介绍
物理引擎为游戏程序提供了真实环境仿真的方法,几乎所有游戏中都提供了内置或插件形式的物理引擎。Unity使用Nvidia PhysX物理引擎,它在目前游戏产业中比较流行。应用物
文档评论(0)