It freed me to enter one of the most creative periods of my life
— Steve Jobs, Stanford Report, June 14, 2005
与游戏世界交互
游戏交互与创新
游戏交互是玩家体验的基础。这里交互模型定义为建立输入设备的输入与游戏世界中的对象行为之间的关系,以及游戏世界状态与玩家感知(视觉、听觉、触觉、嗅觉等之间的关系)。
游戏典型的交互模型包括:
- 角色扮演模型。即玩家扮演游戏世界中的一个对象,并实现游戏操纵杆及其按钮的操作与游戏对象行为之间的映射。这样,玩家就可以通过一个或多个设备控制游戏对象。
- 多视角交互模型。即为游戏世界构建多个视图,每个视图反映不同观察视角或游戏的状态,使得玩家可以在不同视图中选择合适的方式(如菜单、软件工具等)与游戏世界交互。
- 团队交互模型。在社交类游戏中,通常有视图反映协同玩家状态,如队友列表等,玩家可通过广播、视频、聊天室、私聊等即时沟通渠道实现协作。
- 竞技交互模式。具备竞技模式一般需要支持更多的游戏设备,以满足发烧玩家的需要。使用 180 度屏幕、7 声道杜比立体声、游戏鼠标等的玩家,显然都是游戏公司争夺的 VIP。
- 桌面、移动交互模式。以大众客户为目标,通常是小游戏或商业游戏。
游戏创新理念:
- 第一层:交互装备创新
- 第二层:机制创新
- 第三层:以客户为中心的创新
作业与练习
1 编程实践
1.1 技术要求
- 使用带缓存的工厂模式管理不同飞碟的生产与回收,该工厂必须是场景单实例的!具体实现见参考资源 Singleton 模板类
- 近可能使用前面 MVC 结构实现人机交互与游戏模型分离
1.2 游戏说明
游戏内容
一个简单的鼠标打飞碟(Hit UFO)游戏
游戏规则与设定
- 游戏有 4 个 round,每个 round 都包括10 次 trial;
- 每个 trial 的飞碟的色彩、大小、发射位置、速度、角度、同时出现的个数都可能不同。它们由该 round 的 ruler 控制;
- 每个 trial 的飞碟有随机性,总体难度随 round 上升;
- 鼠标点中得分,得分规则按色彩、大小、速度不同计算,规则可自由设定。
1.3 完成情况
游戏界面如下:
1.4 项目设计
首先创建需要的游戏元素,如飞碟的预制、Terrain等:
最终项目的文件结构如下:
关于代码编写,首先是继承上一次项目“牧师与魔鬼-动作分离版”的成果,实现部分的代码复用:
SSDirector.cs:实现动作基类。
1 | public class SSDirector : System.Object { |
SSAction.cs:实现SSAction、CCMoveToAction和SSActionManager类。
1 | // SSAction\CCMoveToAction\SSActionManager |
Action.cs:该脚本需添加到 Empty 物体上,刻画了UFO的动作。
1 | public class Action : SSActionManager, SSActionCallback |
FirstController.cs:场记,该脚本需添加到 Empty 物体上,实现了游戏的开始、进行、结束和点击事件。
1 | public class FirstController : MonoBehaviour, ISceneController, UserAction |
UFO.cs:采用了工厂模式来实现UFO的生产以及复用。
1 | // UFO 基本属性 |
Interfaces.cs:接口。
1 | namespace Interfaces |
InteracteGUI.cs:实现GUI。
1 | public class InteracteGUI : MonoBehaviour |
1.5 项目地址
代码地址:https://github.com/CUFMHeart/3D-Game-Programming-Design/tree/master/homework5/HitUFO
视频地址:https://www.bilibili.com/video/av70621955/
2 编写一个简单的自定义 Component
用自定义组件定义几种飞碟,做成预制
- 参考官方脚本手册 https://docs.unity3d.com/ScriptReference/Editor.html
- 实现自定义组件,编辑并赋予飞碟一些属性
自定义组件的实现要求可以在 Unity3D 的 Inspector 界面对飞碟的大小颜色分数等进行编辑。需要继承 Editor 类,还需要显示当前的属性值,由 OnEnable() 实现,而修改属性值则通过 OnInspectorGUI() 实现,分数是一个区间所以设置为一个滑动条,大小可以在0~10内拖动,而大小、颜色则有自适应的调整方式。
代码如下:
1 | using UnityEngine; |
参考资料
[1] 与游戏世界交互_教学讲义
[2] Maunal