查看: 2222|回复: 1
打印 上一主题 下一主题

[教程] 3d素材Unity 游戏框架搭建 (一) 概述

[复制链接]

25

主题

1

听众

314

积分

设计实习生

Rank: 2

纳金币
48
精华
0
跳转到指定楼层
楼主
发表于 2016-8-19 18:38:27 |只看该作者 |倒序浏览
首先感谢作者凉鞋的笔记的分享,希望大家对3d素材unity有更多的了解!
为了重构手头的一款项目,翻出来当时未3d素材Unity时候收藏的视频3d素材Unity项目架构设计与开发管理》,对于我这种初学者来说全是干货。简单的总结了一下,以后慢慢提炼。
3d素材Unity的架构有如下几种常用的方式。
1.EmptyGO:
  在Hierarchy上创建一个空的GameObject,然后挂上所有与GameObject无关的逻辑控制的脚本。使用GameObject.Find()访问对象数据。 缺点:逻辑代码散落在各处,不适合大型项目。
2.Simple GameManager:
  所有与GameObject无关的逻辑都放在一个单例中。
缺点:单一文件过于庞大。
3.Manager Of Managers:
  将不同的功能单独管理。如下:
MainManager: 作为入口管理器。
EventManager: 消息管理。
GUIManager: 图形视图管理。
AudioManager: 音效管理。
*PoolManager: go管理(减少动态开辟内存消耗,减少GC)
实现一个简单的PoolManager
// 存储动可服用的GameObject
private List<GameObject> dormantObjects = new List<GameObject>();  
// dormantObjects获取与go类型相同的GameObject,如果没有则new一个。
public GameObject Spawn(GameObject go)  
{
     GameObject temp = null;
     if (dormantObjects.Count > 0)
     {
          foreach (GameObject dob in dormantObjects)
          {
               if (dob.name == go.name)
               {
                    // Find an available GameObject
                    temp = dob;
                    dormantObjects.Remove(temp);
                    return temp;
               }
          }
     }
     // Now Instantiate a new GameObject.
     temp = GameObject.Instantialte(go) as GameObject;
     temp.name = go.name;
     return temp;
}
// 将用完的GameObject放入dormantObjects
public void Despawn(GameObject go)  
{
     go.transform.parent = PoolManager.transform;
     go.SetActive(false);
     dormantObject.Add(go);
     Trim();
}
//FIFO 如果dormantObjects大于最大个数则将之前的GameObject都推出来。
public void Trim()  
{
     while (dormantObjects.Count > Capacity)
     {
          GameObject dob = dormantObjects[0];
          dormantObjects.RemoveAt(0);
          Destroy(dob);
     }
}
缺点:
  (1)不能管理prefabs
  (2)没有进行分类。
更好的实现方式是将一个PoolManager分成:
  若干个 SpawnPool
  每个SpawnPool分成PrefabPoolPoolManager
  PrefabPool负责Prefab的加载和卸载。
  PoolManager与之前的PoolMananger功能一样,负责GameObjectSpawnDespawnTrim
要注意的是:
  (1)每个SpawnPoolEmeptyGO
  (2)每个PoolManager管理两个List (Active,Deactive)
讲了一堆,最后告诉有一个NB的插件叫Pool Manager- -
*LevelManager: 关卡管理。
推荐插件:MadLevelManager
GameManager: 游戏管理。
  C#程序员整理的3d素材Unity 3D笔记(十二):3d素材Unity3D之单体模式实现GameManager
*SaveManager: 配置管理。
  实现Resume,功能玩到一半数据临时存储。
  推荐SaveManager插件。可以LoadSave均采用二进制(!!!)
  所有C#类型都可以做Serialize
  数据混淆,截屏操作。
MenuManager 菜单管理。
4.ViewModel之间增加一个媒介层。
MVCS:StrangeIOC插件。
MVVM:uFrame插件。
看完了这篇分享,是不是对3d素材unity游戏搭建有一定的了解了呢,如果能给您带来一些帮助,汇宝盆万分荣幸!更多精彩可以进群讨论分享纳金网汇宝盆交流⑤群 341024464。
本文转载自网络,谢谢作者分享。

本帖被以下淘专辑推荐:

  • · 教程|主题: 5, 订阅: 1
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖1 收藏收藏1 支持支持0 反对反对0
回复

使用道具 举报

0

主题

1

听众

74

积分

设计初学者

Rank: 1

纳金币
17
精华
0
沙发
发表于 2016-11-7 13:38:56 |只看该作者
涨知识了~还挺不错的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

关闭

站长推荐上一条 /1 下一条

手机版|纳金网 ( 闽ICP备08008928号

GMT+8, 2024-5-5 05:00 , Processed in 0.092822 second(s), 32 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部