some work on wiring in the encounters

This commit is contained in:
Sebastian Bularca
2026-05-17 19:49:42 +02:00
parent 3d13dac256
commit 7be3499f14
10 changed files with 397 additions and 42 deletions

View File

@@ -1,9 +1,11 @@
using TMPro;
using UnityEngine;
using UnityEngine.UI;
namespace Nox.Game {
public class AnswerPrefab : MonoBehaviour {
public class AnswerReference : MonoBehaviour {
public TextMeshProUGUI number;
public TextMeshProUGUI dialogText;
public Button button;
}
}

View File

@@ -8,11 +8,13 @@ namespace Nox.Game {
private readonly EncounterRegistry encounterRegistry;
private readonly EncounterView encounterView;
private string previousZoneId;
private IEncounter activeEncounter;
public EncounterHandler(ZoneSystem zoneSystem, EncounterRegistry encounterRegistry, EncounterPrefabs encounterPrefabs) {
this.zoneSystem = zoneSystem;
this.encounterRegistry = encounterRegistry;
encounterView = new EncounterView(encounterPrefabs);
encounterView.OptionSelected += OnOptionSelected;
}
public bool AskForRandomEncounter(ZoneContext zoneContext, string encounterTableId, out IEncounter encounter) {
@@ -37,15 +39,16 @@ namespace Nox.Game {
var shouldTrigger = randomChance <= zoneContext.finalEncounterChance;
if(!shouldTrigger) {
Debug.Log($"Rolled for encounter '{encounterTableId}': {randomChance:F2}/{zoneContext.finalEncounterChance:F2} -> none");
return false;
}
if(encounterKind == null) {
encounter = encounterRegistry.GetRandomEncounter(encounterTableId);
return encounter != null;
}
encounter = encounterKind == null
? encounterRegistry.GetRandomEncounter(encounterTableId)
: encounterRegistry.GetRandomEncounter(encounterTableId, encounterKind);
encounter = encounterRegistry.GetRandomEncounter(encounterTableId, encounterKind);
var resultName = encounter?.EncounterDefinition?.name ?? "none";
Debug.Log($"Rolled for encounter '{encounterTableId}': {randomChance:F2}/{zoneContext.finalEncounterChance:F2} -> {resultName}");
return encounter != null;
}
@@ -76,12 +79,56 @@ namespace Nox.Game {
case CombatKind:
return;
default:
activeEncounter = encounter;
encounterView?.SetCurrentEncounter(encounter);
encounterView?.Show();
break;
}
}
private void OnOptionSelected(int optionIndex) {
if(activeEncounter == null) {
return;
}
var options = activeEncounter.EncounterDialogOptionSet?.options;
if(options == null || optionIndex < 0 || optionIndex >= options.Count) {
return;
}
ResolveOption(activeEncounter, options[optionIndex]);
encounterView?.Hide();
activeEncounter = null;
}
private void ResolveOption(IEncounter encounter, EncounterDialogOption option) {
if(option?.events == null) {
return;
}
for(var i = 0; i < option.events.Count; i++) {
var encounterEvent = option.events[i];
if(encounterEvent == null) {
continue;
}
switch(encounterEvent) {
case ChainToEncounterEvent chain:
if(AskForEncounter(chain.nextEncounterId, out var next)) {
TriggerEncounter(next);
return;
}
break;
case LogEvent log:
Debug.Log($"[Encounter '{encounter.EncounterDefinition.id}'] {log.message}");
break;
case StartCombatEvent _:
case GiveRewardEvent _:
Debug.Log($"[Encounter] unhandled event {encounterEvent.GetType().Name}");
break;
}
}
}
public void CheckForEncounters(Vector3 position) {
VerifyZones(position);
}
@@ -89,7 +136,11 @@ namespace Nox.Game {
public void Tick() { }
public void Dispose() {
// nothing here
if(encounterView != null) {
encounterView.OptionSelected -= OnOptionSelected;
encounterView.Dispose();
}
activeEncounter = null;
}
}
}

View File

@@ -6,7 +6,6 @@ namespace Nox.Game {
[CreateAssetMenu(fileName = "EncounterPrefabs", menuName = "Nox/EncounterPrefabs")]
public class EncounterPrefabs : ScriptableObject {
public EncounterSet[] encounterSets;
public AnswerPrefab answerPrefab;
}
[Serializable]
@@ -14,5 +13,6 @@ namespace Nox.Game {
[field: SerializeReference, SubclassSelector]
public IEncounterKind encounterKind;
public EncounterReference encounterReference;
public AnswerReference answerReference;
}
}

View File

@@ -1,17 +1,23 @@
using Jovian.EncounterSystem;
using Nox.Game.UI;
using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
namespace Nox.Game {
public class EncounterView : IMenuView{
private readonly EncounterPrefabs encounterPrefabs;
private readonly IEncounterKind encounterKind;
private IEncounter currentEncounter;
public class EncounterView : IMenuView {
private const int MaxAnswers = 4;
private Dictionary<IEncounterKind, EncounterReference> encounterKindToPrefab = new ();
private IEncounterKind currentActiveKind;
private readonly EncounterPrefabs encounterPrefabs;
private readonly Dictionary<Type, EncounterReference> kindToReference = new();
private readonly Dictionary<Type, List<AnswerReference>> kindToAnswerPool = new();
private IEncounter currentEncounter;
private EncounterReference currentReference;
private List<AnswerReference> currentAnswerPool;
public event Action<int> OptionSelected;
public EncounterView(EncounterPrefabs encounterPrefabs) {
this.encounterPrefabs = encounterPrefabs;
@@ -19,25 +25,143 @@ namespace Nox.Game {
public void SetCurrentEncounter(IEncounter encounter) {
currentEncounter = encounter;
if(!encounterKindToPrefab.TryGetValue(encounter.EncounterDefinition.Kind, out var encounterReference)) {
encounterReference = Object.Instantiate(encounterPrefabs.encounterSets.FirstOrDefault(e => e.encounterKind == encounterKind)?.encounterReference);
encounterKindToPrefab.Add(encounter.EncounterDefinition.Kind, encounterReference);
}
}
public void Initialize() { }
public void Show() {
currentActiveKind = currentEncounter.EncounterDefinition.Kind;
PopulateEncounterReference();
encounterKindToPrefab[currentActiveKind].gameObject.SetActive(true);
if(currentEncounter?.EncounterDefinition?.Kind == null) {
return;
}
private void PopulateEncounterReference() {
if(currentReference) {
currentReference.gameObject.SetActive(false);
}
var kindType = currentEncounter.EncounterDefinition.Kind.GetType();
var set = encounterPrefabs.encounterSets
.FirstOrDefault(s => s.encounterKind != null && s.encounterKind.GetType() == kindType);
if(set == null || !set.encounterReference) {
return;
}
if(!kindToReference.TryGetValue(kindType, out var reference) || !reference) {
reference = UnityEngine.Object.Instantiate(set.encounterReference);
kindToReference[kindType] = reference;
}
currentReference = reference;
currentAnswerPool = GetOrBuildAnswerPool(kindType, set);
PopulateEncounterReference();
currentReference.gameObject.SetActive(true);
}
public void Hide() {
encounterKindToPrefab[currentActiveKind].gameObject.SetActive(false);
if(currentReference) {
currentReference.gameObject.SetActive(false);
}
DeactivateAnswers(currentAnswerPool);
}
public void Tick() { }
public void Dispose() {
foreach(var reference in kindToReference.Values) {
if(reference) {
UnityEngine.Object.Destroy(reference.gameObject);
}
}
kindToReference.Clear();
kindToAnswerPool.Clear();
currentReference = null;
currentAnswerPool = null;
currentEncounter = null;
OptionSelected = null;
}
private List<AnswerReference> GetOrBuildAnswerPool(Type kindType, EncounterSet set) {
if(kindToAnswerPool.TryGetValue(kindType, out var pool) && pool != null) {
return pool;
}
pool = new List<AnswerReference>(MaxAnswers);
kindToAnswerPool[kindType] = pool;
if(!set.answerReference || !currentReference.encounterOptionsContainer) {
return pool;
}
for(var i = 0; i < MaxAnswers; i++) {
var answer = UnityEngine.Object.Instantiate(set.answerReference, currentReference.encounterOptionsContainer);
answer.gameObject.SetActive(false);
pool.Add(answer);
}
return pool;
}
private void PopulateEncounterReference() {
var definition = currentEncounter.EncounterDefinition;
var visuals = currentEncounter.EncounterVisuals;
if(currentReference.encounterName) {
currentReference.encounterName.text = definition.name;
}
if(currentReference.encounterDescription) {
currentReference.encounterDescription.text = definition.description;
}
if(currentReference.encounterArt && visuals != null) {
currentReference.encounterArt.sprite = visuals.encounterArt;
}
PopulateAnswers();
}
private void PopulateAnswers() {
DeactivateAnswers(currentAnswerPool);
var optionSet = currentEncounter.EncounterDialogOptionSet;
if(currentAnswerPool == null || optionSet?.options == null) {
return;
}
var count = Mathf.Min(optionSet.options.Count, currentAnswerPool.Count);
for(var i = 0; i < count; i++) {
var option = optionSet.options[i];
var answer = currentAnswerPool[i];
if(option == null || !answer) {
continue;
}
if(answer.number) {
answer.number.text = (i + 1).ToString();
}
if(answer.dialogText) {
answer.dialogText.text = option.text.Resolve(optionSet.library);
}
BindAnswerButton(answer, i);
answer.gameObject.SetActive(true);
}
}
private void BindAnswerButton(AnswerReference answer, int optionIndex) {
var button = answer.button ? answer.button : answer.GetComponentInChildren<UnityEngine.UI.Button>(true);
if(!button) {
return;
}
button.onClick.RemoveAllListeners();
button.onClick.AddListener(() => OptionSelected?.Invoke(optionIndex));
}
private static void DeactivateAnswers(List<AnswerReference> pool) {
if(pool == null) {
return;
}
for(var i = 0; i < pool.Count; i++) {
if(pool[i]) {
pool[i].gameObject.SetActive(false);
}
}
}
}
}

View File

@@ -16,10 +16,66 @@ MonoBehaviour:
- encounterKind:
rid: 1352971649185742937
encounterReference: {fileID: 3705563528526877357, guid: 62525e62adc83b84abde85d78828de2b, type: 3}
answerPrefab: {fileID: -3146704326252051464, guid: cbecff27dee2cf7448a05a89ecb018b4, type: 3}
answerReference: {fileID: -3146704326252051464, guid: cbecff27dee2cf7448a05a89ecb018b4, type: 3}
- encounterKind:
rid: 696918149227610525
encounterReference: {fileID: 3705563528526877357, guid: 62525e62adc83b84abde85d78828de2b, type: 3}
answerReference: {fileID: -3146704326252051464, guid: cbecff27dee2cf7448a05a89ecb018b4, type: 3}
- encounterKind:
rid: 696918149227610527
encounterReference: {fileID: 3705563528526877357, guid: 62525e62adc83b84abde85d78828de2b, type: 3}
answerReference: {fileID: -3146704326252051464, guid: cbecff27dee2cf7448a05a89ecb018b4, type: 3}
- encounterKind:
rid: 696918149227610528
encounterReference: {fileID: 3705563528526877357, guid: 62525e62adc83b84abde85d78828de2b, type: 3}
answerReference: {fileID: -3146704326252051464, guid: cbecff27dee2cf7448a05a89ecb018b4, type: 3}
- encounterKind:
rid: 696918149227610529
encounterReference: {fileID: 3705563528526877357, guid: 62525e62adc83b84abde85d78828de2b, type: 3}
answerReference: {fileID: -3146704326252051464, guid: cbecff27dee2cf7448a05a89ecb018b4, type: 3}
- encounterKind:
rid: 696918149227610530
encounterReference: {fileID: 3705563528526877357, guid: 62525e62adc83b84abde85d78828de2b, type: 3}
answerReference: {fileID: -3146704326252051464, guid: cbecff27dee2cf7448a05a89ecb018b4, type: 3}
- encounterKind:
rid: 696918149227610531
encounterReference: {fileID: 3705563528526877357, guid: 62525e62adc83b84abde85d78828de2b, type: 3}
answerReference: {fileID: -3146704326252051464, guid: cbecff27dee2cf7448a05a89ecb018b4, type: 3}
- encounterKind:
rid: 696918149227610532
encounterReference: {fileID: 3705563528526877357, guid: 62525e62adc83b84abde85d78828de2b, type: 3}
answerReference: {fileID: -3146704326252051464, guid: cbecff27dee2cf7448a05a89ecb018b4, type: 3}
- encounterKind:
rid: 696918149227610532
encounterReference: {fileID: 3705563528526877357, guid: 62525e62adc83b84abde85d78828de2b, type: 3}
answerReference: {fileID: -3146704326252051464, guid: cbecff27dee2cf7448a05a89ecb018b4, type: 3}
references:
version: 2
RefIds:
- rid: 696918149227610525
type: {class: CombatKind, ns: Nox.Game, asm: Assembly-CSharp}
data:
- rid: 696918149227610527
type: {class: QuestKind, ns: Jovian.EncounterSystem, asm: Jovian.EncounterSystem}
data:
nextEncounter:
table: {fileID: 0}
internalId:
- rid: 696918149227610528
type: {class: SocialKind, ns: Nox.Game, asm: Assembly-CSharp}
data:
- rid: 696918149227610529
type: {class: TutorialKind, ns: Nox.Game, asm: Assembly-CSharp}
data:
- rid: 696918149227610530
type: {class: HazardKind, ns: Nox.Game, asm: Assembly-CSharp}
data:
- rid: 696918149227610531
type: {class: OtherKind, ns: Nox.Game, asm: Assembly-CSharp}
data:
- rid: 696918149227610532
type: {class: PuzzleKind, ns: Nox.Game, asm: Assembly-CSharp}
data:
- rid: 1352971649185742937
type: {class: ExplorationKind, ns: Nox.Game, asm: Assembly-CSharp}
data:

View File

@@ -137,6 +137,126 @@ MonoBehaviour:
m_hasFontAssetChanged: 0
m_baseMaterial: {fileID: 0}
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
--- !u!1 &5634975795126131359
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 7922870055581323619}
- component: {fileID: 8449579385697103291}
- component: {fileID: 680329226197598615}
- component: {fileID: 4831999132806256115}
m_Layer: 5
m_Name: Button
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &7922870055581323619
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5634975795126131359}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 5249586234698548752}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0.16499329, y: 0.000025749207}
m_SizeDelta: {x: 0.32999, y: 0.046}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &8449579385697103291
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5634975795126131359}
m_CullTransparentMesh: 1
--- !u!114 &680329226197598615
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5634975795126131359}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
m_Type: 1
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!114 &4831999132806256115
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5634975795126131359}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Button
m_Navigation:
m_Mode: 3
m_WrapAround: 0
m_SelectOnUp: {fileID: 0}
m_SelectOnDown: {fileID: 0}
m_SelectOnLeft: {fileID: 0}
m_SelectOnRight: {fileID: 0}
m_Transition: 1
m_Colors:
m_NormalColor: {r: 1, g: 1, b: 1, a: 0}
m_HighlightedColor: {r: 0, g: 0, b: 0, a: 0.31764707}
m_PressedColor: {r: 0, g: 0, b: 0, a: 0.4627451}
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 0}
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0}
m_ColorMultiplier: 1
m_FadeDuration: 0.1
m_SpriteState:
m_HighlightedSprite: {fileID: 0}
m_PressedSprite: {fileID: 0}
m_SelectedSprite: {fileID: 0}
m_DisabledSprite: {fileID: 0}
m_AnimationTriggers:
m_NormalTrigger: Normal
m_HighlightedTrigger: Highlighted
m_PressedTrigger: Pressed
m_SelectedTrigger: Selected
m_DisabledTrigger: Disabled
m_Interactable: 1
m_TargetGraphic: {fileID: 680329226197598615}
m_OnClick:
m_PersistentCalls:
m_Calls: []
--- !u!1 &5906514193138747816
GameObject:
m_ObjectHideFlags: 0
@@ -150,7 +270,7 @@ GameObject:
- component: {fileID: 1953891385698885950}
- component: {fileID: -3146704326252051464}
m_Layer: 5
m_Name: Answers
m_Name: AnswerReference
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
@@ -170,6 +290,7 @@ RectTransform:
m_Children:
- {fileID: 1760747944163223242}
- {fileID: 7428637175488290741}
- {fileID: 7922870055581323619}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
@@ -219,6 +340,7 @@ MonoBehaviour:
m_EditorClassIdentifier: Assembly-CSharp::Nox.Game.AnswerPrefab
number: {fileID: 572009535857796838}
dialogText: {fileID: 3412282869295099737}
button: {fileID: 4831999132806256115}
--- !u!1 &6684607543305325759
GameObject:
m_ObjectHideFlags: 0

View File

@@ -108,10 +108,10 @@ RectTransform:
m_Children: []
m_Father: {fileID: 7039252932434566139}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0.48286262}
m_AnchorMax: {x: 0.6627312, y: 1}
m_AnchoredPosition: {x: 0.9819946, y: -38.289}
m_SizeDelta: {x: 1.62, y: -42.331}
m_AnchorMin: {x: 0, y: 0.43427482}
m_AnchorMax: {x: 0.6627312, y: 0.8264123}
m_AnchoredPosition: {x: 0.9819946, y: 1.0250015}
m_SizeDelta: {x: 1.62, y: 0.68299866}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &502023626210869990
CanvasRenderer:
@@ -169,12 +169,12 @@ MonoBehaviour:
m_faceColor:
serializedVersion: 2
rgba: 4294967295
m_fontSize: 13.1
m_fontSize: 15.55
m_fontSizeBase: 36
m_fontWeight: 400
m_enableAutoSizing: 1
m_fontSizeMin: 7.8
m_fontSizeMax: 13.1
m_fontSizeMax: 15.55
m_fontStyle: 0
m_HorizontalAlignment: 1
m_VerticalAlignment: 256
@@ -208,7 +208,7 @@ MonoBehaviour:
m_VertexBufferAutoSizeReduction: 0
m_useMaxVisibleDescender: 1
m_pageToDisplay: 1
m_margin: {x: 26.800018, y: 6.367523, z: 6.807068, w: 0}
m_margin: {x: 36.54596, y: 6.367523, z: 6.807068, w: 7.7981873}
m_isUsingLegacyAnimationComponent: 0
m_isVolumetricText: 0
m_hasFontAssetChanged: 0
@@ -248,7 +248,7 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.6627312, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: -14.5, y: 0.000015258789}
m_AnchoredPosition: {x: -14.5, y: 0.000030517578}
m_SizeDelta: {x: -32.578293, y: -65.75531}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &2681516528620939688
@@ -323,7 +323,7 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0.8264123}
m_AnchorMax: {x: 0.6627312, y: 1}
m_AnchoredPosition: {x: -0.80999756, y: -15.64299}
m_AnchoredPosition: {x: -0.80999756, y: -15.642975}
m_SizeDelta: {x: 1.62, y: -33.7364}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &3458576624150439327
@@ -381,11 +381,11 @@ MonoBehaviour:
m_faceColor:
serializedVersion: 2
rgba: 4294967295
m_fontSize: 26.9
m_fontSize: 45.4
m_fontSizeBase: 36
m_fontWeight: 400
m_enableAutoSizing: 1
m_fontSizeMin: 6.97
m_fontSizeMin: 13.94
m_fontSizeMax: 45.4
m_fontStyle: 1
m_HorizontalAlignment: 2
@@ -458,10 +458,10 @@ RectTransform:
m_Children: []
m_Father: {fileID: 7039252932434566139}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMin: {x: 0, y: 0.057000004}
m_AnchorMax: {x: 0.6627312, y: 0.43427482}
m_AnchoredPosition: {x: 0.9819946, y: 13.1859}
m_SizeDelta: {x: 1.62, y: -26.6202}
m_AnchoredPosition: {x: 0.9819946, y: -0.81417847}
m_SizeDelta: {x: 1.62, y: 1.3798008}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &7326620177005582428
CanvasRenderer:
@@ -654,8 +654,8 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: -510.3443, y: -262.6666}
m_AnchoredPosition: {x: -12.132874, y: 7.188507}
m_SizeDelta: {x: -534.61, y: -277.0435}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &7810011449154573601
CanvasRenderer:

View File

@@ -75,7 +75,7 @@
}
},
"com.jovian.tag-system": {
"version": "file:unity-tag-system",
"version": "file:com.jovian.tag-system",
"depth": 0,
"source": "embedded",
"dependencies": {}