用的PureMvc设计模式
GlobalGenerator上挂的脚本
GameManager物体下挂
GlobalGenerator全局生成器
public class GlobalGenerator : MonoBehaviour
{
void Awake() {
InitGameMangager();
}
/// <summary>
/// 实例化游戏管理器
/// </summary>
public void InitGameMangager() {
string name = "GameManager";
gameObject.AddComponent<AppView>();
GameObject manager = GameObject.Find(name);
if (manager == null) {
manager = new GameObject(name);
manager.name = name;
//添加上了各种管理类
AppFacade.Instance.StartUp(); //启动MVC框架
}
}
}
AppFacade类
override protected void InitializeController()
{
base.InitializeController();
//从括号中的类中添加的各种管理类
RegisterCommand(NotiConst.START_UP, typeof(StartUpCommand));//注册监听消息
}
/// <summary>
/// 启动框架
/// </summary>
public void StartUp() {
SendNotification(NotiConst.START_UP);//发消息出去
RemoveMultiCommand(NotiConst.START_UP);
}
StartUpCommand类
public class StartUpCommand : MacroCommand {
protected override void InitializeMacroCommand() {
base.InitializeMacroCommand();
if (!Util.CheckEnvironment()) return;
//数据层的,用来网络交互的
AddSubCommand(typeof(BootstrapModels));
//添加管理层的
AddSubCommand(typeof(BootstrapCommands));
//添加view脚本,用来更新界面的
AddSubCommand(typeof(BootstrapViewMediators));
}
}
BootstrapCommands类
public override void Execute(INotification notification)
{
//-----------------关联命令-----------------------
Facade.RegisterCommand(NotiConst.DISPATCH_MESSAGE, typeof(SocketCommand));
//-----------------初始化管理器-----------------------
Facade.AddManager(ManagerName.Lua, new LuaScriptMgr());
Facade.AddManager<PanelManager>(ManagerName.Panel);
Facade.AddManager<MusicManager>(ManagerName.Music);
Facade.AddManager<TimerManager>(ManagerName.Timer);
Facade.AddManager<NetworkManager>(ManagerName.Network);
Facade.AddManager<ResourceManager>(ManagerName.Resource);
Facade.AddManager<ThreadManager>(ManagerName.Thread);
Facade.AddManager<GameManager>(ManagerName.Game);
Debug.Log("SimpleFramework StartUp-------->>>>>");
}
Facade类
static GameObject m_GameManager;
static Dictionary<string, object> m_Managers = new Dictionary<string, object>();
GameObject AppGameManager {
get {
if (m_GameManager == null) {
m_GameManager = GameObject.Find("GameManager");
}
return m_GameManager;
}
}
// 添加管理器
public void AddManager(string typeName, object obj)
{
if (!m_Managers.ContainsKey(typeName)) {
m_Managers.Add(typeName, obj);
}
}
// 添加Unity对象
public T AddManager<T>(string typeName) where T : Component {
object result = null;
m_Managers.TryGetValue(typeName, out result);
if (result != null) {
return (T)result;
}
Component c = AppGameManager.AddComponent<T>();
m_Managers.Add(typeName, c);
return default(T);
}
// 获取系统管理器
public T GetManager<T>(string typeName) where T : class {
if (!m_Managers.ContainsKey(typeName)) {
return default(T);
}
object manager = null;
m_Managers.TryGetValue(typeName, out manager);
return (T)manager;
}
/// <summary>
/// 删除管理器
/// </summary>
/// <param name="typeName"></param>
public void RemoveManager(string typeName)
{
if (!m_Managers.ContainsKey(typeName)) {
return;
}
object manager = null;
m_Managers.TryGetValue(typeName, out manager);
Type type = manager.GetType();
if (type.IsSubclassOf(typeof(MonoBehaviour)))
{
GameObject.Destroy((Component)manager);
}
m_Managers.Remove(typeName);
}
/// <summary>
/// 对游戏进行初始化
/// </summary>
public void OnResourceInited()
{
LuaManager.Start();
//加载网络
LuaManager.DoFile("Logic/Network");
//加载游戏
LuaManager.DoFile("Logic/GameManager");
initialize = true;
NetManager.OnInit(); //初始化网络
object[] panels = CallMethod("LuaScriptPanel");
//---------------------Lua面板---------------------------
foreach (object o in panels)
{
string name = o.ToString().Trim();
if (string.IsNullOrEmpty(name)) continue;
name += "Panel"; //添加
LuaManager.DoFile("View/" + name);
Debug.LogWarning("LoadLua---->>>>" + name + ".lua");
}
//------------------------------------------------------------
CallMethod("OnInitOK"); //初始化完成
}
LuaManager.DoFile("Logic/Network");
LuaScriptMgr类,启动的时候把所有的Lua脚本添加到字典中
public object[] DoFile(string fileName)
{
if (!fileList.Contains(fileName))
{
return lua.DoFile(fileName, null);
}
return null;
}
LS中新建we文件夹为工程下的Lua名,然后再添加现有Lua文件
GameManager类继承自LuaBehaciour类
LuaBehaciour类中
protected object[] CallMethod(string func, params object[] args) {
if (!initialize) return null;
return Util.CallMethod(name, func, args);
}
public static object[] CallMethod(string module, string func, params object[] args) {
LuaScriptMgr luaMgr = AppFacade.Instance.GetManager<LuaScriptMgr>(ManagerName.Lua);
if (luaMgr == null) return null;
string funcName = module + "." + func;
funcName = funcName.Replace("(Clone)", "");
return luaMgr.CallLuaFunction(funcName, args);
}