SRPG游戏开发(六十四)间章 第十一点五章 总结(Summary)

版权声明:本文为博主原创文章,未经允许不得转载。 https://blog.csdn.net/darkrabbit/article/details/88122407

返回《SRPG游戏开发》导航

间章 第十一点五章 总结(Summary)

这一章,是对第十章与第十一章的一个补充性质的文章。



一 说明(Description)

我们的游戏在程序方面可以说已经完成大部分,剩余部分并不是特别的多。

第十章与第十一章所描述的内容,是我们整个游戏的核心:

  • 游戏导演(GameDirector)可以说是游戏的总控;

  • 剧本动作(ScenarioAction)与地图动作(MapAction)分别对应了剧本控制于地图控制。

同时,消息中心(MessageCenter)使用的及少,你需要权衡它们的利弊(不限于耦合性):有相当一部分内容(包含但不限于各种委托和事件等)可以替换成MessageCenter控制。


二 未完成部分(Unfinished Part)

我们的游戏剩余未完成的部分:

  • 音频:包含游戏各种音乐与音效;

  • 读取保存:读取或保存游戏进度;

  • UI:角色状态UI、地图中光标显示网格信息UI、商店UI、储存区UI等等;

  • 技能:包含物品含有的技能等;

  • 其它:包含AI等等。

这些内容网络上有许多教程可供参考,在之后的章节中,有一些内容将不再说明,另外一些内容我们将进行完善它们。


三 游戏入口(Game Main)

我们在游戏开始时,应该对游戏的一些内容进行初始化,并且添加一些必要场景:

  • InitScene:初始化游戏;

  • StartScene:游戏首个场景,包含主菜单UI;

  • 过场场景:InterludeScene是目前我们唯一的过场场景;

  • 关卡场景:Stage0Scene是目前我们唯一的战斗地图场景;

过场场景与关卡场景是有许多个的。过场场景将由ScenarioAction控制;而关卡场景将由MapAction控制。

我们的游戏入口(GameMain.cs),在这里将它完善:

#region ---------- File Info ----------
/// **********************************************************************
/// Copyright (C) 2019 DarkRabbit(ZhangHan)
///
/// File Name:				GameMain.cs
/// Author:					DarkRabbit
/// Create Time:			Mon, 14 Jan 2019 06:51:15 GMT
/// Modifier:
/// Module Description:
/// Version:				V1.0.0
/// **********************************************************************
#endregion ---------- File Info ----------

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

namespace DR.Book.SRPG_Dev
{
    using DR.Book.SRPG_Dev.Framework;
    using DR.Book.SRPG_Dev.Models;
    using DR.Book.SRPG_Dev.UI;
    using DR.Book.SRPG_Dev.ScriptManagement;


    public class GameMain : ApplicationEntry<GameMain>
    {
        [SerializeField]
        private string m_StartScene = "StartScene";

        public string startScene
        {
            get { return m_StartScene; }
            set { m_StartScene = value; }
        }

        private IEnumerator Start()
        {
            Scene scene = SceneManager.GetActiveScene();
            if (scene.name != "InitScene")
            {
                yield break;
            }

            ConfigLoader.rootDirectory = Application.streamingAssetsPath + "/Config";
            UIManager.prefabDirectory = ResourcesManager.uiPrefabDirectory;

            ConfigLoader.LoadConfig(new Type[]
            {
                typeof(MoveConsumptionInfoConfig),
                typeof(ClassInfoConfig),
                typeof(CharacterInfoConfig),

                typeof(ItemInfoConfig),
                typeof(TextInfoConfig)
            });

            yield return null;

            LoadScene(startScene, LoadSceneMode.Single);
        }

        protected override IEnumerator OnSceneLoaded(Scene scene, LoadSceneMode mode)
        {
            yield return null;

            if (scene.name == startScene)
            {
                if (!GameDirector.needCreated)
                {
                    GameDirector.instance.StopGameAction();
                    GameDirector.instance.StopAllCoroutines();
                }

                UIManager.views.CloseViewsAll(false);
                yield return null;
                UIManager.views.OpenView<UIMainPanel>(UINames.k_UIMainPanel);
            }

            yield return base.OnSceneLoaded(scene, mode);
        }
    }
}

InitScene中,我们存在的物体:

InitScene Hierarchy

  • 图 11-5.1 InitScene Hierarchy

GameMain中,我们将设置各种初始化组件:

Game Main

  • 图 11-5.2 GameMain

至此,我们可以不再使用TestScene进行测试了,游戏也将进入正轨。


猜你喜欢

转载自blog.csdn.net/darkrabbit/article/details/88122407