美文网首页unity3d
Unity手游项目架构设计与开发管理

Unity手游项目架构设计与开发管理

作者: 罗卡恩 | 来源:发表于2019-04-25 08:15 被阅读62次

https://www.bilibili.com/video/av30482033?from=search&seid=14081717784937497017
本文为视频的记录知识点 因为视频只有左声道听起来很蛋疼 而且都是英文自己看理解翻译 方便以后回顾

Unity架构设计的流派

EmptyGO
Simple GameManager
Manger of Managers
MVCS(StrageloC)
MVVM(uFrame)
....

EmptyGO

是一个框架的雏形
1.Put all the code without visual representation in the world
onto an empty game pbject
在一个空的游戏对象上挂 类似于一个脚本管理所有东西

2.Use GameObject.Find() or inspector target references to communicate with each other
使用gameobject.find()或inspector目标引用(就是public拖进来)相互沟通
一旦有预制体 UI界面然后东西变多后控制逻辑也不方便管理

Simple GameManager

最简单最常用的架构方法
1.Make the EmptyGO as a Singleton
在之前基础上用单例类管理所有东西

GameManager.Instance.palySound("GunShot")

2.Good and appropriate for small projects
适合小型项目

3.Its not plug-and-play
它不是放上就用的 有管理者调度

Manger of Managers

现在改为一堆Manager管理


image.png

1.MainManager customizes and managers all the submanagers
由一个MainManager管理其他整个子Manager

2.Submanagers operate as singletons and can easily address each other to collaborate
子Manager单独运行,可以很方便的互相联系协作 相当于解耦合

最好游戏项目有
GameManager
EventManager
MenuManager
GUI Manager
Audio Manager

  • EventManager
    WHY LEVEL MANAGER?
    为什么要有场景管理
    官方有
    using UnityEngine.SceneManagement;
    SceneManager.LoadScene(场景索引号);同步加载
    SceneManager.LoadSceneAsync(场景索引号); 异步加载


    image.png

    这是老方法
    lssue 1:you need to know the scene name or the index of the scene you want to load,but most probably the name or order will be changed later
    问题1 要根据 名字和Index加载场景 你之后改名字或者顺序变一下就完蛋了

lssue 2:there's no simple method of passing arguments to a scene,e.g.,assuming you're reusing one scene for many different levels.
问题2 没有简单的方法可以将参数传递给场景,例如,几个场景差不多想公用一个场景 只是传入参数不同

lssue 3:managing multiple level work flows is not a simple task,suppose you want to create two versions of your game:demo and the full version
管理多层次的工作流程不是一个简单的任务,假设您想要创建游戏的两个版本:演示版和完整版
Compose aconfiguration table
组成配置表
Create a new API:
然后写一个新的API


image.png

在管理类中调整循序 我们只用加载下一个场景就行了

In the configuration table, It also should be allowed to set an argument line for each level
在配置表中,还应给每个场景设置参数。
Then this argument line can be easily accessed later
那么这个参数行以后可以很容易地访问
之后用配置表进行加载
It should be allowed to create multiple configuration tables,and before building your application switch between them.
应该允许创建多个配置表,并在构建应用程序之前在它们之间switch切换。
In that way you can quickly create two different versions of your game
这样你就可以快速创建两个不同版本的游戏
More...
With a Level Manager , you can also manager the transitions between two levels easily:
transparency
color
animation
使用场景管理器,您还可以轻松管理两个场景之间的转换加上特效:
透明
颜色
动画

  • Pool Manager
    一个简单的Pool设计


    image.png

比如东西用过一次放在List之后用了就拿出来
有了拿出来 没有创建


image.png

用完不要扔放在对象池里失活掉


image.png
设置一个池子上限 如果超了就先进先出销毁掉
image.png
这样可以在频繁创建销毁节省不必要的性能损耗

问题
当我们用预制体要加载 在外部需要Load 所以我们要在外部加一个加载管理
然后池子外面的东西管理需要在外面的类自己代码管理
那么失活激活是不是可以放在一起管理
针对每一种Prefab分别管理


image.png

PoolManager总池
SpawnPool管理一类的物体(NPC 打怪掉的东西)
PrefabPool单独每一个物体的PrefabPool(只放一个Prefab)

最好把PoolManager设计为单例类
然后每一个SpawnPool就是EmptyGO设计模式 一个节点下面放激活失活的对象 然后用字典管理
可以用两个List分别管理激活和失活
可以管理Prefab加载和卸载

比如子弹,特效产生多的物体 设置一个上限 如果上限了就停止产生 或者用之前的把前面的推出去新生成的压进来

如果是NPC这些很麻烦的时候 等超过多久确认没人用就销毁掉 每次删掉的数量严格控制 按每帧删除几个这样 一般一帧删3个5个 防止突然删除卡掉

  • Save Manager
    退出时加载存储
    推荐EASY SAVE插件。可以Load、Save均采用二进制(速度快)
    还能做一些简单的加密操作

MVCS(StrageloC)

image.png

之前有项目UI点击事件使用访问一堆单例
游戏复杂UI改一点就要大量去改
把UI和逻辑分离开


image.png

一个人有这么多技能 用了就Play
万一策划要之后改名字 就很尴尬
把技能分离出来 技能就一个代码

最简单的关键 把两个不同的东西Bind根据Key起来
Key一样的话就在根据Name区分


image.png

整体功能分为
事件回调
根据binds实现接口功能
一个类的实例化后触发其依赖类的实例化


image.png
image.png
这个就是一个MVC思想多了个管理
image.png
image.png

核心代码进行绑定实现


image.png
image.png
绑定和监听者
这是之间技能之间切换
image.png
坏处 这套机制依赖于反射 比较耗时间

MVVM(uFrame)

有编辑器界面 图形化 前面的只是个插件


image.png

总结

如果是刚毕业的学生、新手比较多 用框架可能会影响开发效率
如果是资深的话 用框架就事半功倍
不用复杂框架的话最好用EvenetManager 把UI和控制代码分离开

好的项目规则

用C# 不要用JS

命名起有含义的名字

起文件夹尽量要和Manager对应起来

0容忍1对警告和报红 警告到最后可能会内存泄露

不要动态开辟内存 一个数组开20个就20个不要动态最后不够用再添加(加载资源Load没办法) 不然会到最后越来越卡

少GetComponent Find.GameObject 很慢的操作

美术资源要合理

Unity也有免费的框架


image.png

有相关的事件 就是个测试用捕捉异常的插件

做项目要不要单纯做一个项目 写完就完了 把代码写完要有一个传递下去的思想

相关文章

网友评论

    本文标题:Unity手游项目架构设计与开发管理

    本文链接:https://www.haomeiwen.com/subject/yaowgqtx.html