独立日记 2015年12月23日 day2 小练习

来源:互联网 发布:马克思经济 知乎 编辑:程序博客网 时间:2024/05/14 21:04

时间过得好快。 记下今天流水账:
  11:00 起床(比昨天早);
  14:00 ~ 20:00 重构手头一款项目;
  21:30 ~ 22:30 出去散步;
  22:30 ~ 23:00 画画;


今天的Unity的学习总结:

  为了重构手头的一款项目,翻出来当时未接触Unity候收藏的视频《Unity项目架构设计与开发管理》,对于我这种初学者来说全是干货。简单的总结了一下,以后慢慢提炼。

关于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分成PrefabPool和PoolManager。
  PrefabPool负责Prefab的加载和卸载。
  PoolManager与之前的PoolMananger功能一样,负责GameObject的Spawn、Despawn和Trim。
要注意的是:
  (1)每个SpawnPool是EmeptyGO。
  (2)每个PoolManager管理两个List (Active,Deactive)。

讲了一堆,最后告诉有一个NB的插件叫Pool Manager- -。

*LevelManager:    关卡管理。
推荐插件:MadLevelManager。

GameManager:    游戏管理。

C#程序员整理的Unity 3D笔记(十二):Unity3D之单体模式实现GameManager 

*SaveManager:    配置管理。
实现Resume,功能玩到一半数据临时存储。
推荐SaveManager插件。可以Load、Save均采用二进制(快!!!)
所有C#类型都可以做Serialize。
数据混淆,截屏操作。
MenuManager    菜单管理。

4.将View和Model之间增加一个媒介层。

MVCS:StrangeIOC插件。

MVVM:uFrame插件。

《Game Design Workshop》读书笔记:

 之前看的英文第三版,看了好几天的东西,今天下了个中文第一版,看一会全跟上来了,还是先看中文版的吧。
  (1)设计师要通过玩家的眼睛看世界,不要陷在画面、故事情节、游戏的特性中。整体性才是设计师要关注的。玩家玩你的游戏玩得过瘾才能玩很长时间。
  (2)游戏的测试很重要,超级重要!,要从头测到尾,多倾听,适当妥协保证团队有效沟通,美术考虑美术,程序考虑程序,制作人考虑预算,设计师负责提高游戏体验。

练习1.1 成为一名测试者。

写得有点仓促,最后附上我晚上画的小作品

微信公众号:QWERTeam

0 0
原创粉丝点击