网龙暑期训练营第三周:标准资源包的应用与岗哨、打靶任务的开发

第三阶段的任务比较复杂,涉及到了Unity各方面的知识,叶老师也对Unity的各个重要部分进行了详细讲解。本文主要针对视频中提到的各项技术进行总结,并梳理岗哨和打靶案例的开发流程。便于各位复习与参照。

整体内容如下

1.基础知识

    1.1 准备工作

    1.2 地形设计

    1.3 角色控制器

    1.4 碰撞检测

    1.5 协程

2.岗哨人物开发

3.打靶任务开发

接下来对各部分进行总结。

1.基础知识

1.1 准备工作

导入UnityStandardAssetsSetup和book_asset资源包。其中UnityStandardAssetsSetup包含第一/第三人称控制器、环境要素等,使用各自版本自带的标准资源包即可,book_asset包含荒岛求生的所有资源,提供岗哨、打靶等功能各项资源。

1.2 地形设计

地形设计(Terrain)主要功能为下图

Raise/Low Height:按住左键提升,shift+左键降低

Paint Hejght: 按住shift保存某一点高度,在另一个区域按住左键即可将对应地形更改为保存的高度

Smooth Height: 用于边缘的平滑操作

Paint Texture: 用于绘制贴图,例如将草地贴图导入,以更改地面的贴图效果

Place Tree: 批量种树

Paint Detail: 与Paint Texture类似,案例中用来批量种草

Setting:地形编辑的一些设置选项

更多详细的功能可以参照:https://www.jianshu.com/p/dbc2de5e3009 了解了这些功能,就可以制作出一个小岛的demo了。

1.3 角色控制器

角色控制器负责控制人物的行动,由标准资源包自带,导入即可。控制器下挂载的FirstPersonController脚本控制具体的行为,代码是由Unity官方提供的,十分简练,值得深入学习。

对FirstPersonController的详细解析可以参照:https://blog.csdn.net/q764424567/article/details/78501613 

1.4 碰撞检测

三种碰撞检测的方法

  • 碰撞检测(两者collider是否交互)
  • 触发碰撞检测(别的对象是否进入自己的collider范围)
  • 射线追踪(发射射线检测发生碰撞的对象)

其中前两种在第一阶段的课程中有提到,可以参照一阶段视频。

重点说明下射线追踪,适用于即时反馈的物体,例如通过点击地面控制人物朝向与行走,或是高速运动的子弹物体。都可以运用射线检测功能。

射线检测的基础知识可以参照:https://blog.csdn.net/gary_888/article/details/51439401

进阶内容:https://www.jianshu.com/p/d6d3d7bf5151

1.5 协程

协程是游戏开发中一个重要的工具,它在不影响程序正常运行的同时开启一个协同程序。协程有点像线程,但却不是线程.因为协程仍然是在主线程中执行,且在使用时不用考虑同步与锁的问题,协程只是控制代码等到特定的时机后再执行后续步骤。

协程的应用很广泛,在这次的岗哨案例中,就通过开启协程控制岗哨大门的延迟关闭。叶老师的视频中讲解了协程了各种使用方法,建议详细学习。

协程的具体介绍可以参照:http://dsqiu.iteye.com/blog/2029701

2.岗哨任务

岗哨任务是三阶段第一个作业,具体的代码参照视频,这里给出基本的脚本分析和逻辑。

岗哨任务由3个主要的脚本实现

  • PowerCell(监听电池是否与角色碰撞并传递信息给Inventory,挂载在电池上)
  • DoorCollision(监听岗哨大门的碰撞信息并触发相应动画或提示,挂载在岗哨的门上)
  • Inventory(监听收集到的电池数量信息并触发对应事件,挂载在主角上)

逻辑如下:

1.PowerCell是挂载在电池下的脚本,当主角碰撞到电池时,触发Trigger事件,将Inventory中的电池计数+1。

2.Inventory脚本通过电池技术更新发电机电量、岗哨灯光以及UI界面的电池信息。

3.当主角与门发生碰撞时,获取Inventory中的电池计数,若满足,触发开门效果。否则显示提示信息。

3.打靶任务

打靶任务较岗哨任务稍难,脚本信息如下

  • CoconutThrower(控制椰子的发射,在第一人称下新建一个子物体,并挂载在子物体上)
  • ThrowTrigger(控制CoconutThrower中的发射标志位,挂载在靶房的地毯“mat”上)
  • TargetCollision(判断标靶是否与椰子发生碰撞并做出对应动作,挂载在标靶子物体的“target”上)
  • CoconutWin(监听被击倒的椰子数,若满足条件,则创建一个电池,挂载在靶房上)

逻辑如下:

1.当靶房的地毯mat检测到主角发生的碰撞时,将CoconutThrower中的标志位置为true,此时点击鼠标右键即可执行发射。

2.当标靶检测到椰子的碰撞时,触发“down”的动画,将CoconutWin中被击倒的椰子数+1,同时开启协程计时,3秒后标靶执行“up”动画。

3.若被击倒的标靶数大于3个,将靶房中原有的电池物体删除,并创建一个新的电池。

猜你喜欢

转载自blog.csdn.net/s1314_JHC/article/details/81631718
今日推荐