找回密码
 立即注册
楼主: 十二音阶囤

[笔记] Unity3D如何有效地组织代码?

[复制链接]
发表于 2020-12-15 10:06 | 显示全部楼层
1.代码目录分分好, 保持良好的层次关系
2.尽量不要使用全局变量
发表于 2020-12-15 10:09 | 显示全部楼层
我以前写c++的
谈谈我自己的架构,个人认为用的比较舒心
我的思路是数据文档分离(可能是以前mfc写多了)
数据通通用单件模式储存,比如说一个三国游戏,所有武将的数据写一个单间类herolistglobal,所有城市数据写一个类citylistglobal
unity里面gameobj只负责数据的表现
一个武将在哪里,现在什么状态,都在需要表现的时候去global类里面找,然后显示
发表于 2020-12-15 10:15 | 显示全部楼层
使用行为树就可以了。不要相信有万能的框架,唯有把代码细分到足够小粒度的Action,从宏观层去架构游戏。固定的框架只能使开发游戏前期投入大量的学习成本,后期的话,迁移也不容易... 只能说多人开发方便解耦。现在我用行为树写了很多Action,基本上很少写重复的代码了... 大部分时间看到我都是在拼图... 不知道的人以为我是策划呢,各种连连看
发表于 2020-12-15 10:15 | 显示全部楼层
unity是基于组件开发 一上来确实不太适应,也跟同事讨论了好久,至今没什么太好的结论。说下我们的方案,
一.启动场景一个 object上挂脚本主入口,他负责驱动游戏内所有manager的创建,更新及销毁。
二.人物,AI等需要继承的通过持有gameObject来是实现。而不是挂载到gameObject上。
三.基础功能通过组件实现。挂载到gameObject上。
总体上就是最基础层面 负责具体功能的用组件来降低耦合度,这样也清晰。而一些需要始终存在的或者需要继承则通过原来的方式,创建脚本对象,然后持有Object,这是这个object不在负责具体逻辑,只是各个基础功能的总和。
发表于 2020-12-15 10:17 | 显示全部楼层
开发了3个Unity项目, 想到几个问题需要注意:
1. 避免monobehavior脚本滥用, 作为一种需要挂到gameobject的资源脚本, 与很多prefab产生了大量相关性, 造成维护困难, 除非一些不经常修改的, 如ngui的各种资源型脚本, 避免游戏逻辑扑到该脚本上. 写一个健壮的MVC架构, 顶住各种"便利"的实现方式, 是项目成功的必备基础
2. 资源目录划分, 涉及到如何打包资源, 如何发布版本, 如何控制资源大小, 做一些你认为可行的划分方式, 如按照图片, 动画, 模型等, 或按照角色, UI, 特效等, 写一些必要的效率插件, 写一个稳定的资源管理框架
3. 程序脚本, 美术资源, 策划配置, 常常会因为项目的仓促进行, 导致最终发版本一团乱, 同上述第2点, 前期一定要规划好版本控制方式, 是否采用git, svn, asset server等等, 是否需要开发专用工具导入导出, 版本发布是否需要考虑各种本地化, 渠道分支怎么管理, 甚至开发人员职责如何划分(逻辑程序, 插件程序, 引擎程序等)
发表于 2020-12-15 10:21 | 显示全部楼层
我来说一句,少用挂脚本!少用挂脚本!少用挂脚本!游戏逻辑只用一个Monobehaviour驱动,这样的项目再乱也是有下限的,不知道有多少公司多少项目被滥用挂脚本坑了。
发表于 2020-12-15 10:26 | 显示全部楼层
1. 目录结构。按公用性,模块性,为美术资源和代码划分清晰。注意Unity3d内建即定的目录,避免冲突。最近我看到了这篇关于Unity3d开发实践的文章,谈及的很广泛,也很有参考虑价值,里面有目录结构划分的建议。Unity3D手游开发实践《腾讯桌球》客户端开发经验总结
2. 游戏框架。没有最好的游戏框架。只要适用项目、足够的灵活性、能够约束好各个程序同事的代码风格。我觉得就可以了。我了解到的Unity3d框架有strangeioc、uiframe
发表于 2020-12-15 10:26 | 显示全部楼层
能谈到代码布局可能就不是初级水平了,可以去看看一些热门的框架  比如MVCVM 有点学习成本 但很灵活 框架没有万能的 每个游戏结构可能不一样 一般都是根据项目自行设计  以易用易维护为准
发表于 2020-12-15 10:35 | 显示全部楼层
1、unity组件式开发的思想(有点像View + ViewModel)
2、数据驱动,事件驱动
3、使用MVC等结构,View和逻辑分离(这个太重要了)
4、用状态机管理复杂逻辑,当普通状态机不够用时,可以考虑更复杂的多层次状态机或行为树。
5、不要挂太多脚本,脚本之间的生命周期回调先后很难控制,所以个人觉得还是挂一个脚本驱动游戏(可能是以前写游戏的时候习惯了),当然unity的组件式开发思想也是很好的,每个组件做单一的事情,只是负责驱动整个游戏的不要挂太多的脚本。
6、游戏中的各个配置表要程序来设计和建立,参考数据库设计(如果策划设计数据表真的后期没法活了……)
7、消息机制
9、命名规范和资源文件管理
8、还有就是编程上要注意的问题了……
发表于 2020-12-15 10:44 | 显示全部楼层
游戏客户端开发,我个人用不同的引擎,基本上会沿用一套代码组织结构。最终目标是达到代码重用,减少代码量,降低复杂度&BUG,使游戏维护&后期扩展更简单,减少无谓加班,做快乐的程序员。结构清晰,降低耦合度,不用复杂的实现技巧等,这些都是为了实现重用这个目标的手段。
App, 是直接放在Assets/Script下面的,有一个Main : SingletonBehaviour<Main>, 作为客户端进程的脚本入口。其他每个框(UI, View...)都做成DLL,避免模块之间相互乱调。
UI  
        这个目录就放各个系统的UI代码。
View
        管理相机 & 场景 & 各种游戏中的实体(主角,怪物,陷阱,掉落道具...)的显示。
LogicFight & Logic
       逻辑代码。
这里强调一下,UI/View只处理显示相关的事情;逻辑功能,运行时数据处理,和服务器的消息交互都交给LogicFight/Logic。


扩展一个题外话,把UI/View砍掉后,就是服务器结构了,由于服务器逻辑比客户端复杂很多,Logic又细分成更多的模块。
大家对比一下。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-22 23:41 , Processed in 0.103342 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表