版权声明:本文为博主原创文章,未经允许不得转载。 https://blog.csdn.net/darkrabbit/article/details/88122407
间章 第十一点五章 总结(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
中,我们存在的物体:
- 图 11-5.1 InitScene Hierarchy
在GameMain
中,我们将设置各种初始化组件:
- 图 11-5.2 GameMain
至此,我们可以不再使用TestScene
进行测试了,游戏也将进入正轨。