Unity VR大师课程 | 制作你的第一款VR塔防游戏

2016年02月29日 13:46 0 点赞 0 评论 更新于 2025-11-21 13:34

新年伊始,我们的第一场活动在羊城广州举办了精品课程——VR大师课程。来自Unity总部的大师Carl和Unity官方工程师为现场学员答疑解惑并提供技术支持,带领大家在一天时间内完成了一款VR塔防游戏。现在,让我们一起回顾Carl的此次课程,动手实现你的第一款VR塔防游戏。

课程准备

本次课程要实现一款可在Gear VR上运行的塔防游戏。玩家通过头部旋转控制场景内摄像机旋转,点击Gear上的按键实现炮台射击。

我们需要提前做好以下准备:

  1. Unity版本:Unity 5.2或更高版本。
  2. 工程资源:下载工程资源(点击阅读原文获取下载链接)。
  3. 知识储备:对Unity Editor的界面功能及使用有初步理解。
  4. 测试设备:拥有一台Gear VR或Oculus设备,用于测试游戏是否正常运行。

现在,让我们开始吧!

搭建场景

导入资源

  1. 打开Unity,创建一个新工程。将下载好的资源直接拖入Project视窗下的Assets文件夹。

添加模型

  1. 点击搜索标签,选择model,将其中的Environment模型直接拖入到Hierarchy面板。此时,该模型的实例将出现在场景的原点处。 注意:如果直接将模型拖入Scene,其位置不容易掌控。

添加组件

  1. 为Environment中的子物体Plane.001添加MeshRender组件。

场景烘焙

  1. 将Inspector下Environment旁的Static勾选,在菜单栏的Window下打开Lighting面板,取消Auto选项(防止每次移动物体后自动Bake),随后点击Build按钮对场景进行烘焙。 注意:若希望快速烘焙,可以关闭Baked GI,同时将Precomputed Realtime GI分辨率调低。有关GI的内容可查看:[https://unity3d.com/cn/learn/tut... hting-and-rendering](https://unity3d.com/cn/learn/tut... hting-and-rendering)

添加天空盒

  1. 将Assets中的WispySkyboxMobileMat拖入场景,完成天空盒的添加。

添加塔

  1. 同理,将Tower拖入场景中,放置于合适的位置。也可以通过调节Inspector下的Position实现,并为Tower添加合适大小的Box Collider。

至此,场景的搭建已初步完成。

设置敌人

编辑寻路

  1. 在菜单栏Window下,打开Navigation窗口,用于编辑敌人的寻路。将Agent Radius数值调小,使敌人拥有更多移动路径,然后点击Bake进行烘焙。

添加组件与脚本

  1. 在Assets中找到模型Drone,将其拖入场景(靠近地面),为其添加NavMeshAgent组件,该组件可提供Bake地图范围并规划向目标点移动的功能。同时,添加EnemyNavigation脚本,添加后,将场景中的Tower拖至Inspector中EnemyNavigation脚本的Target属性。运行场景,敌人便会向Tower方向移动。

添加碰撞体与刚体

  1. 为Drone添加SphereCollider组件,调整碰撞体大小。创建新的Tag,命名为Enemy,将Drone的Tag更改为Enemy。同时为其添加Rigbody组件,取消Use Gravity选项,同时勾选Is Kinematic。

创建预设与生成点

  1. 将Drone拖入到Project中的Prefabs文件夹内,更名为DronePrefab,形成预设。完成后,删除场景中的Drone。创建空物体,将其命名为Point,并将其放置在你希望的敌人生成点。
  2. 为Point添加SpawnScript脚本,将DronePrefab和场景中的Tower分别拖入Enemy和Target属性。根据需求,修改生成敌人间隔Spawn Interval。
  3. 为场景中添加更多的生成点,可以通过点击Inspector下Point旁的正方形,在场景中添加醒目的标签。运行场景,敌人便会向Tower不断靠近。

Camera的设置

调整相机位置

  1. 点击场景中的Tower,在Hierarchy中添加一个空物体,将其命名为CameraPosition,将场景中的Camera作为CameraPosition的子物体,点击Camera中Transform下的Reset,此时Camera将与其父物体的位置相同。 注意
    • 在VR游戏中,Camera由设备控制,若要移动Camera,需为其添加一个父物体,通过移动父物体来移动Camera。
    • CameraPosition的位置必须在Tower的外部,否则射击时会出现问题。

相机旋转控制

  1. 在VR设备中,Camera会跟随设备旋转。而在Editor中,我们仍需通过脚本进行控制。将脚本CameraEditorControl拖到Camera上,该脚本通过#if UNITY_EDITOR,只在编辑器运行情况下调用。

添加全屏图像

  1. 向场景中添加Image,点击Inspector下的stretch,按Alt键选择扩充,将Image扩充至整个屏幕。

录制图像动画

  1. 选中Image,点击Ctrl + 6,为Image录制动画。在0:00时,将其颜色设为黑色,2:30时设为透明。
  2. 点击Project下的该动画,取消Loop Time选项。

Tower的攻击

设置瞄准点

  1. 在Canvas下继续添加一个Image,将其命名为Reticle(瞄准点)。将Assets中的Reticle图片拖至Source Image。把Canvas的Render Mode改为Screen Space - Camera,同时新建一个Camera命名为CameraUI,把其Clear Flags设为Depth only,Culling Mask设为UI,之后把CameraUI赋给Canvas的Render Camera。调整Reticle与Image在Hierarchy中的顺序,先渲染Reticle,后渲染Image。然后给Reticle添加脚本AdjustSize,同时把场景Camera赋值给Cam变量,Basic Dis与Farest Dis分别设为 - 210和400(可自行调节并设置为最佳效果值)。

添加音频组件

  1. 在Camera上添加AudioSource组件,同时将音频Rifle拖入到AudioClip。取消Play On Awake,防止场景开始时播放音频。

添加射击脚本

  1. 将Assets中的粒子Stone_BulletImpact拖入场景中,同时为Camera添加ShootScript脚本。将刚添加的Stone_BulletImpact赋予该脚本。运行场景,击中敌人后,敌人消失。

Tower的血量

添加碰撞体

  1. 为Tower添加BoxCollider组件,确保Camera不在BoxCollider组件内部。

刚体设置

  1. 将Rigidbody组件添加至DronePrefab,取消Use Gravity选项,同时勾选Is Kinematic(两物体间发生碰撞检测,移动物体需具有Rigidbody组件)。

添加脚本与音频

  1. 为Tower添加Tower Health脚本,以及AudioSource组件。将TankExplosion音频至于AudioClip中,取消Play On Awake。

血量显示设置

  1. 在Canvas下创建一个新的Image,按照前面黑色淡入Image的制作方式设为占满Canvas,并把Color设置为红色,alpha值设为0。给Tower添加Tower Health脚本,把Canvas下的Image赋值给Damage Image,然后拖入三个Drone到场景中,放置在Tower边上作为血量显示,同时把其中两个Drone分别赋值给脚本中的Drone Life 2和Drone Life 3变量。

退出与发布

添加退出脚本

  1. 将QuitApplicationScript脚本添加到Camera上,该脚本包含编辑器和GearVR的退出功能。

发布设置

  1. 打开菜单栏File中的Build Setting。针对Oculus,选择PC,将Player Setting下的Virtual Reality Supported选中即可进行发布。对于Gear VR,则选择Android,同样勾选Virtual Reality Supported。推荐选择Multithreaded Rendering和GPU Skinning,Unity在新版本中已对这几个选项进行了优化。

总结

至此,这个VR塔防游戏的开发操作过程已介绍完毕。大家可以点击原文下载工程资源,赶紧动手操作起来吧! (下载链接中的VRMasterDemo中包含两个文档:

  • “China VR”中的资源,可用于按照上述步骤进行开发。
  • “本文案例”中是完整的工程文件)

来源:Unity官方社区

作者信息

洞悉

洞悉

共发布了 3994 篇文章