SRPG游戏开发(十九)第六章 基本框架 - 四 程序入口(Application Entry)

返回总目录

第六章 基本框架(Framework)



四 程序入口(Application Entry)

游戏入口,一般来说,作用有初始化游戏和一些游戏配置属性。

在这里,我们的游戏入口类,也是同样的作用。

但我们同时将场景的操作也写入其中,作为SceneManager的扩展。


1 了解场景管理器(SceneManager)

Unity管理场景的API都在SceneManager中,它在UnityEngine.SceneManagement命名空间中。

说到场景的管理,主要功能就是加载场景,卸载场景与改变场景。

同时还能从SceneManager中获取场景信息,场景信息类型为Scene

常用方法(Method)如下:
- GetActiveScene,获取当前激活场景。
- LoadScene,卸载所有场景后,加载场景。
- LoadSceneAsync,卸载所有场景后,异步加载场景。
- UnloadSceneAsync,当加载的场景多余1个时,异步卸载场景。
- SetActiveScene,当加载的场景多余1个时,改变当前激活场景。

常用事件(Events)如下:
- activeSceneChanged,当前激活场景发生改变时触发。
- sceneLoaded,场景加载完成事件。
- sceneUnloaded,场景卸载完成事件。

我们要做的主要工作是在入口中,执行这些操作时,利用MessageCenter发送相应事件。


2 事件参数(Event Args)

MessageCenter发送事件时,我们需要场景信息作为参数。

MessageCenter所需参数如下:
- OnActiveSceneChangedArgs,激活场景改变时,事件参数。
- OnSceneLoadedArgs,场景加载完成时,事件参数。
- OnSceneUnloadedArgs,场景卸载完成时,事件参数。
- OnLoadSceneArgs,加载场景之前,事件参数。

其中,OnLoadSceneArgsSceneManager中没有对应事件,这是我们自己添加的。
其他事件参数与SceneManager中对应事件参数是相同的。

这些事件与扩展,按需添加,并不一定全部要添加。

2.1 OnActiveSceneChangedArgs.cs
using UnityEngine.SceneManagement;

namespace DR.Book.SRPG_Dev.Framework
{
    public class OnActiveSceneChangedArgs : MessageArgs
    {
        public Scene scene1;
        public Scene scene2;
    }
}
2.2 OnSceneLoadedArgs.cs
using UnityEngine.SceneManagement;

namespace DR.Book.SRPG_Dev.Framework
{
    public class OnSceneLoadedArgs : MessageArgs
    {
        public Scene scene;
        public LoadSceneMode mode;
    }
}
2.3 OnSceneUnloadedArgs.cs
using UnityEngine.SceneManagement;

namespace DR.Book.SRPG_Dev.Framework
{
    public class OnSceneUnloadedArgs : MessageArgs
    {
        public Scene scene;
    }
}
2.4 OnLoadSceneArgs.cs

在加载场景时,Unity提供两种方式——buildIndexsceneName
如果在项目中混用,我们需要知道是使用了哪种类型。

LoadSceneType.cs:

namespace DR.Book.SRPG_Dev.Framework
{
   
    public enum LoadSceneType
    {
        BuildIndex,
        SceneName
    }
}

OnLoadSceneArgs.cs:

using UnityEngine.SceneManagement;

namespace DR.Book.SRPG_Dev.Framework
{
    public class OnLoadSceneArgs : MessageArgs
    {
        public Scene activeScene; // 当前Scene
        public int buildIndex; // 使用BuildIndex读取Scene
        public string sceneName; // 使用SceneName读取Scene
        public LoadSceneType type; // 使用BuildIndex或者SceneName
        public LoadSceneMode mode; // 加载方式
        public bool async; // 是否异步加载
    }
}

3 程序入口基类(ApplicationEntry.cs)

到这里,我们就可以创建我们的游戏入口了。
游戏入口在整个游戏中只有一个,必然是个单例,所以我们让它继承UnitySingleton
这样游戏入口成为了一个MonoBehaviour,在游戏最初的场景(初始化场景)中,我们将它挂载在场景的物体上。

namespace DR.Book.SRPG_Dev.Framework
{
    public abstract class ApplicationEntry<T> : UnitySingleton<T> where T : ApplicationEntry<T>
    {
        // TODO
    }
}
3.1 事件(Event)

首先,事件需要事件名称与参数,而这些事件由于只在入口中发送,所以我们建立静态参数。

        public const string k_Event_OnActiveSceneChanged = "Event_OnActiveSceneChanged";
        public const string k_Event_OnSceneLoaded = 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值