Unity主程如何做好游戏项目管理
前言
很多小伙伴最近在面试或者考虑跳槽,可能工作了3~5年了想涨薪或想做技术总监或主程, 可自己还是个雏,没有做过项目技术管理,怎么办?今天我给大家梳理一下作为一个技术总监或主程你应该如何带好一个游戏项目,做好技术管理。接下来我们将以一个项目的主要流程为主干,分析在每个环节中你应该如何处理和应对,避免踩坑(注:有些小的游戏项目,某些环节可以做精简,具体的根据实际情况来决策)。
对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一起交流一下开发经验呀!
1: 游戏项目的技术可行性分析与验证
公司开始决定研发某个游戏,游戏立项后公司的各种资源陆续到位,作为技术管理者,首先要做好技术上的可行性分析验证。如何做呢?我们可以按照从下几个步骤来执行:
先来看如何把要做的技术验证都列举出来,这个工作其实是很关键的,项目中可能涉及到技术风险,是否能尽早的公关和得到验证,是后期项目平稳上线的关键。我大概列举了一些常用项目可能要注意的几个方向,供大家参考(更具体的一些细节,可能不同的项目会不一样)。
渲染效果与渲染性能
渲染效果与渲染性能是我们首先要验证的核心方向,比如我们要做卡通类的游戏,我们就要开发出高效的符合游戏项目风格的卡通Shader相关代码和技术验证。比如,我们项目中必须要求实施光照,就可以考虑定制渲染管线来代替传统的向前渲染管线来获得更好的效率和性能,如使用URP渲染管线等。
总结: 尽快的在玩家目标群体的机器中做好渲染效果和渲染性能的验证与统计,同时在这个过程中摸索出来设计的技术规范,比如模型的面数+细节增强的流程规范等。这里额外再说一点,模型场景的面数规范不是网络上去百度得到的,而是根据真机的实际的场景,游戏中的物体数目, 运行的目标人群的手机等因数综合考虑来得到的美术设计等一些参数规范。
美术策划工具制作与规范化开发流畅
工具制作也是需要优先考虑和做验证的,因为工具制作涉及到了开发协作流程,比如做一个给策划用的关卡编辑器来做关卡编辑。和策划约定好相关的输入规范与输出规范。策划如何做,程序如何用等,具体的可以结合游戏项目来考虑。这个过程完成后,就可以制定出和美术策划协作的一些具体的工作流程。
游戏核心玩法的验证
有一些游戏的核心玩法,需要验证,比如格斗类游戏需要验证一些玩家的手感,AppStore上有一些创意类的游戏,需要组织技术来实现核心玩法,比如《纪念碑谷》等游戏。比如《贪吃蛇》满屏都是长蛇的玩法验证等。比如有些创意类游戏要做Mesh切割等都需要来做技术验证。
经过上面的一些技术验证和摸索,我们对项目的技术难点,团队成员(程序+策划+美术+测试等)协同开发与合作都可以形成初步的认识与流程方案。
2: 参与制定团队协同工作流
游戏项目开发本质是一个工程管理,所以严格的工程项目管理流程是非常必要的,整个项目开发中设计到的有:美术+策划+程序+测试+运营等。接下来大家就会再一起来商量出一个协同工作的流程。大概率上来说都是基于版本管理工具来进行管理与协作(如git, svn等)。策划提交哪些策划案与数值表给程序到项目中用,美术做好资源后如何导出来,导到哪个目录下给程序使用。在这个过程中,Unity主程要考虑的问题主要是:
综合考虑完这些问题以后,就会出一些协作规范与协作模式,这样大家就可以各自协同开展工作了。对于程序来说工作是非常重要的,因为最后粘合所有的都是靠程序。所以在团队协作中,我个人比较倾向于以程序为主导来建立开发与协作流程。
3: 框架设计,版本管理,热更新,多渠道打包发布
讲了这么久程序员熟悉的框架设计版本管理,热更新考虑,多渠道打包发布才上场。这里上场前先得要划分好目录结构,这里得目录结构要结合上面得工作流,哪些目录开放给策划,哪些目录开发给美术,策划做好得地图数据放在哪个文件夹等,这些我们做框架得时候要优先定好,来疏通上面得协作流程。这些定好后,美术+策划的工作能正常进行了,这个时候才是程序自己做具体框架代码的时候,才是熟悉的配方熟悉的味道。框架设计本质就是提出一套开发规则与开发流程,所有的程序基于这个开发流程来开发业务功能,与业务无关的代码作为框架代码,下一个项目可以重用,与业务逻辑代码相关的就直接考虑用这个项目就可以了,如果其它项目要用再考虑从这里取。这里要特别说的是资源管理,发布的版本管理,热更新版本管理,以及多渠道打包方案,不过这些方案都是成熟的,相信各位主程们都比较熟悉了。
4: 代码review与稳定性测试
作为一个主程,必须要抽时间来review每天的代码推进,专门找人或自己来review每天代码的实现,把控好团队的实现思路,代码质量等,看是否有走偏, 提前发现各种技术隐患,因为你的团队里面不是每个人都年薪百万,所以必须要做好代码的review与管理,如果项目大,开发者多,可以专门让一个技术管理者review代码。在review代码的过程中可以形成技术架构文档,来为团队的交接做好准备,如果是小项目,而功能都是主程自己开发,这个过程可以根据实际情况来省略。
5: 换位思考,能让你获得不一样的视角
程序员本身就很聪明,什么时候能觉悟,完全取决于他看问题的视角,如果他学会多视角来看问题,加上他聪明的才智,一定能很快就觉悟, 获得更好的机会。而多视角看问题,我们不能只在光从程序的角度上去,要从各个角度去审视。所谓不谋全局者,不足以谋一域,不谋万世者,不足以谋一时。只有学会从策划的角度,美术角度,测试角度,运营角度等多角度思考问题,你才能有不一样的视角,才能看到别人看不到的点。才能坦然的去接收,以及后续自己创业时获得宝贵的经验。
6: 对外为团队争取利益,对内不居功自傲
作为团队的管理者,除了要做带好项目,管理好团队还要为团队争取合理合法的利益和权益。权限和利益争取下来以后,对内也不居功自傲,外其身而身存,后其身而身先。很多人说,项目发奖金了,我拿走了大头,自己赚钱了就可以了,苛刻一下小弟又怎么了?说的是没有错,你也可以赚一点小钱,但是你要想你的理想是什么?40岁以后你怎么弄?路越走越宽还是越走越窄。合理合规的分享利益就可以了。这样路才会越走越宽。
今天就分享到这里了,希望屏幕前的你,路越走越宽, 越走越好。
更多教学视频
https://www.bycwedu.com/promotion_channels/1928452950https://www.bycwedu.com/promotion_channels/1928452950
相关文章:

Unity主程如何做好游戏项目管理
前言 很多小伙伴最近在面试或者考虑跳槽,可能工作了3~5年了想涨薪或想做技术总监或主程, 可自己还是个雏,没有做过项目技术管理,怎么办?今天我给大家梳理一下作为一个技术总监或主程你应该如何带好一个游戏项目,做好技术管理。接…...

103.linux5.15.198 编译 firefly-rk3399(2)
1. 平台: rk3399 firefly 2g16g 2. 内核:linux5.15.136 (从内核镜像网站下载) 3. 交叉编译工具 gcc version 7.5.0 (Ubuntu/Linaro 7.5.0-3ubuntu1~18.04) 4. 宿主机:ubuntu18.04 5. 需要的素材和资料ÿ…...

如何从Android手机上轻松恢复误删除的短信 ?
当您使用 Android 手机时,您可能会误删除一些 Android 短信。如果这些消息对您很重要,您可能想要恢复它们。在这种情况下,您可以尝试使用U1tData安卓数据恢复(奇客软件) 来完成这项工作。这篇文章将向您展示更多信息。…...

毅速丨金属3D打印能替代传统制造吗?
金属3D打印技术已经逐渐被很多行业认可和应用,但是目前,金属3D打印多数被作为传统制造技术的一种补充,暂时还不能完全替代传统制造。 金属3D打印使用的是金属粉末进行选择性激光烧结,打印时在成型缸里铺上金属粉末,打印…...
21个新的ChatGPT应用
自从GPT有了图识别功能后变的更加强大,特别是ChatGPT的视觉技术,为我们提供了无数的可能性。本文将深入探讨这21种应用场景,帮助理解其在日常生活和工作中的实际价值。 生活助手:为日常生活增添色彩 健身计划定制:你…...
【通信原理】第二章|确知信号
前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助。 高质量博客汇总 文章目录 前言 第二章 确知信号1. 确知…...

【JVM】类加载器
【JVM】类加载器 文章目录 【JVM】类加载器0. 类加载器概述1. 类加载器的分类1.1 启动类加载器1.2 Java中的默认类加载器1.2.1 扩展类加载器1.2.2 应用程序类加载器 2. 双亲委派机制2.1 类的双亲委派机制是什么?2.2 打破双亲委派机制2.2.1 自定义类加载器2.2.2 线程…...

利用Excel支持JUnit参数化测试
在JUnit里面,可以使用CsvFileSource读取csv文件进行参数化测试,可是CSV文件不支持格式,编辑颇为麻烦,尤其是多次编辑,因此自然想到是否可以使用Excel文件,可以有各种格式,支持各类数据。 最新开…...

第三章 SysML入门|系统建模语言SysML实用指南学习
仅供个人学习记录 UML与SysML的联系 可以稍微参考UML与SysML的联系 UML(统一建模语言)和SysML(系统建模语言)是两种与建模相关的语言,它们之间存在联系和区别。 SysML的图分类如下图所示。 SysML 图概述 这里只…...

敏捷开发框架Scrum-概述
如果你是一个程序员,可能会觉得这是个程序开发框架。Scrum是一个敏捷开发框架。我们可以把Scrum理解成一个团队一次完成一小部分工作的方式。这种方式通过不断的实验和反馈循环来学习和改进。Scrum可以帮助团队以协作的方式逐步交付价值。 Scrum框架由一个Scrum团队…...
Hafnium启动过程分析
安全之安全(security)博客目录导读 目录 一、在安全世界中加载Hafnium和安全分区 二、通过TF-A启动 1、SP manifests 2、安全分区包 3、描述安全分区...

0基础学习PyFlink——使用Table API实现SQL功能
大纲 Souceschemadescriptor Sinkschemadescriptor Execute完整代码参考资料 《0基础学习PyFlink——使用PyFlink的Sink将结果输出到Mysql》一文中,我们讲到如何通过定义Souce、Sink和Execute三个SQL,来实现数据读取、清洗、计算和入库。 如下图所示SQL是最高层级的…...

文心一言 VS 讯飞星火 VS chatgpt (123)-- 算法导论10.4 4题
四、用go语言,对于一个含 n个结点的任意有根树,写出一个 O(n)时间的过程,输出其所有关键字该树以左孩子右兄弟表示法存储。 文心一言: 在计算机科学中,左孩子右兄弟表示法是一种用于表示树状结构的方法,其…...

[读论文] On Joint Learning for Solving Placement and Routing in Chip Design
0. Abstract 由于 GPU 在加速计算方面的优势和对人类专家的依赖较少,机器学习已成为解决布局和布线问题的新兴工具,这是现代芯片设计流程中的两个关键步骤。它仍处于早期阶段,存在一些基本问题:可扩展性、奖励设计和端到端学习范…...

L2-1 插松枝
L2-1 插松枝 分数 25 全屏浏览题目 切换布局 作者 陈越 单位 浙江大学 人造松枝加工场的工人需要将各种尺寸的塑料松针插到松枝干上,做成大大小小的松枝。他们的工作流程(并不)是这样的: 每人手边有一只小盒子,初始…...
Android 使用ContentObserver监听SettingsProvider值的变化
1、Settings原理 Settings 设置、保存的一些值,最终是存储到 SettingsProvider 的数据库 例如: Settings.Global.putInt(getContentResolver(), "SwitchLaunch", 0); Settings.System.putInt(getContentResolver(), "SwitchLaunch&quo…...

二进制安装部署k8s
概要 常见的K8S按照部署方式 minikube 是一个工具,可以在本地快速运行一个单节点微型K8S,仅用于学习,预习K8S的一些特性使用。 Kubeadmin kubeadmin也是一个工具,特工kubeadm init 和kubedm join,用于快速部署k8s…...

多输入多输出 | Matlab实现k-means-ELM(k均值聚类结合极限学习机)多输入多输出组合预测
多输入多输出 | Matlab实现k-means-ELM(k均值聚类结合极限学习机)多输入多输出组合预测 目录 多输入多输出 | Matlab实现k-means-ELM(k均值聚类结合极限学习机)多输入多输出组合预测预测效果基本描述程序设计参考资料 预测效果 基…...

ITSource 分享 第5期【校园信息墙系统】
项目介绍 本期给大家介绍一个 校园信息墙 系统,可以发布信息,表白墙,分享墙,校园二手买卖,咨询分享等墙信息。整个项目还是比较系统的,分为服务端,管理后台,用户Web端,小…...

记 : CTF2023羊城杯 - Reverse 方向 Blast 题目复现and学习记录
文章目录 前言题目分析and复习过程exp 前言 羊城杯题目复现: 第一题 知识点 :DES算法 : 链接:Ez加密器 第二题 知识点 :动态调试 : 链接:CSGO 这一题的查缺补漏: 虚假控制流的去除…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...

Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...

python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...

Unity中的transform.up
2025年6月8日,周日下午 在Unity中,transform.up是Transform组件的一个属性,表示游戏对象在世界空间中的“上”方向(Y轴正方向),且会随对象旋转动态变化。以下是关键点解析: 基本定义 transfor…...

Ubuntu系统多网卡多相机IP设置方法
目录 1、硬件情况 2、如何设置网卡和相机IP 2.1 万兆网卡连接交换机,交换机再连相机 2.1.1 网卡设置 2.1.2 相机设置 2.3 万兆网卡直连相机 1、硬件情况 2个网卡n个相机 电脑系统信息,系统版本:Ubuntu22.04.5 LTS;内核版本…...