Unity高级项目实战06全方位滚动射击游戏试卷.ppt

Unity高级项目实战06全方位滚动射击游戏试卷.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
现在玩家飞机前方有两架敌机,实例ID(以下简称为ID)分别力10和11。 (1)玩家飞机一边发射索敌激光,一边稍微向左旋转,这时ID = 10的敌机进入激光的轨迹内,因此从锁定列表中查询ID = 10的敌机,在锁定列表中没有ID = 10的记录,意味着该敌机未被锁定过,于是就锁定该机,并将ID = 10记录到锁定列表中。 (2)玩家飞机在ID = 10的敌机被锁定的了位置继续左转,锁定ID = 11的敌机后也把ID = 11记录到锁定列表中。 (3)锁定ID = 11的敌机后,玩家屹机在该处停下,开始向右转,索敌激光在碰撞检测的过程中将再次命中ID = 11的敌机。但是因为锁定列表中已经存在了ID=11的记录,所以不会再次对其执行锁定处理。这是避免对同一对象进行多次锁定的机制中最关键的地方。 (4)玩家飞机向锁定的敌机发射制导激光。制导激光击中ID=10的敌机后,从锁定列表中删除ID=10的记录。如果忘记删除,就可能会造成锁定列表的存储空间不足而无法锁定敌机。因此在击毁敌机后一定要将相应记录从锁定列表中删除。 了解了锁定列表的工作流程后,让我们看看实际的代码。 4.3锁定的管理 ScoutingLaser.Lockon方法在ScoutingLaserMeshController的OnTriggerEnter中被调用。collider参数也是通过OnTriggerEnter直接传人。 (a)首先判断和索敌激光的碰撞区域(触发器)发生碰撞的对象是否为敌机。如果是敌机,则取得该对象的实例ID。 (b)接下来加上已锁定的敌机数量。如果锁定列表中已经含有指定的实例ID,也就是说敌机对象已经被锁定过,IncreaseLockonCount方法将返回false。当锁定数量达到了允许的最大值时 ,也进行同样的处理。如果函数返回true,则意味着该敌机对象未被锁定过,处理将继续进了。 (c)在锁定列表中,取得记录新锁定的敌机的位置,(锁定编号)。如果锁定列表中已没有空位,getLockonNumber方法将返回 -1。为已经通过IncreaseLockonCount函数检查过允许锁定的址大数量,所以此时锁定列表中一定存在空位,不过为了增强代码的健壮性,我们依然将该错误检查添加到代码中。 4.3锁定的管理 4.4小结 现在读者应该能够理解实例ID的用处了吧。“噬星者”中为了管理锁定的敌机,使用了“记录处理过的对象”这一实例ID的典型用法。在“需要对大量同类型的对象进行区分”的情况下,往往都可以使用实例D来解决问题。 5制导激光 5.1关联文件 LockonLaserMotion.cs 5.2概要 “噬星者”中,敌机一且被锁定就无法逃脱,一定会被制导激光击中这是一种非常优秀的攻击武器。如果从武器的性能来考虑,最好使激光朝着敌机直线匕去,不过考虑到游戏的画面表现效果,我们使其沿着曲线向敌机飞去。 下面我们对这种兼顾性能和视觉效果的制导激光的制作方法进行说明。 5.3根据TrailRenderer生成网格 首先我们来对显示制导激光需要用到的TrailRenderer组件进行讲解。 制导激光像彗星一样拖着长长的尾巴显示在画面上。虽然看起来好像有细长的网格,但事实上激光前端的对象并没有使用用于显示的MeshRenderer。使用了TrailRenderer的对象在移动时,会像图6.12那样沿着运动轨迹自动生成细长的网格。当然它也支持贴图。 图(1)是使用了TrailRenderer的 制导激光在游戏中的画面表现, (2)是将其用线框图显示的结果。可 以看到,沿着制导激光的轨迹生成 了很多细长的网格。 5.3根据TrailRenderer生成网格 5.4制导激光的移动 根据上文可知,如果使用了TrailRenderer,轨迹的绘制就会变得比较容易。在位于头部的对象动起来后,TrailRendere:就会沿着其移动的路径绘制出长长的激光轨迹。 那么现在我们来考虑在每帧的Update方法中该如何更新对象的移动方向。由于制导激光朝着敌机飞去,因此首先需要把握好玩家和敌机的位置关系。 在图中,位于箭头顶端的I`1色圆圈表示游戏对象。可以把箭头看作是TrailRenderer描绘的轨 迹从发射的那一瞬间开始,制导 激光一直朝着上方沿着直线前进。 由于TrailRenderer的作用,激光 将不断地往下延伸。敌机位于激光前进方向左侧90度的位置。如果此时将激光的前进方向左转90度,它将朝着敌机飞去。 游戏中的制导激光是沿着曲线轨迹向敌机飞去的:但是如果每一帧更新时都将其角度改变为朝向敌机的话.就 会出现图(1)那样的直线运动的情 况:为了解决这个问题,我们需要 对征次改变方向时转动的角度添 加一个最大值限制。具体来说, 就是先计算出

文档评论(0)

502992 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档