项目特质与设计开发流程的策略选择

简介: 最近,借着新项目的机会,我(英文原文作者)对过去在Oculus Launchpad项目中的经验进行了总结。在本文中,我来和各位聊一聊我通常会以怎样的方式开始新项目。

最近,借着新项目的机会,我(英文原文作者)对过去在Oculus Launchpad项目中的经验进行了总结。在本文中,我来和各位聊一聊我通常会以怎样的方式开始新项目。

正常情况下,我手头会有两到三个项目同时进行。取决于规模与复杂度的差异,我在规划阶段所花费的时间也有所不同。从形成最初的想法,到最终完成demo,我通常会将整个流程划分为以下几个步骤。

规划

刚刚有说到,规划阶段的工作量取决于项目自身的性质。如果打算研究一种新引擎或是开发技术,我甚至会跳过这一阶段,直接上手代码并尽快实现一些东西 出来。不过通常情况下,我还是会预先对整个项目的流程框架进行规划。我手头的项目多数来自于类似“我们需要在月底的大会上演示一段五分钟左右的VR demo,有没什么合适的想法?”这样的需求,所以我在创意及技术运用等方面所拥有的自由度还是很高的。通常,我会制作一些不包含任何射击元素的 FPS(第一人称射击)类小游戏,譬如让玩家在VR环境中寻找或躲避一些东西,以此积分或记录最长游戏时间等等。

而对于较复杂的项目,我则会在规划阶段将具体的实施步骤及相关细节尽可能详细的描述出来,例如游戏模式、互动元素等等,从而使具体的设计与开发流程更加顺畅。

我在规划阶段通常会采用的具体方法包括:

1.画草图,使自己对想要创建的3D环境产生较为直观的感知。

在小项目中,我会用普通的铅笔在纸上简单画些环境结构和游戏元素;而对于较大的项目,我会在草图中加入多种颜色,使细节更加丰富和直观。无论你想创 建机甲风格的科幻场景,还是美轮美奂的童话仙境,事先通过草图大致的描绘出来都能帮你在开发阶段更加轻松高效的选用素材,尤其是当你在使用GitHub一 类的云基解决方案的时候。

2.用一句话描述项目的本质

对于比较复杂的项目,要言简意赅的描述出你想做的事情其实并不容易。我时常会不由自主的将太多细节一股脑的端出,不过每一次也都在努力试着通过一句 话来言简意明的指出项目的核心所在,例如“用于Oculus Rift的小猫找物游戏”或是“用于Google Cardboard的机甲射击游戏”等等 – 总之是一些很基础性的描述,但可以帮你对项目方向进行清晰而明确的定义,便于接下来进行任务分解。

3.对于复杂的项目:创建一份游戏元素清单

我有时会迷失在各种有趣想法当中,甚至会慢慢背离自己最初的构想。在初期探索时,这还不算太坏,只是一旦发生在实际开发阶段,这种习惯就有可能带来 非常严重的问题了。起草一份清单,将组成游戏的各类元素,包括互动对象、行为规则、胜负条件等等按照不同的颗粒度划分为独立的模块,并清晰的列出,根据不 同阶段的具体情况而适时更新,让一切保持在可控、可追踪的范围之内。

设计与开发

在这两个阶段里,事情才真正变得有趣起来。对于小项目(三到五天的开发工作量),我会跳过正式的设计环节,直接开始编程工作,当然期间还是会通过草图来明确玩家与游戏元素之间的互动规则。取决于不同的平台,我通常会在两种方式之间进行选择:

1.Cardboard(移动VR)

在移动VR项目中,我一开始就会将平台提供的camera组件放置到场景当中(理论上讲,我或许可以在所有的项目中都采用类似的做法,只是目前对于 桌面VR平台,我仍然倾向于在搭建完整个环境之后再放入camera),然后开始创建最基本的环境(如果游戏机制足够简单,我会直接使用现成的素材包), 接下来是编写游戏脚本,包括互动规则和控制器组件等等;最后是添加必要的动效和光影效果,然后进行测试。

2.桌面VR

对于桌面VR系统,方式会略为不同。相比于移动VR,桌面系统提供的主角组件通常会复杂很多,所以多数时候我不会从第一人称视角相关的组件出发来开 始工作,而是首先打造出环境场景及游戏机制,就像前面提到的那样。我会从最小化的环境创建工作入手,使用最基本的构件来制作最为必要的环境组件,而不是使 用大而全的素材包。在此基础上完成脚本编写,然后再回过头来补充和优化环境元素,最后将平台提供的专用camera组件放置进来,完成人机互动机制,然后 打磨光影和视效,优化调整,进行测试。

3.对于复杂的项目:创建开发设计文档与概念设计稿

在复杂的大项目正式启动之前,我会花些时间拟一份开发设计文档,从较高的层面上将整个项目进行合理的分解,抽象出不同的组件和模块,使接下来的设计和开发工作更加有章可循,便于管理。而对于那些通常只会用到两至三个脚本的小项目来说,这一步骤就没那么必要了。

发布

目前的方式未必站得住脚 – 我会直接将项目发布到GitHub,或是在Azure上自己做host。接下来我会试着在这一阶段采用更加合理和细化的方式,届时再与各位进行分享。

祝各位VR行动者玩得开心!

彩蛋 from C7210

每次彩蛋时间总有一种最后一搏的感觉不知为什么。像是终于可以在周日傍晚的跑步及美味晚餐之前完成一件重要的事情那样。说起来,难道不是么。

怎样都要把这件事放在第一位。“人生大突破。与熟食only的宿命诀别。从零接触到满满一大海碗散寿司(也没那么多),仅一念之间。班哉。” 过去的的确确从来不碰日料中的生鲜,有那么一两次即便被众人围观着强行放入嘴中,最终也只有尴尬的嚼到一半吐了出来。恶心是怪恶心的,那个样子,想想看。

目录
相关文章
|
23天前
|
设计模式 前端开发 JavaScript
自动化测试框架设计原则与最佳实践####
本文深入探讨了构建高效、可维护的自动化测试框架的核心原则与策略,旨在为软件测试工程师提供一套系统性的方法指南。通过分析常见误区,结合行业案例,阐述了如何根据项目特性定制自动化策略,优化测试流程,提升测试覆盖率与执行效率。 ####
47 6
|
7月前
|
存储 缓存 JSON
第九篇 API设计原则与最佳实践
第九篇 API设计原则与最佳实践
141 1
|
3月前
|
设计模式 存储 人工智能
深度解析Unity游戏开发:从零构建可扩展与可维护的游戏架构,让你的游戏项目在模块化设计、脚本对象运用及状态模式处理中焕发新生,实现高效迭代与团队协作的完美平衡之路
【9月更文挑战第1天】游戏开发中的架构设计是项目成功的关键。良好的架构能提升开发效率并确保项目的长期可维护性和可扩展性。在使用Unity引擎时,合理的架构尤为重要。本文探讨了如何在Unity中实现可扩展且易维护的游戏架构,包括模块化设计、使用脚本对象管理数据、应用设计模式(如状态模式)及采用MVC/MVVM架构模式。通过这些方法,可以显著提高开发效率和游戏质量。例如,模块化设计将游戏拆分为独立模块。
203 3
|
3月前
|
存储 Linux 开发工具
Linux内核开发流程指南 - 2. 开发流程的运作方式【ChatGPT】
Linux内核开发流程指南 - 2. 开发流程的运作方式【ChatGPT】
|
6月前
|
前端开发 Java 程序员
老程序员分享:Jeeplus框架工作流的使用实战(采购计划的制定流程)
老程序员分享:Jeeplus框架工作流的使用实战(采购计划的制定流程)
123 2
|
7月前
|
前端开发 JavaScript 测试技术
修改代码的艺术——如何高效开发、维护和重构复杂的现有系统
这篇文章回忆了作者在高三时期通过努力进入班级前列的故事,并引申到软件开发领域。作者指出,开发工作往往被认为困难重重,但实际上,通过良好的方法、设计和工具,可以提高开发效率和享受编程带来的成就感。文章以最近完成的一个复杂核心需求为例,详细介绍了如何分析、设计和实现这个需求,包括采用领域驱动设计(DDD)理念,数据库字段变更,代码实现,自动化单元测试,重构和代码维护的重要性。最后,作者推荐了几本关于软件开发的经典书籍,并鼓励开发者不断提升自己,以更好地应对挑战。
|
7月前
|
敏捷开发 设计模式 Devops
深入理解软件测试中的自动化框架设计原则
【5月更文挑战第26天】 在现代软件开发周期中,自动化测试已成为确保产品质量和加快交付速度的关键因素。本文将探讨自动化测试框架的设计原则,旨在为读者提供如何构建一个高效、可靠且易于维护的自动化测试框架的洞见。通过对框架设计模式的深入分析,以及实际案例研究,我们阐述了如何优化测试脚本的重用性、可扩展性和灵活性。文章还讨论了持续集成环境中自动化框架的最佳实践,帮助团队有效地实施自动化策略,并最终实现更快的反馈循环和更高的产品质量。
|
7月前
|
安全 云计算 UED
产品设计通用七原则
【5月更文挑战第28天】这些通用原则注重无障碍和用户体验,但实际设计还需结合经济、工程、文化等因素。
|
7月前
|
设计模式 API 数据库
【C/C++ 设计思路】C++中解耦策略的艺术:有效管理复杂依赖关系
【C/C++ 设计思路】C++中解耦策略的艺术:有效管理复杂依赖关系
368 3
|
7月前
|
安全 前端开发 测试技术
【测开方法论】当老功能代码命名不规范的时候...如何安全增加新功能
【测开方法论】当老功能代码命名不规范的时候...如何安全增加新功能