1.EmptyGO:
在Hierarchy上创建一个空的GameObject,然后挂上所有和GameObject(游戏物体)无关的逻辑控制脚本,使用GameObject.Find("")查找访问,
缺点:逻辑混乱,代码四散,不适合大型游戏
2.Simple GameManager:
所有与GameObject无关的逻辑都放在一个单例中。
缺点:单一文件过于庞大。
3.Manager Of Managers
1.EventManager //处理游戏中的消息机制,模块之间的消息访问和传递
2.AudioManager //在场景中任何一个地方播放音频时,来访问和管理
3.GUImanager //管理UI点击,UI相关的管理
4.PoolManager //
5.LevelManager //游戏中管卡之间的管理
6.GameManager //唯一一个每个游戏中都是不一样的管理器
7.SaveManager //保存一些配置,或者保存一些此时游戏的数据
8.MenuManager //管理外观上的一些东西,比如动画,不要和GUImanager混合在一起
4.LevelManager ()
缺点:关卡多时,没法处理,无论时根据index或者场景名字,最好自己写个配置表,重写LeveIManager.LodeNext()
不用关系上一个或者下一关卡时什么,没每一个关卡加一个参数,对每一个关卡进行区分
MadLevelManager。
关卡切换之间的进度或者溶解
5.PoolManager
登录后复制
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);
}
}
缺点:
此对象池没有对Prefabs进行管理,需要在外部自己Lode和UnLode的管理
没用的物件在池子里,那正在用的有可能也是很多,怎么管理呢?
更好的实现方式是将一个PoolManager分成:
若干个 SpawnPool(管理一类)。
每类SpawnPool分成PrefabPool。
PrefabPool只负责一个Prefab的加载和卸载。还管理此prefab 生成的新的实例。
PoolManager与之前的PoolMananger功能一样,负责GameObject的Spawn、Despawn和Trim。
缓式操作:每一帧不要突然删掉太多(npc)
6.SaveManager
推荐SaveManager插件。二进制保存的,Load、Save均采用二进制(快!!!),抓屏操作
游戏退出后,实现Resume,功能玩到一半数据临时存储。
7.互联网上比较火的一个架构
MVCS:StrangeIOC插件。 ui和逻辑分离
优点:
实现UI的click事件和逻辑的剥离开,UI一定要和逻辑分开(中介者模式)
特效和逻辑分离:Bind思想
IBinder.Bind<key>().To<value>().ToName(name);当两个key一样时,再根据名字来区分两个key
event-->回掉
interface-->实现 //绑定一个培生的实例,绑定一个刀或者剑。
class-->
Ui event
UI事件(可视化)通过Mediator来把逻辑分离,如图
mediation.Binder.Bind<ExampleView>().To<ExampleMeditor>();
绑定操作:
绑定操作的缺点:
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删