Merge branch 'bugfix/章节加载顺序错乱' into 'develop'
fix: 修复章节加载顺序错乱问题 See merge request aibis-dream/aibis-dream!705
This commit is contained in:
@@ -11,7 +11,6 @@ namespace AibisDream.SystemEditor
|
||||
serializedObject.Update();
|
||||
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("exits"), true);
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("displayOrder"));
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("yarnProject"));
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("firstSceneName"));
|
||||
|
||||
|
||||
@@ -16,7 +16,6 @@ MonoBehaviour:
|
||||
exits:
|
||||
- exitName: default
|
||||
targetScene: {fileID: 11400000, guid: aaef579ad8bdda542b503b40ce6773a8, type: 2}
|
||||
displayOrder: 0
|
||||
yarnProject: {fileID: 7545569452688597077, guid: 640f90d7758f6524f8735352da531604, type: 3}
|
||||
firstSceneName: Scene/ClinicOut
|
||||
title:
|
||||
|
||||
@@ -16,7 +16,6 @@ MonoBehaviour:
|
||||
exits:
|
||||
- exitName: default
|
||||
targetScene: {fileID: 11400000, guid: ff82a99e791be3e41acf40232f908eb3, type: 2}
|
||||
displayOrder: 0
|
||||
yarnProject: {fileID: 7545569452688597077, guid: 640f90d7758f6524f8735352da531604, type: 3}
|
||||
firstSceneName: Scene/ClinicOut
|
||||
title:
|
||||
|
||||
@@ -16,7 +16,6 @@ MonoBehaviour:
|
||||
exits:
|
||||
- exitName: default
|
||||
targetScene: {fileID: 11400000, guid: 362a7dfb573114247a33c0e290b698eb, type: 2}
|
||||
displayOrder: 0
|
||||
yarnProject: {fileID: 7545569452688597077, guid: fceb65c69f946c740992b742bc01a6a2, type: 3}
|
||||
firstSceneName: Scene/ClinicOut
|
||||
title:
|
||||
|
||||
@@ -16,7 +16,6 @@ MonoBehaviour:
|
||||
exits:
|
||||
- exitName: default
|
||||
targetScene: {fileID: 11400000, guid: 8d8b11f0c2fbc4d4cb8c2857d98383c9, type: 2}
|
||||
displayOrder: 0
|
||||
yarnProject: {fileID: 7545569452688597077, guid: dc075ea1c729cec4484634a00ebb03a4, type: 3}
|
||||
firstSceneName: Scene/HuoShanFixScene
|
||||
title:
|
||||
|
||||
@@ -16,7 +16,6 @@ MonoBehaviour:
|
||||
exits:
|
||||
- exitName: default
|
||||
targetScene: {fileID: 11400000, guid: 172e1298764e87a4b9ed51264b908ba9, type: 2}
|
||||
displayOrder: 0
|
||||
yarnProject: {fileID: 7545569452688597077, guid: 31109973cccc10642a3bc09bc70f47d3, type: 3}
|
||||
firstSceneName: Scene/PeipeiFixScene
|
||||
title: "10\u5E74\u524D"
|
||||
|
||||
@@ -16,7 +16,6 @@ MonoBehaviour:
|
||||
exits:
|
||||
- exitName: default
|
||||
targetScene: {fileID: 11400000, guid: 68a9c1b8c5230454bb9498fd2ab5714b, type: 2}
|
||||
displayOrder: 0
|
||||
yarnProject: {fileID: 7545569452688597077, guid: 26fc6619bbcda734a81361b8bb615f04, type: 3}
|
||||
firstSceneName: Scene/PeipeiFixScene
|
||||
title: "\u4F69\u4F69"
|
||||
|
||||
@@ -16,7 +16,6 @@ MonoBehaviour:
|
||||
exits:
|
||||
- exitName: default
|
||||
targetScene: {fileID: 11400000, guid: afc5b01ef301cc74db7cae741acad427, type: 2}
|
||||
displayOrder: 0
|
||||
yarnProject: {fileID: 7545569452688597077, guid: 247e2ccd847942843bb87841bb9888c5, type: 3}
|
||||
firstSceneName: Scene/PeipeiFixScene
|
||||
title:
|
||||
|
||||
@@ -16,7 +16,6 @@ MonoBehaviour:
|
||||
exits:
|
||||
- exitName: default
|
||||
targetScene: {fileID: 11400000, guid: e749fe0f9aa32f44097e037f52a5bfe0, type: 2}
|
||||
displayOrder: 0
|
||||
yarnProject: {fileID: 7545569452688597077, guid: 05ccf66391562af43835d718ca36f508, type: 3}
|
||||
firstSceneName: Scene/PeipeiFixScene
|
||||
title:
|
||||
|
||||
@@ -16,7 +16,6 @@ MonoBehaviour:
|
||||
exits:
|
||||
- exitName: default
|
||||
targetScene: {fileID: 11400000, guid: 2f763a2c04ecafb4981379b7363f9791, type: 2}
|
||||
displayOrder: 0
|
||||
yarnProject: {fileID: 7545569452688597077, guid: ab71ff7b298372f48a262ad5b949c395, type: 3}
|
||||
firstSceneName: Scene/OpenFixScene
|
||||
title:
|
||||
|
||||
@@ -16,7 +16,6 @@ MonoBehaviour:
|
||||
exits:
|
||||
- exitName: default
|
||||
targetScene: {fileID: 11400000, guid: afc5b01ef301cc74db7cae741acad427, type: 2}
|
||||
displayOrder: 0
|
||||
yarnProject: {fileID: 7545569452688597077, guid: fa8082420f7bb5b4a8ab33a59c70bcc9, type: 3}
|
||||
firstSceneName: Scene/ExpressFixScene
|
||||
title:
|
||||
|
||||
@@ -16,7 +16,6 @@ MonoBehaviour:
|
||||
exits:
|
||||
- exitName: default
|
||||
targetScene: {fileID: 11400000, guid: e749fe0f9aa32f44097e037f52a5bfe0, type: 2}
|
||||
displayOrder: 0
|
||||
yarnProject: {fileID: 7545569452688597077, guid: 3bb399faf6caadd4c89f85b7aa83c388, type: 3}
|
||||
firstSceneName: Scene/YingliFixScene
|
||||
title:
|
||||
|
||||
@@ -15,7 +15,6 @@ MonoBehaviour:
|
||||
exits:
|
||||
- exitName: default
|
||||
targetScene: {fileID: 11400000, guid: ac5ca9a66ff22ab4b9cd5adbdade6b8c, type: 2}
|
||||
displayOrder: 0
|
||||
yarnProject: {fileID: 7545569452688597077, guid: 2fa76ffaa57f62244b77be9b25ca14c2, type: 3}
|
||||
firstSceneName: Scene/OpenFixScene
|
||||
title: "\u68A6"
|
||||
|
||||
@@ -15,7 +15,6 @@ MonoBehaviour:
|
||||
exits:
|
||||
- exitName: default
|
||||
targetScene: {fileID: 11400000, guid: 68a9c1b8c5230454bb9498fd2ab5714b, type: 2}
|
||||
displayOrder: 0
|
||||
yarnProject: {fileID: 7545569452688597077, guid: 26fc6619bbcda734a81361b8bb615f04, type: 3}
|
||||
firstSceneName: Scene/PeipeiFixScene
|
||||
title: "\u4F69\u4F69"
|
||||
|
||||
@@ -15,7 +15,6 @@ MonoBehaviour:
|
||||
exits:
|
||||
- exitName: default
|
||||
targetScene: {fileID: 11400000, guid: dadf07a02eb4b8d4c8bdf1739a10c9c5, type: 2}
|
||||
displayOrder: 0
|
||||
yarnProject: {fileID: 7545569452688597077, guid: 533dc422c8871c143a551bd5d446b439, type: 3}
|
||||
firstSceneName: Scene/SubWay
|
||||
title: "\u5730\u94C1\u4E0A"
|
||||
|
||||
@@ -15,7 +15,6 @@ MonoBehaviour:
|
||||
exits:
|
||||
- exitName: default
|
||||
targetScene: {fileID: 11400000, guid: ada4bdc2db5594e4f860c90b3a4b9da8, type: 2}
|
||||
displayOrder: 0
|
||||
yarnProject: {fileID: 7545569452688597077, guid: 293561ce52efc594399242651d44b366, type: 3}
|
||||
firstSceneName: Scene/ClinicOut
|
||||
title: "\u5348\u4F11"
|
||||
|
||||
@@ -15,7 +15,6 @@ MonoBehaviour:
|
||||
exits:
|
||||
- exitName: default
|
||||
targetScene: {fileID: 11400000, guid: 653fbfbb55fef7740a2360590e29d552, type: 2}
|
||||
displayOrder: 0
|
||||
yarnProject: {fileID: 7545569452688597077, guid: 29ebe788cfe2c084e88ffdd8e2f93378, type: 3}
|
||||
firstSceneName: Scene/ClinicOut
|
||||
title: "\u9152\u676F\u548C\u724C"
|
||||
|
||||
@@ -15,7 +15,6 @@ MonoBehaviour:
|
||||
exits:
|
||||
- exitName: default
|
||||
targetScene: {fileID: 11400000, guid: 172e1298764e87a4b9ed51264b908ba9, type: 2}
|
||||
displayOrder: 0
|
||||
yarnProject: {fileID: 7545569452688597077, guid: 759b6e8a16f70084e8fe77eded076218, type: 3}
|
||||
firstSceneName: "Scene/\u68A6\u5883"
|
||||
title: "\u542F\u793A"
|
||||
|
||||
@@ -15,7 +15,6 @@ MonoBehaviour:
|
||||
exits:
|
||||
- exitName: default
|
||||
targetScene: {fileID: 11400000, guid: 8d8b11f0c2fbc4d4cb8c2857d98383c9, type: 2}
|
||||
displayOrder: 0
|
||||
yarnProject: {fileID: 7545569452688597077, guid: f7d7db96cdd264f4dbb3341df5deeccc, type: 3}
|
||||
firstSceneName: Scene/HuoShanFixScene
|
||||
title: "\u706B\u5C71"
|
||||
|
||||
@@ -15,7 +15,6 @@ MonoBehaviour:
|
||||
exits:
|
||||
- exitName: default
|
||||
targetScene: {fileID: 11400000, guid: afc5b01ef301cc74db7cae741acad427, type: 2}
|
||||
displayOrder: 0
|
||||
yarnProject: {fileID: 7545569452688597077, guid: 247e2ccd847942843bb87841bb9888c5, type: 3}
|
||||
firstSceneName: Scene/PeipeiFixScene
|
||||
title: "\u505C\u6B62\u60F3\u8C61"
|
||||
|
||||
@@ -15,7 +15,6 @@ MonoBehaviour:
|
||||
exits:
|
||||
- exitName: default
|
||||
targetScene: {fileID: 11400000, guid: 0bdbd8e46fa688e49a5a670b78b6f956, type: 2}
|
||||
displayOrder: 0
|
||||
yarnProject: {fileID: 7545569452688597077, guid: 6ecfe80fd0370554db9a7ec3a173f7e3, type: 3}
|
||||
firstSceneName: Scene/SubWay
|
||||
title: "\u5730\u94C1\u4E0A"
|
||||
|
||||
@@ -15,7 +15,6 @@ MonoBehaviour:
|
||||
exits:
|
||||
- exitName: default
|
||||
targetScene: {fileID: 11400000, guid: a4dba2e2976607d45a28d4c8cade6b0a, type: 2}
|
||||
displayOrder: 0
|
||||
yarnProject: {fileID: 7545569452688597077, guid: 25f49957c68bca34bb1aeafec7feca8b, type: 3}
|
||||
firstSceneName: Scene/ClinicOut
|
||||
title: "\u7B2C\u4E8C\u5929\u4E2D\u5348"
|
||||
|
||||
@@ -15,7 +15,6 @@ MonoBehaviour:
|
||||
exits:
|
||||
- exitName: default
|
||||
targetScene: {fileID: 11400000, guid: aaef579ad8bdda542b503b40ce6773a8, type: 2}
|
||||
displayOrder: 0
|
||||
yarnProject: {fileID: 7545569452688597077, guid: ec06c945cb99fb544b1dd9a2a6ea9a7b, type: 3}
|
||||
firstSceneName: Scene/ClinicOut
|
||||
title: "\u5915\u9633"
|
||||
|
||||
@@ -15,7 +15,6 @@ MonoBehaviour:
|
||||
exits:
|
||||
- exitName: default
|
||||
targetScene: {fileID: 11400000, guid: 362a7dfb573114247a33c0e290b698eb, type: 2}
|
||||
displayOrder: 0
|
||||
yarnProject: {fileID: 7545569452688597077, guid: 62f2a99a47fc652449b846035a739529, type: 3}
|
||||
firstSceneName: "Scene/\u68A6\u5883"
|
||||
title: "\u542F\u793A"
|
||||
|
||||
@@ -13,7 +13,6 @@ MonoBehaviour:
|
||||
m_Name: GeneralEnd
|
||||
m_EditorClassIdentifier:
|
||||
exits: []
|
||||
displayOrder: 0
|
||||
yarnProject: {fileID: 7545569452688597077, guid: e6bac2644a8a04b4899ce2fe8ae1f4fc, type: 3}
|
||||
firstSceneName: Scene/Bridge
|
||||
title: "\u7ED3\u675F"
|
||||
|
||||
@@ -16,7 +16,6 @@ MonoBehaviour:
|
||||
exits:
|
||||
- exitName: default
|
||||
targetScene: {fileID: 11400000, guid: ada4bdc2db5594e4f860c90b3a4b9da8, type: 2}
|
||||
displayOrder: 0
|
||||
yarnProject: {fileID: 7545569452688597077, guid: 9c6e0818864e6964d83f946e81e32916, type: 3}
|
||||
firstSceneName: Scene/ExpressFixScene
|
||||
title:
|
||||
|
||||
@@ -16,7 +16,6 @@ MonoBehaviour:
|
||||
exits:
|
||||
- exitName: default
|
||||
targetScene: {fileID: 11400000, guid: 10601ce26230723479d875a630f15732, type: 2}
|
||||
displayOrder: 0
|
||||
yarnProject: {fileID: 7545569452688597077, guid: b81ce7d02242fc74daf531067098286f, type: 3}
|
||||
firstSceneName: Scene/ExpressFixScene
|
||||
title:
|
||||
|
||||
@@ -14,7 +14,6 @@ MonoBehaviour:
|
||||
m_EditorClassIdentifier:
|
||||
nextScene: {fileID: 0}
|
||||
exits: []
|
||||
displayOrder: 0
|
||||
yarnProject: {fileID: 7545569452688597077, guid: a2b0fa96399ebca4c9c61e346f95b037, type: 3}
|
||||
firstSceneName: Scene/Scene/ExpressFixScene
|
||||
title: "\u77F3\u5934\u7684\u5FC3"
|
||||
|
||||
@@ -24,11 +24,7 @@ namespace AibisDream
|
||||
cacheChapter = ParseChapterTitle(saveFilePath);
|
||||
}
|
||||
|
||||
// 优先从 GameManager 获取全量章节并按 displayOrder 排序
|
||||
var allChapters = GameManager.Instance?.GetAllSceneSos();
|
||||
var sourceList = allChapters != null
|
||||
? allChapters.OrderBy(so => so.displayOrder).ToList()
|
||||
: ChapterData.chapterList;
|
||||
var sourceList = GameManager.Instance.GetAllSceneSos();
|
||||
|
||||
// 拼接章节列表
|
||||
var chapterList = sourceList
|
||||
@@ -37,7 +33,7 @@ namespace AibisDream
|
||||
{
|
||||
chapterSo = chapterSo,
|
||||
title = chapterSo.title,
|
||||
chapter = chapterSo.chapter,
|
||||
chapter = chapterSo.chapter,
|
||||
desc = chapterSo.description,
|
||||
pic = chapterSo.coverPic,
|
||||
hasSaveFile = cacheChapter == chapterSo.name
|
||||
@@ -89,43 +85,19 @@ namespace AibisDream
|
||||
[GlobalData]
|
||||
public class ChapterData
|
||||
{
|
||||
public readonly TalkSceneSO firstChapter;
|
||||
public List<TalkSceneSO> chapterList;
|
||||
public List<string> unlockedChapterList;
|
||||
|
||||
public ChapterData()
|
||||
{
|
||||
Directory.CreateDirectory(ConstRef.SaveFilePath);
|
||||
firstChapter = GameManager.Instance.firstTalkSo;
|
||||
LoadChapterList();
|
||||
LoadUnlockChapters();
|
||||
}
|
||||
|
||||
private void LoadChapterList()
|
||||
{
|
||||
var all = GameManager.Instance?.GetAllSceneSos();
|
||||
if (all != null)
|
||||
{
|
||||
chapterList = all.OrderBy(so => so.displayOrder).ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
chapterList = new List<TalkSceneSO>();
|
||||
var curChapter = firstChapter;
|
||||
|
||||
do
|
||||
{
|
||||
chapterList.Add(curChapter);
|
||||
curChapter = curChapter.GetNextScene();
|
||||
} while (curChapter != null && !chapterList.Contains(curChapter));
|
||||
}
|
||||
}
|
||||
|
||||
private void LoadUnlockChapters()
|
||||
{
|
||||
unlockedChapterList = File.Exists(ConstRef.ChapterProgressPath)
|
||||
? JsonUtil.ReadBeanArray<string>(ConstRef.ChapterProgressPath).ToList()
|
||||
: new List<string> { firstChapter.name };
|
||||
: new List<string> { GameManager.Instance.firstTalkSo.name };
|
||||
}
|
||||
|
||||
public void SaveUnloadChapters()
|
||||
|
||||
@@ -1,15 +1,12 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using AibisDream.FixSystem;
|
||||
using AibisDream.Framework;
|
||||
using AibisDream.Kit;
|
||||
using AibisDream.UI;
|
||||
using AibisDream.Utility;
|
||||
using UnityEngine;
|
||||
using UnityEngine.AddressableAssets;
|
||||
using UnityEngine.ResourceManagement.AsyncOperations;
|
||||
using Yarn.Unity;
|
||||
|
||||
namespace AibisDream
|
||||
@@ -20,9 +17,8 @@ namespace AibisDream
|
||||
|
||||
public GameLoopState state;
|
||||
|
||||
private TalkSceneSO[] _totalSceneSos;
|
||||
|
||||
public RunMode runMode;
|
||||
private List<TalkSceneSO> _totalSceneSos;
|
||||
|
||||
[Header("生产环境数据(一般不动)")] public TalkSceneSO firstTalkSo;
|
||||
[Header("单场景测试")] public TalkSceneSO testTalkSo;
|
||||
@@ -32,6 +28,11 @@ namespace AibisDream
|
||||
|
||||
private BindProperty<TalkSceneSO> _currentTalkSceneSo;
|
||||
private readonly GameLoopData _data = new();
|
||||
|
||||
public override void OnSingletonInit()
|
||||
{
|
||||
LoadAllSceneSos();
|
||||
}
|
||||
|
||||
private void Start()
|
||||
{
|
||||
@@ -42,9 +43,6 @@ namespace AibisDream
|
||||
// 场景So事件注册
|
||||
_currentTalkSceneSo = new BindProperty<TalkSceneSO>();
|
||||
_currentTalkSceneSo.Register(item => _data.curSceneSoName = item.name);
|
||||
|
||||
// 加载SO
|
||||
Addressables.LoadAssetsAsync<TalkSceneSO>("SceneSO", null).Completed += LoadTalkSo;
|
||||
|
||||
#if UNITY_EDITOR
|
||||
if (runMode == RunMode.SingleScene)
|
||||
@@ -73,15 +71,17 @@ namespace AibisDream
|
||||
#endif
|
||||
}
|
||||
|
||||
private void LoadTalkSo(AsyncOperationHandle<IList<TalkSceneSO>> handle)
|
||||
private void LoadAllSceneSos()
|
||||
{
|
||||
if (handle.Status == AsyncOperationStatus.Succeeded)
|
||||
_totalSceneSos = new List<TalkSceneSO>();
|
||||
var visited = new HashSet<TalkSceneSO>();
|
||||
var current = firstTalkSo;
|
||||
|
||||
while (current != null && !visited.Contains(current))
|
||||
{
|
||||
_totalSceneSos = handle.Result.ToArray();
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogError("Failed to load textures.");
|
||||
_totalSceneSos.Add(current);
|
||||
visited.Add(current);
|
||||
current = current.GetNextScene();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -255,11 +255,14 @@ namespace AibisDream
|
||||
}
|
||||
}
|
||||
|
||||
public TalkSceneSO[] GetAllSceneSos() => _totalSceneSos;
|
||||
public List<TalkSceneSO> GetAllSceneSos()
|
||||
{
|
||||
return _totalSceneSos;
|
||||
}
|
||||
|
||||
public void SetSceneSoByName(string soName)
|
||||
{
|
||||
_currentTalkSceneSo.Value = Array.Find(_totalSceneSos, so => so.name == soName);
|
||||
_currentTalkSceneSo.Value = Array.Find(_totalSceneSos.ToArray(), so => so.name == soName);
|
||||
}
|
||||
|
||||
public void StartDialog()
|
||||
|
||||
@@ -23,7 +23,6 @@ namespace AibisDream
|
||||
private const string DEFAULT_EXIT_NAME = "default";
|
||||
|
||||
public List<SceneExit> exits = new();
|
||||
public int displayOrder;
|
||||
|
||||
public YarnProject yarnProject;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user