首先是框架的入口,主要是对gameController的初始化
public class GameLogin : MonoBehaviour
{
private static GameLogin RunTime;
private iGameCtroller gameCtroller;
private static GameObject rootGo;
//该方法让脚本的初始在场景之前,这样脚本可不用挂载游戏物体直接执行Init
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)]
private static void Init()
{
rootGo = new GameObject("rootTree");
RunTime = rootGo.AddComponent<GameLogin>();
DontDestroyOnLoad(rootGo);
}
private void Awake()
{
gameCtroller = GameController.instance;
gameCtroller.Start();
}
void Start()
{
gameCtroller.Init();
}
void Update()
{
gameCtroller.Updata();
}
private void FixedUpdate()
{
gameCtroller.FixUpdata();
}
}
gameController这里采用了单例主要是方便使用,后期可能会被取缔
这段为gameCtoller接口主要方便后期拓展
public interface iGameCtroller {
void Start();
// void Init();
void Change(string interName,params Object[] obj);
void Updata();
void FixUpdata();
void Init();
void SetState();
}
//框架本身采用了ioc注入但是还没讲到注入代码块就不放在这里
//
public class GameController : ASingletonBase<GameController>,iGameCtroller
{
//切换切换到的流程名
string ProsName = "";
//用来判断是否切换完成(在这里我把流程理解为场景,切换场景时中介者不运行updata切换完成运行)
bool Running = false;
/// <summary>
/// 游戏场景
/// </summary>
public absIntermediaries GameInter { get; private set; }
/// <summary>
/// 这个为不可以销毁游戏物体
/// 更具游戏实际情况
/// </summary>
public absDrontIntermediares DontGameInter { get; private set; }
//gameController我使用了状态者的模式来进行流程的切换
public void Start()
{
}
public void Init(){
}
public void FixUpdata()
{
}
public void Updata()
{
}
//状态的切换,也就是流程(地图场景)切换
public void Change(string interName,params Object[] obj)
{
}
/// <summary>
/// 这里是通过回调来触发流程的切换,以及把上一流程需要保留的数据发送给Running流程
/// </summary>
/// <param name="obj"></param>
private void Enter(params Object[] obj)
{
}
//当切换一些场景时可以停止对updata的运行,切换完成继续运行
public void SetState()
{
Running = true;
}
}
//游戏运行需要实现该类
public abstract class absIntermediaries : iIntermediaries
{
public virtual void Init()
{
}
//改变流程
public void Change(string interName)
{
//可用委托代替调用
GameController.instance.Change(interName);
}
/// <summary>
/// 获取上个流程需要保存的数据
/// </summary>
/// <param name="obj"></param>
public virtual void Enter(params System.Object[] obj)
{
}
/// <summary>
/// 通过调用act,并且传入数据(下一关场景可能需要的数据)
/// </summary>
/// <param name="act"></param>
public virtual void Exit(System.Action<Object[]> act)
{
act.Invoke(null);
}
public abstract void Updata();
public abstract void FixUpdata();
}
public abstract class absDrontIntermediares : iIntermediaries
{
public virtual void FixUpdata()
{
}
public virtual void Init()
{
}
public abstract void Updata();
}
这就是框架进入代码下一篇就要正式
框架现有有基础形状有兴趣的小伙伴可以了解一些
https://github.com/wu-qian-qian/wqqFrm
框架学习于https://github.com/DSHGFHDS/Cirilla
一些理解可能存在问题,欢迎指正。如有不理解可以留言。