游戏立项时期随笔记录(1)
模拟经营的项目还没有完全结束,这几天又有可能涉及到一个新项目。感想随笔记录一下,防止忘记。今天一天整理这个,搞得今天没时间看数学和AI。
在 Unity3D 游戏前端主程序的立项时期,核心目标是明确技术方向、评估可行性、搭建基础框架、规避风险,为后续开发奠定基础。以下是详细的工作清单(按优先级和逻辑顺序排列):
一、需求与目标对齐(与策划 / 制作人同步)
-
深度解读《立项文档》
- 立项文档一般来自于制作人。明确核心玩法(如 ARPG / 开放世界 / 卡牌/模拟经营/塔防,核心玩法决定了游戏类型)、美术风格(卡通渲染 / 写实 PBR / 水墨,美术决定了视觉市场受众)、目标平台(PC / 手机 / 主机,这部分一般都会做多平台兼容,多平台兼容的工作非常琐碎)、性能指标(如移动端 60 帧、低端机 30 帧,这部分只能说理想和现实是有冲突的,性能优化是无止尽的,核心的优化,UI的优化,各方面的优化)。
- 标注技术敏感点:如大世界无缝加载、多角色同屏战斗、物理交互(布料 / 刚体)、动态天气等,休闲对战。只会考虑核心玩法和几个重要的玩法,周边的功能立项时期一般指不会过于考虑,因为这部分的套路都是实际上是运营决定的赚钱套路,本质和游戏无关。一般一组功能遵循着“胚子数值 - 模块核心玩法 - 养成玩法 - 对应活动”的封装方式。可以无限扩展n组封装。
- 接受到文档到,主程序需要解构文档为大致最小可行方案的可执行列表,文档不可量化,可执行列表才能估算工作量。立项阶段条件好的团队一般只有主程序 + 一个核心程序,小团队需要一个程序搞定立项阶段的所有事情。
-
竞品技术拆解
- 分析同类游戏的 Unity 实现方案,输出《技术对标报告》。
- 重点关注引擎限制的各个点:如 Unity 的 Draw Call 优化、LOD 分级、Shader 变体控制。游戏体量决定着实现方式必然不同,一个人的项目分拆的过于细节化和深入意味着项目永远无法可以落地执行。同样类型的游戏,最终定位是微型,小型,中型还是大型项目,他们的实现必然不同。
二、技术预研与风险评估(核心任务)
-
引擎版本选型与兼容性验证
- 测试目标平台的 Unity 版本(如 2023.3LTS 对安卓 14 的适配),规避已知 Bug(如 URP 在某些 GPU 的渲染错误)。个人习惯了解最新的技术,但是一般不会去使用最新的技术,新技术意味着未必稳定,有一定的风险。程序实际上是游戏的支撑,稳定是第一要务。
- 预研关键技术模块:
- 渲染:HDRP/URP 选择(如果兼容移动端优先 URP)、自定义 Shader(如水体 / 毛发)的性能测试。如果个人没什么追求,中小型游戏其实可以不考虑很多性能问题。
- 性能:内存泄漏预研(Mono/IL2CPP 对比)、GC 优化(对象池 / 结构体代替类)。
- 框架:ECS(Hybrid/Entitas)是否引入?数据驱动架构(配置表热更)的设计。
- 输出《技术可行性报告》,明确不可行项。注意主程序不但需要知道技术前沿的上限,也要知道自己的上限,某种意义上立项期间的最小化demo(实际上在非职业开发的角度来看,这就是一个完整的半成品游戏)。在当前的项目要求下,自己能做什么,不能做什么,估计的时间,一定要写在可行性报告里,如果心里没数,必然而且一定会导致项目delay。
-
原型 Demo 开发(最小可行性验证)
-
用 1个月时间开发垂直切片(不包括代码框架部分):核心玩法 + 核心技术(如战斗镜头 + 技能特效 + UI 交互)。注意,一个项目一般不会去直接自己从0-1去写一套框架,框架是需要实际项目去验证的。我自己的经历是,框架是之前项目的经验总和,或者使用稳定的开源框架,或者从成功上线过的游戏中拆分出框架
- 框架重点验证:
- 场景加载耗时(AB 包策略、异步加载)。
- 多线程优化(Job System 处理寻路 / AI)。
- 热更新方案(ILRuntime/Huatuo)的集成测试。
- 记录瓶颈数据(如 CPU/GPU 占用率、内存峰值),作为后续优化基准。
- 实际游戏验证,这不到一个月的时间里需要和制作人和策划不停的对。
-
三、基础框架搭建(技术地基)
这部分在主程序实现demo的过程中应该已经可以形成一套行为模式,把这个模式标准化然后复制到每个组成员身上就可以。
-
项目结构标准化
- 目录规范:Assets/[Core (框架)/Game (玩法)/Tools/ThirdParty],制定资源命名规则(如 UI_LoginBtn_Selected)。
- 配置管理:接入 Git/GitLFS,分支策略(主干开发 + 特性分支)。
- 比如:强制使用 Addressable 替代传统 AB 包,避免路径硬编码。
-
核心框架设计
- 模块拆分:EventCenter(事件总线)、PoolManager(对象池)、ResourceManager(资源加载)、UIManager(界面栈)。
- 数据层:设计热更层与原生层的交互接口(如 C# 绑定 Lua/ILRuntime)。
- 日志与监控:集成 APM 工具(如 Unity Profiler + 自定义性能看板),埋点记录 FPS、内存、卡顿帧。
- 以上都是老生常谈。每个项目会应自身特点而生的特定基础框架模组,这个需要应需求来发,demo期间是不管遮这些的。
-
工具链搭建
- 自动化:编写编辑器脚本(如美术资源自动打标、配置表转代码)。
- 协同:接入 Perforce 或 Plastic SCM,解决美术资源(FBX/PNG)的版本冲突。
- 测试:集成 Playable Tests(自动化 UI 测试)、构建流水线(Jenkins/CircleCI),这部分需要测试团队做,如果没有那就自己手动打包吧,或者自己用python写个自动打包脚本。
四、资源与团队规划
-
美术资源预规划
- 与美术确认资源规范:贴图尺寸(UI 2048x2048、模型 1024x1024)、骨骼数量(角色≤100 根)、动画压缩格式(Hantro/Optimal)。
- 制定《资源交付清单》:如首周需完成的 10 个 UI 预制体、3 个角色模型。
- 对技术来说美术并非非完备不可。我负责的几个项目中一大半使用方块开始的,条件好的是素模。如果制作人觉得创意可行,那么才会继续投入资源继续推进。
-
团队分工与开发规范
- 前端组细分:渲染组(Shader / 后处理)、逻辑组(玩法系统)、工具组(编辑器扩展)。如果小团队,那就玩法先行是必须的,渲染和工具一遍搞一边做。但是基本渲染管线需要一开始确定,最基本的用默认管线也不是不可以。
- 编码规范:强制使用 C# 9.0+、注释模板、错误处理(Try-Catch 记录堆栈)。
- 制定《开发公约》:比如禁止在 Update 中做复杂计算,UI 事件统一走 EventCenter。
-
里程碑与风险预案
- 立项阶段里程碑:原型 Demo 通过、框架初稿完成(这个一般会注明框架来自哪里,使用过的上线项目)、首版性能报告输出(这个只是预计的,初版demo别指望性能完善)。
- 风险预案:如渲染性能不足,备选方案为动态分辨率缩放或降低阴影质量。
五、文档与流程管理
这部分并不是必须的,每个团队有自己的做法,有的团队干脆就是word说明,没技术文档。
-
编写《技术设计文档(TDD)》
- 包含:架构图、模块接口、性能指标、资源规范、工具链说明。
-
制定《开发流程 SOP》
- 提测标准:代码需通过 SonarQube 扫描、单元测试覆盖率≥70%。
- 热更流程:Lua 脚本修改需经过灰度测试(AB 包分批次发布)。
六、立项评审与迭代
-
组织立项评审会
- 演示原型 Demo后,同步技术风险(如 “某个技术难点实现需要多久,另外需额外 2 人月优化”,零需要专人维护)。
- 确认资源预算(如美术外包费用、引擎授权费)、排期(如 Alpha 版 6 - 9个月)。主程有时候确实会参加和技术无关的会议。
-
建立迭代反馈机制
- 每周同步技术债(如 “20 个未优化的 Shader 变体”),优先处理阻塞性问题。
- 若原型 Demo 中发现 UI 渲染卡顿,立即启动 Canvas 动态合批方案预研。
总结
通过原型验证→结合框架落地→风险量化,确保前端主程序在开发初期 “走对路、少返工”(笑,不存在的,走对了路也会经常返工,demo期这很正常)。尤其注意性能前置(如在原型阶段发现内存和渲染的问题 - 一定会有的0-0)和结构规范先行(如果结构太乱,后期必然重构,不然无法维护。因为一般项目结构清晰的话,内部逻辑代码再怎么乱整个项目也会一目了然,猜也能猜出个大概。如果项目结构乱七八糟,以后自己找都找不到具体功能位置,乱了不便于管理。而不管项目成功与否,中后期的人员交替都是很正常的事,让新人便于查找功能位置,这是另外一个问题。)这是 Unity 项目后期维护的关键之一。
相关文章:
游戏立项时期随笔记录(1)
模拟经营的项目还没有完全结束,这几天又有可能涉及到一个新项目。感想随笔记录一下,防止忘记。今天一天整理这个,搞得今天没时间看数学和AI。 在 Unity3D 游戏前端主程序的立项时期,核心目标是明确技术方向、评估可行性、搭建基础…...
LVGL 中设置 UI 层局部透明,显示下方视频层
LVGL层次 LVGL自上而下分别是layer_sys > layer_top > lv_sreen_active > layer_bottom 即 系统层、顶层、活动屏幕、底层 原理 如果将UI设置为局部透明,显示下方的视频层,不仅仅需要将当前活动屏幕的背景设置为透明,还需要将底层…...
Debezium日常分享系列之:Debezium 3.1.0.Beta1发布
Debezium日常分享系列之:Debezium 3.1.0.Beta1发布 新特性和改进Debezium 平台的首次发布Percona 的最小锁定新的 Oracle 源信息 SCN 和时间戳字段Vitess Epoch/零日期列解析的变化Vitess 二进制排序的 tiny、medium 和 long 文本列的变化CloudEvent traceparent 支…...
21.多态
一、多态概念 多种形态。 静态多态:编译时多态。(函数重载) 动态多态:运行时多态。(继承关系下,调用父类指针或引用,对于不同的对象有不同的行为) 二、多态的定义及实现 1ÿ…...
【蓝桥杯】第十三届C++B组省赛
⭐️个人主页:小羊 ⭐️所属专栏:蓝桥杯 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 试题A:九进制转十进制试题B:顺子日期试题C:刷题统计试题D:修剪灌木试题E…...
C# PaddleOCR字符识别
1 安装Nuget 2 C# using System; using OpenCvSharp; using Sdcb.PaddleOCR; using Sdcb.PaddleOCR.Models.Local; using Sdcb.PaddleOCR.Models; using Sdcb.PaddleInference;namespace ConsoleApp1 {public class MichaelOCR{string imagePath "D:\\BUFFER\\VS\\Text\…...
网络爬虫相关
一、爬虫的基础内容 1、基本概念和用途 1.1、概念: 模拟浏览器、发送请求,获取响应。(只能获取客户端所展示出来的数据) 1.2、特点:知识碎片化,针对不同的网站对应的方法也不同。 爬虫:模拟…...
算法及数据结构系列 - 二分查找
系列文章目录 算法及数据结构系列 - BFS算法 文章目录 二分查找框架思路经典题型二分查找寻找左侧边界寻找右侧边界 刷题875. 爱吃香蕉的珂珂1011. 在 D 天内送达包裹的能力392. 判断子序列 二分查找 框架思路 int binarySearch(int[] nums, int target) {int left 0, righ…...
多环境开发-Profiles
在实际的项目开发中,我们通常会涉及多个环境,如开发环境(dev)、测试环境(test)和生产环境(pro)。在不同的环境下,程序的配置信息会有所不同,例如连接的数据库…...
《TCP/IP网络编程》学习笔记 | Chapter 18:多线程服务器端的实现
《TCP/IP网络编程》学习笔记 | Chapter 18:多线程服务器端的实现 《TCP/IP网络编程》学习笔记 | Chapter 18:多线程服务器端的实现线程的概念引入线程的背景线程与进程的区别 线程创建与运行pthread_createpthread_join可在临界区内调用的函数工作&#…...
MambaVision:一种Mamba-Transformer混合视觉骨干网络
摘要 我们提出了一种新型混合Mamba-Transformer主干网络,称为MambaVision,该网络专为视觉应用而设计。我们的核心贡献包括重新设计Mamba公式,以增强其对视觉特征的高效建模能力。此外,我们还对将视觉Transformer(ViT&…...
【Visio使用教程】
Visio使用教程 1. Visio 的基本介绍1.1 Visio 是什么?核心特点: 1.2 主要功能与应用场景典型用途:行业应用: 1.3 版本与兼容性1.4 Visio下载1.5 安装 2. Visio 的界面与基础操作2.1 界面布局详解2.2 创建新文档与模板选择2.3 形状…...
深度学习-服务器训练SparseDrive过程记录
1、cuda安装 1.1 卸载安装失败的cuda 参考:https://blog.csdn.net/weixin_40826634/article/details/127493809 注意:因为/usr/local/cuda-xx.x/bin/下没有卸载脚本,很可能是apt安装的,所以通过执行下面的命令删除: a…...
什么是梯度方差和缩放因子
什么是梯度方差和缩放因子 目录 什么是梯度方差和缩放因子计算梯度方差(Fisher 信息)作用梯度方差计算方式(方差越大,参数越重要,小步更新(细致一些))示例使用缩放因子作用示例两者的区别总结在 LoRA(Low-Rank Adaptation)中,计算梯度方差和使用缩放因子是两个不同的概…...
Linux 如何上传本地文件以及下载文件到本地命令总结
如果你希望在 Shell 终端中将远程服务器上的文件下载到本地电脑,可以使用以下工具和命令: 1. rz / sz(用于 Xshell、MobaXterm 等终端) 如果你使用的是Xshell、SecureCRT、MobaXterm等支持 rz/sz 的终端,可以使用 rz …...
学习单片机需要多长时间才能进行简单的项目开发?
之前有老铁问我,学单片机到底要多久,才能进行简单的项目开发?是三个月速成,还是三年磨一剑? 今天咱们就来聊聊这个话题,我不是什么高高在上的专家,就是个踩过无数坑、烧过几块板子的“技术老友”…...
stm32 L432KC(mbed)入门第一课
目录 一. 前言 二. 专栏意义 三. MS入门第一课 一. 前言 新的一年MS课程又开始了,同时也到了该专栏的第三个年头。在前两年中,该专栏帮助了很多第一次接触单片机的同学。其中,有的同学订阅专栏是为了更好的完成并且通过MS这门课程…...
【面试手撕】非常规算法,多线程常见手撕题目
【面试手撕】非常规算法,多线程常见手撕题目 生产者消费者ReentrantLock实现的生产苹果/消费苹果synchronized实现的生产消费LinkedBlockingQueue阻塞队列方法实现多条件资源分配分布式任务调度模拟 交替打印两个线程交替打印1-100之间的数ReentrantLock 实现synchr…...
Python 基础语法详解
一、变量和数据类型 变量 在 Python 中,变量无需声明类型,直接赋值即可。变量名区分大小写。 # 整数类型 age 25 print(age) # 输出:25# 浮点数类型 height 1.75 print(height) # 输出:1.75# 字符串类型 name "张三&…...
批量给 Excel 添加或删除密码保护|Excel 批量设置打开密码和只读密码
我们在将 Excel 文档发送给第三方或者进行存档的时候,对 Excel 文档添加密码保护是非常重要的一个操作。添加保护后的 Excel 文档。就只能有相应权限的用户才能够打开或者编辑操作。尤其是当我们 Excel 文档中内容非常敏感非常重要的时候,添加保护就显得…...
4.JVM-垃圾回收介绍
记录个人学习中记录笔记,如有错误请您指正,谢谢🙏 垃圾回收器发展史 传统垃圾回收: 分代回收 不同代有不同的垃圾回收机制 保底 标记清除算法 垃圾识别算法 引用计数法 缺陷:下图2 出现循环引用 无法解决 可达性分析 大部分(Java,pytho…...
Redis-锁-商品秒杀防止超卖
一、秒杀(Seckill) 1. 定义 秒杀:短时间内(如1秒内)大量用户同时抢购 限量低价商品 的营销活动。典型场景:双11热门商品抢购、小米手机首发、演唱会门票开售。 2. 技术挑战 挑战点说明后果…...
PostgreSQL 多数据库集簇配置及多数据库复制方法【流程+代码实例】
PostgreSQL 多数据库集簇配置及多数据库复制方法 1. 多数据库集簇配置 安装下载完postgresql后,系统此时包含一个postgres用户和一个名为postgres的默认数据库。 PostgreSQL 基本命令 服务管理命令 # 停止和启动及重启PostgreSQL服务 sudo systemctl stop postgr…...
【k8s004】 Docker 打包 K8s镜像
文章目录 一. 准备工作1. 安装 Docker: [官方安装文档](https://docs.docker.com/get-docker/)2. 准备应用代码(示例使用 Node.js 应用) 二. 创建 Dockerfile3、构建镜像(注意最后的点号)4、测试运行5、推送镜像到仓库6、 Kuberne…...
std::invoke详解
基础介绍 c17版本引入了std::invoke特性,这是一个通用的调用包装器,可以统一调用: 普通函数成员函数函数对象Lambda表达式指向成员的指针 它的主要作用是提供一个统一的方式来调用各种可调用对象。 std::invoke依赖的头文件:#…...
第一个vue项目
项目目录 启动vue项目 npm run serve 1.vue.config.js文件 (CLI通过vue-cli-serve启动项目,解析配置配置文件vue-condig-js) // vue.config.js //引入path板块,这是Node.js的一个内置模块,用于处理文件路径,这里引用…...
基于CNN的多种类蝴蝶图像分类
基于CNN的多种类蝴蝶图像分类🦋 基于卷积神经网络对64992786张图像,75种不同类别的蝴蝶进行可视化分析、模型训练及分类展示 导入库 import pandas as pd import os import matplotlib.pyplot as plt import seaborn as sns import numpy as np from …...
Unity插件-适用于画面传输的FMETP STREAM使用方法(三)基础使用
目录 一、插件介绍 二、组件介绍 三、Game View Streaming 1、使用 FM Network UDP 的基本设置 Server Scene Client Scene 2、使用使用 FM WebSocket 的基本设置 四、Audio Streaming 五、Microphone Streaming 一、插件介绍 Unity插件-适用于画面传输的…...
微信小程序wx.request接口报错(errno: 600001, errMsg: “request:fail -2:net::ERR_FAILED“)
来看看报错 报错如下: 请求发送部分,代码如下: uni.request({url: self.serverUrl "/getRealName",method: GET,data: {"code": self.info.code,},header: {"Authorization": uni.getStorageSync(tokenHead) uni.getStorageSync(token)}}…...
使用Docker快速搭建OpenAI兼容的Embeddings与Rerank双API服务
使用Docker快速搭建OpenAI兼容的Embeddings与Rerank双API服务 前言环境准备硬件要求软件依赖双服务部署指南1. Embeddings API部署启动容器参数说明2. Rerank API部署启动容器服务验证与测试通用验证方法1. Embeddings API测试请求示例响应特征2. Rerank API测试请求示例响应解…...
