using Cysharp.Threading.Tasks; using System.Collections.Generic; using Gs2.Unity.Gs2Quest.Model; using UnityEngine; public sealed class AdventurePlay : MonoBehaviour { [SerializeField] private AdventureLogin login; private readonly List quests = new List(); private bool ready; private string message = "로딩 중"; private void OnGUI() { if (login == null || login.Session == null) return; GUILayout.BeginArea(new Rect(20, 210, 650, 650), GUI.skin.box); GUILayout.Label(message); if (ready) { foreach (var quest in quests) { GUILayout.Label(quest.Metadata + " (" + quest.Name + ")"); } } GUI.enabled = true; GUILayout.EndArea(); } private void Start() => LoadQuests().Forget(); private async UniTask LoadQuests() { try { await UniTask.WaitUntil(() => login.Session != null, cancellationToken: this.GetCancellationTokenOnDestroy()); var group = login.Gs2.Quest.Namespace("adventure-quest").QuestGroupModel("main"); await foreach (var item in group.QuestModelsAsync()) { if (item != null) quests.Add(item); } ready = true; message = quests.Count == 0 ? "모험이 없습니다" : "불러왔습니다"; } catch (System.OperationCanceledException) { } catch (System.Exception error) { message = "불러오지 못했습니다: " + error.GetType().Name; } } }