OpenHarmony开发者论坛

标题: OpenHarmony-Unity游戏开发实例分享:“基于OpenHarmony—团结引擎的应用开发赛”获奖作品Road Rage介绍及源码 [打印本页]

作者: 深开鸿-孙炼    时间: 2024-6-21 11:17
标题: OpenHarmony-Unity游戏开发实例分享:“基于OpenHarmony—团结引擎的应用开发赛”获奖作品Road Rage介绍及源码
[md]# 前言

近期,OpenHarmony 社区举办了[*“基于OpenHarmony—团结引擎的应用开发赛”*](https://www.openharmony.cn/unityEngine/illustrate),东南大学的李光伟同学在深开鸿实习期间,由王石指导,以《Road Rage》作品参赛,获得高校游戏组二等奖。此次开发的游戏,也作为OpenHarmony游戏场景的测试应用,将代码开源提交到集成测试孵化仓[ *ostest_integration_test*](https://gitee.com/openharmony-si ... ter/scenario/MyGame)。

## 介绍

本示例主要模拟移动端 3D 游戏场景,使用 Unity 游戏引擎开发,是一个第三人称视角的驾驶类游戏。本示例应用使用到了 OpenHarmony 设备的触屏、加速度传感器、网络、声音以及震动等能力,以此测试设备的性能以及上述功能是否正常。

## 效果预览

* **场景变化**:

  ![image.png](https://forums-obs.openharmony.c ... zlnopn9n4pzlq9p.png "image.png")
* **体感操控**:

  ![image.png](https://forums-obs.openharmony.c ... 5blzd3dh6ehdmhx.png "image.png")
* **联机游戏**:

  ![image.png](https://forums-obs.openharmony.c ... 8sctjps2s2cse18.png "image.png")

## 工程目录

项目分为两个目录:[`UnityProject`](file:///D:/gitee/ostest_integration_test/ostest_integration_test/scenario/MyGame/UnityProject) 和 [`OHProject`](file:///D:/gitee/ostest_integration_test/ostest_integration_test/scenario/MyGame/OHProject)。

* `UnityProject`:Unity 项目目录,包含了游戏的所有资源、脚本等,用于开发游戏的逻辑和场景,具体目录结构如下:
  <pre class="code-fence" md-src-pos="1416..1838"><div class="code-fence-highlighter-copy-button" data-fence-content="Um9hZC1SYWdlL0Fzc2V0cy8KfC0tLUFuaW1hdGlvbnMgICAgICAjIOWKqOeUu++8iOmdouadv+WIh+aNouOAgemBk+WFt+aXi+i9rOOAgeeOqeWutui9pui+hui/kOWKqOetie+8iQp8LS0tQXVkaW9zICAgICAgICAgICMg6Z+z6aKR77yI6K+t6Z+z44CB6L2m6L6G5byV5pOO44CB56Kw5pKe44CB54K55Ye7562J77yJCnwtLS1NYXRlcmlhbHMgICAgICAgIyDmqKHlnovmnZDotKjvvIjovabovobjgIHpgZPot6/jgIHmma/op4LjgIHpgZPlhbfnrYnotKjvvIkKfC0tLU1vZGVscyAgICAgICAgICAjIOaooeWei+i1hOa6kO+8iOi9pui6q+OAgei9pui9ruOAgemBk+i3r+OAgeaZr+inguOAgemBk+WFt+etie+8iQp8LS0tUHJlZmFicyAgICAgICAgICMg6aKE5Yi25L2T77yI6L2m6L6G44CB6YGT6Lev44CB6YGT5YW3562J77yJCnwtLS1TY2VuZXMgICAgICAgICAgIyDmuLjmiI/lnLrmma/vvIjku4XmnInkuIDkuKrkuLvlnLrmma/vvIkKfC0tLVNjcmlwdHMgICAgICAgICAjIEMjIOiEmuacrO+8iOi9pui+huaOp+WItuOAgeWMuuWdl+WSjOi9pua1geeUn+aIkOOAgeWIhuaVsOiuoeeul+OAgeWtmOaho+ivu+aho+OAgVVJ5Lqk5LqS562J77yJCnwtLS1TcHJpdGVzICAgICAgICAgIyBVSSDlm77lvaLotYTmupAKXC0tLVRleHR1cmVzICAgICAgICAjIOe6ueeQhui1hOa6kO+8iOi9pui+huOAgemBk+i3r+OAgeWkqeepuuebkuetie+8iQ=="><img class="code-fence-highlighter-copy-button-icon"/></div><code class="language-text" md-src-pos="1416..1838"><span md-src-pos="1416..1424"></span><span md-src-pos="1424..1442">Road-Rage/Assets/</span>
  <span md-src-pos="1442..1486">|---Animations      # 动画(面板切换、道具旋转、玩家车辆运动等)</span>
  <span md-src-pos="1486..1527">|---Audios          # 音频(语音、车辆引擎、碰撞、点击等)</span>
  <span md-src-pos="1527..1569">|---Materials       # 模型材质(车辆、道路、景观、道具等质)</span>
  <span md-src-pos="1569..1613">|---Models          # 模型资源(车身、车轮、道路、景观、道具等)</span>
  <span md-src-pos="1613..1650">|---Prefabs         # 预制体(车辆、道路、道具等)</span>
  <span md-src-pos="1650..1686">|---Scenes          # 游戏场景(仅有一个主场景)</span>
  <span md-src-pos="1686..1744">|---Scripts         # C# 脚本(车辆控制、区块和车流生成、分数计算、存档读档、UI交互等)</span>
  <span md-src-pos="1744..1774">|---Sprites         # UI 图形资源</span>
  <span md-src-pos="1774..1813">\---Textures        # 纹理资源(车辆、道路、天空盒等)</span>
  <span md-src-pos="1813..1814"></span><span md-src-pos="1833..1838"></span></code></pre>
* `OHProject`:从 Unity Editor 中导出的 OpenHarmony 项目,用于构建、调试和运行游戏。

## 示例详细介绍

### 操控方式

游戏针对移动端设备提供了 *触屏* 和 *加速度传感器* 两种方式来控制车辆的运动。 在主菜单左下方的设置按钮中可以选择是否开启加速度传感器控制。

* **当关闭加速度传感器时**,车辆的左右移动是通过触摸屏幕左侧的方向按钮控制,加减速是通过触摸屏幕右侧的刹车、油门按钮控制;
* **当开启加速度传感器时**,玩家可以通过倾斜设备来控制车辆的左右移动,方向按钮将被隐藏,不再生效。 加减速的控制不变,仍通过触摸屏幕右侧的刹车、油门按钮控制。

  ![image.png](https://forums-obs.openharmony.c ... v7i897csri9njhn.png "image.png")

### 游戏模式

游戏分为 *单人模式* 和 *局域网联机的多人模式*。

* **在单人模式下**,游戏当前设计为两关,有车流量、玩家车辆速度和目标里程的区别;
* **在多人模式下**,游戏场景不变,只设有一关,目标里程数介于单人模式的两关之间。 但玩家的碰撞、拾取金币行为将会对对手造成影响。

  ![image.png](https://forums-obs.openharmony.c ... mi8iikii7iwff8l.png "image.png")

### 游戏玩法与创意

游戏启动后,进入游戏主界面,下方从左到右有以下按钮:`设置`、`车辆选择`、`多人游戏`(在发现其他玩家后出现)和 `单人游戏`。

* **设置界面**:可以调整是否开启游戏声音、设备震动和加速度传感器控制。

  ![image.png](https://forums-obs.openharmony.c ... i6cgz6dgtg2odv2.png "image.png")
* **车辆选择**:游戏提供了多辆车供玩家切换,除初始车辆外,需要通过金币解锁。

  ![image.png](https://forums-obs.openharmony.c ... 5sqxttyblsoqh48.png "image.png")
* **单人游戏**:点击后进入游戏场景,屏幕上方显示游戏已进行的时间,右侧为行驶进度、车损程度、当前金币数,左侧为已行驶的里程数。屏幕下方为车辆的控制按钮:左右方向按钮和油门、刹车按钮。

  ![image.png](https://forums-obs.openharmony.c ... nn5duunkvbb5557.png "image.png")
* 游戏开始,玩家所控制的车辆逐渐加速,道路上有行驶速度较慢的NPC车辆,与其发生碰撞后玩家车辆受损(右上方血条减少),当前行驶速度和最大速度会相应减少。

  当发生碰撞时,为玩家车辆添加了夸张的变形动画和多种语音提示,以增加游戏的趣味性。

  ![image.png](https://forums-obs.openharmony.c ... ggr9ruhhnaxd9wa.png "image.png")
* 当玩家拾取到金币时,玩家车辆可以恢复一定的血量。

  当碰撞次数达到一定值后(血条变为空),玩家车辆会发生爆炸,游戏结束。

  ![image.png](https://forums-obs.openharmony.c ... gnpgngnlb7rat60.png "image.png")
* 单人游戏分为两关,目标里程数不同,当玩家行驶到目标里程数且未发生爆炸时,游戏胜利,可以前往下一关。

  ![image.png](https://forums-obs.openharmony.c ... eoed5e5dfd7noe9.png "image.png")
* **多人游戏**:`多人游戏`按钮默认是隐藏的,在发现局域网内有其他玩家后显示。

  游戏在场景加载完成后,将会自动在局域网内寻找玩家,屏幕上方的状态信息显示 `正在寻找对手`;
  当发现其他玩家时将会显示 `已找到对手`,`多人游戏`按钮将会显示在主界面上 `单人游戏`按钮左侧。

  ![image.png](https://forums-obs.openharmony.c ... y3ydhi30xgc4136.png "image.png")
* 点击 `多人游戏`按钮后,已匹配到的对手将会同时开始游戏。

  ![image.png](https://forums-obs.openharmony.c ... gf09n049lzs9f9d.png "image.png")
* 基本玩法与单人游戏相同,玩家在各自的场景中进行游戏,但玩家的碰撞、拾取金币行为将会对对手造成影响。

  当玩家车辆碰撞,对手会收到提示,对手车辆得到加速增益;

  而当玩家拾取到金币时,恢复车辆血量,对手金币会相应减少,且对手车辆减速。

  ![image.png](https://forums-obs.openharmony.c ... b3kz2alm3z3mqqa.png "image.png")
* **语音提示**:游戏在行驶中、发生碰撞、拾取金币、车辆爆炸等情况下,均有不同的语音提示,比如“加速”、“冲刺”、“滚”、“怎么这么菜”等,增添游戏的诙谐感。
* **关卡设计**:游戏设计了两个关卡,在第一关中,玩家车辆行驶速度较慢,车流量有限,玩家可以较轻松地躲避其他车辆,拾取金币,给玩家提供了熟悉游戏操作、熟悉场景的机会; 而当玩家通过第一关,开始第二关的游戏时,车流量增大,车辆行驶速度加快,玩家将需要谨慎控制行驶速度,以避免碰撞。

  ![image.png](https://forums-obs.openharmony.c ... y2ui3otu37jjubs.png "image.png")

# 总结

随着OpenHarmony生态越来越成熟,开发者通过团结引擎等开发游戏的越来越方便,通过此例分享,为更多开发者实现自己的创意提供参考。
[/md]




欢迎光临 OpenHarmony开发者论坛 (https://forums.openharmony.cn/) Powered by Discuz! X3.5