Extract overlay screens to prefabs and validate battle layout
CI / test (push) Successful in 2m8s Details

This commit is contained in:
MpakobecEx 2026-10-23 15:29:39 +05:00
parent 50487ed3f0
commit 8b813a9d6e
23 changed files with 5281 additions and 39 deletions

View File

@ -0,0 +1,77 @@
using System.IO;
using UnityEditor;
using UnityEngine;
using UnityEngine.EventSystems;
using Vanguard.UI;
using Vanguard.UI.Overlays;
namespace Vanguard.Editor
{
/// <summary>
/// Собирает статические части overlay-экранов в prefab-ассеты.
/// Runtime использует их через Resources/Overlays, если они есть.
/// </summary>
public static class OverlayPrefabBuilder
{
private const string DirectoryPath = "Assets/Vanguard/Resources/Overlays";
[MenuItem("Vanguard/Rebuild Overlay Prefabs")]
public static void BuildOverlayPrefabs()
{
Directory.CreateDirectory(DirectoryPath);
AssetDatabase.Refresh();
OverlayPrefabs.Disabled = true;
var hadEventSystem = Object.FindAnyObjectByType<EventSystem>() != null;
var canvas = UiKit.CreateCanvas("Overlay Prefab Canvas");
try
{
var list = new CardListView(canvas.transform, _ => null);
Save(list.Root, "CardListView");
var detail = new CardDetailOverlay(canvas.transform, _ => null);
Save(detail.Root, "CardDetailOverlay");
var menu = new CardActionMenuView();
menu.Build(canvas.transform);
Save(menu.Root, "CardActionMenu");
var zones = new ZoneBlockStripView();
zones.Build(
canvas.transform,
"ZoneBlockStrip",
new Vector2(0f, 0f),
new Vector2(0f, 0f),
Vector2.zero,
new Vector2(360f, 108f));
Save(zones.Root, "ZoneBlockStrip");
}
finally
{
OverlayPrefabs.Disabled = false;
Object.DestroyImmediate(canvas.gameObject);
if (!hadEventSystem)
{
var eventSystem = Object.FindAnyObjectByType<EventSystem>();
if (eventSystem != null)
Object.DestroyImmediate(eventSystem.gameObject);
}
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
}
Debug.Log("Vanguard overlay prefabs rebuilt: " + DirectoryPath);
}
private static void Save(RectTransform root, string name)
{
if (root == null)
return;
var path = DirectoryPath + "/" + name + ".prefab";
root.gameObject.SetActive(true);
PrefabUtility.SaveAsPrefabAsset(root.gameObject, path);
}
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 0696144f51d46f647a1cafa3f88f8574

View File

@ -40,6 +40,7 @@ namespace Vanguard.Editor
Create<BattleSceneController>("Battle");
EnsurePlaymatConfig();
EnsureAnimationConfig();
OverlayPrefabBuilder.BuildOverlayPrefabs();
var scenes = new List<EditorBuildSettingsScene>();
Add(scenes, BootPath);

View File

@ -0,0 +1,225 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &4189072559146026
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8284676636276215201}
- component: {fileID: 5174278869726106928}
- component: {fileID: 1457697840185301653}
- component: {fileID: 5781569561446982080}
m_Layer: 0
m_Name: Popup
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &8284676636276215201
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4189072559146026}
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: 8223332831618201117}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 250, y: 380}
m_Pivot: {x: 0, y: 1}
--- !u!222 &5174278869726106928
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4189072559146026}
m_CullTransparentMesh: 1
--- !u!114 &1457697840185301653
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4189072559146026}
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: 0.045, g: 0.06, b: 0.09, a: 0.98}
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: 0}
m_Type: 0
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 &5781569561446982080
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4189072559146026}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.VerticalLayoutGroup
m_Padding:
m_Left: 8
m_Right: 8
m_Top: 8
m_Bottom: 8
m_ChildAlignment: 1
m_Spacing: 4
m_ChildForceExpandWidth: 1
m_ChildForceExpandHeight: 0
m_ChildControlWidth: 1
m_ChildControlHeight: 1
m_ChildScaleWidth: 0
m_ChildScaleHeight: 0
m_ReverseArrangement: 0
--- !u!1 &5845066870428809132
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8223332831618201117}
- component: {fileID: 1549296649820998995}
- component: {fileID: 4319441307442638214}
- component: {fileID: 4789765823821415850}
m_Layer: 0
m_Name: CardActionMenu
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &8223332831618201117
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5845066870428809132}
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:
- {fileID: 8284676636276215201}
m_Father: {fileID: 0}
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: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &1549296649820998995
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5845066870428809132}
m_CullTransparentMesh: 1
--- !u!114 &4319441307442638214
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5845066870428809132}
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: 0, g: 0, b: 0, a: 0.01}
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: 0}
m_Type: 0
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 &4789765823821415850
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5845066870428809132}
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: 1}
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
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: 4319441307442638214}
m_OnClick:
m_PersistentCalls:
m_Calls: []

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: d73e64826a00d3242aa26cdcb598ff83
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 5d9f16ab4b6bf4742a60f59af52f3118
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,918 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &1469719734719151966
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8170022988952934391}
- component: {fileID: 1222730959284511770}
- component: {fileID: 4259544594302645894}
m_Layer: 0
m_Name: CardListView
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &8170022988952934391
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1469719734719151966}
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:
- {fileID: 7887127973873664564}
m_Father: {fileID: 0}
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: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &1222730959284511770
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1469719734719151966}
m_CullTransparentMesh: 1
--- !u!114 &4259544594302645894
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1469719734719151966}
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: 0, g: 0, b: 0, a: 0.78}
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: 0}
m_Type: 0
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!1 &3553432835196041209
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3859181713588757330}
- component: {fileID: 7630574021367947806}
- component: {fileID: 1599056814793912980}
m_Layer: 0
m_Name: Content
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &3859181713588757330
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3553432835196041209}
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: 1249341605781352115}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0.5}
m_AnchorMax: {x: 0, y: 0.5}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0, y: 0.5}
--- !u!114 &7630574021367947806
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3553432835196041209}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.HorizontalLayoutGroup
m_Padding:
m_Left: 4
m_Right: 4
m_Top: 4
m_Bottom: 4
m_ChildAlignment: 3
m_Spacing: 10
m_ChildForceExpandWidth: 0
m_ChildForceExpandHeight: 0
m_ChildControlWidth: 1
m_ChildControlHeight: 1
m_ChildScaleWidth: 0
m_ChildScaleHeight: 0
m_ReverseArrangement: 0
--- !u!114 &1599056814793912980
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3553432835196041209}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.ContentSizeFitter
m_HorizontalFit: 2
m_VerticalFit: 0
--- !u!1 &4641633941445230361
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 7887127973873664564}
- component: {fileID: 3430512985456936575}
- component: {fileID: 4544749884208319684}
- component: {fileID: 4313942877994018890}
m_Layer: 0
m_Name: CardListPanel
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &7887127973873664564
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4641633941445230361}
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:
- {fileID: 3845338837237151509}
- {fileID: 8509357265976112098}
m_Father: {fileID: 8170022988952934391}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 980, y: 560}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &3430512985456936575
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4641633941445230361}
m_CullTransparentMesh: 1
--- !u!114 &4544749884208319684
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4641633941445230361}
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: 0.045, g: 0.06, b: 0.09, 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: 0}
m_Type: 0
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 &4313942877994018890
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4641633941445230361}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.VerticalLayoutGroup
m_Padding:
m_Left: 16
m_Right: 16
m_Top: 16
m_Bottom: 16
m_ChildAlignment: 1
m_Spacing: 10
m_ChildForceExpandWidth: 1
m_ChildForceExpandHeight: 0
m_ChildControlWidth: 1
m_ChildControlHeight: 1
m_ChildScaleWidth: 0
m_ChildScaleHeight: 0
m_ReverseArrangement: 0
--- !u!1 &4772711393317449610
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8509357265976112098}
- component: {fileID: 8351436969149606757}
- component: {fileID: 4223214800367845870}
- component: {fileID: 262283147895747376}
- component: {fileID: 4639245205621282684}
m_Layer: 0
m_Name: CardScroll
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &8509357265976112098
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4772711393317449610}
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:
- {fileID: 1249341605781352115}
m_Father: {fileID: 7887127973873664564}
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: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &8351436969149606757
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4772711393317449610}
m_CullTransparentMesh: 1
--- !u!114 &4223214800367845870
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4772711393317449610}
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: 0, g: 0, b: 0, a: 0.01}
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: 0}
m_Type: 0
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 &262283147895747376
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4772711393317449610}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.ScrollRect
m_Content: {fileID: 3859181713588757330}
m_Horizontal: 1
m_Vertical: 0
m_MovementType: 2
m_Elasticity: 0.1
m_Inertia: 1
m_DecelerationRate: 0.135
m_ScrollSensitivity: 30
m_Viewport: {fileID: 1249341605781352115}
m_HorizontalScrollbar: {fileID: 0}
m_VerticalScrollbar: {fileID: 0}
m_HorizontalScrollbarVisibility: 0
m_VerticalScrollbarVisibility: 0
m_HorizontalScrollbarSpacing: 0
m_VerticalScrollbarSpacing: 0
m_OnValueChanged:
m_PersistentCalls:
m_Calls: []
--- !u!114 &4639245205621282684
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4772711393317449610}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.LayoutElement
m_IgnoreLayout: 0
m_MinWidth: -1
m_MinHeight: 400
m_PreferredWidth: -1
m_PreferredHeight: -1
m_FlexibleWidth: -1
m_FlexibleHeight: 1
m_LayoutPriority: 1
m_MaxWidth: -1
m_MaxHeight: -1
--- !u!1 &4997837896461458183
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3036137187819422772}
- component: {fileID: 3678738700295536158}
- component: {fileID: 5958573315790029210}
- component: {fileID: 4807482183672435}
- component: {fileID: 8174026932308914185}
m_Layer: 0
m_Name: Close
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &3036137187819422772
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4997837896461458183}
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:
- {fileID: 6506596215124840048}
m_Father: {fileID: 3845338837237151509}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 100, y: 100}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &3678738700295536158
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4997837896461458183}
m_CullTransparentMesh: 1
--- !u!114 &5958573315790029210
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4997837896461458183}
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: 0.2, g: 0.42, b: 0.78, 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: 0}
m_Type: 0
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 &4807482183672435
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4997837896461458183}
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: 1}
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
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: 5958573315790029210}
m_OnClick:
m_PersistentCalls:
m_Calls: []
--- !u!114 &8174026932308914185
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4997837896461458183}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.LayoutElement
m_IgnoreLayout: 0
m_MinWidth: -1
m_MinHeight: -1
m_PreferredWidth: 120
m_PreferredHeight: 40
m_FlexibleWidth: 0
m_FlexibleHeight: -1
m_LayoutPriority: 1
m_MaxWidth: -1
m_MaxHeight: -1
--- !u!1 &6204793766946580261
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3845338837237151509}
- component: {fileID: 199230275247935507}
- component: {fileID: 7363758439426580613}
- component: {fileID: 3847788887417467308}
- component: {fileID: 2445745248759025323}
m_Layer: 0
m_Name: Header
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &3845338837237151509
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6204793766946580261}
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:
- {fileID: 3451897472484662775}
- {fileID: 3036137187819422772}
m_Father: {fileID: 7887127973873664564}
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: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &199230275247935507
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6204793766946580261}
m_CullTransparentMesh: 1
--- !u!114 &7363758439426580613
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6204793766946580261}
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: 0, g: 0, b: 0, a: 0}
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: 0}
m_Type: 0
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 &3847788887417467308
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6204793766946580261}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.HorizontalLayoutGroup
m_Padding:
m_Left: 0
m_Right: 0
m_Top: 0
m_Bottom: 0
m_ChildAlignment: 4
m_Spacing: 10
m_ChildForceExpandWidth: 1
m_ChildForceExpandHeight: 0
m_ChildControlWidth: 1
m_ChildControlHeight: 1
m_ChildScaleWidth: 0
m_ChildScaleHeight: 0
m_ReverseArrangement: 0
--- !u!114 &2445745248759025323
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6204793766946580261}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.LayoutElement
m_IgnoreLayout: 0
m_MinWidth: -1
m_MinHeight: -1
m_PreferredWidth: -1
m_PreferredHeight: 44
m_FlexibleWidth: 1
m_FlexibleHeight: -1
m_LayoutPriority: 1
m_MaxWidth: -1
m_MaxHeight: -1
--- !u!1 &6325998095679041594
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1249341605781352115}
- component: {fileID: 3735377383881924944}
m_Layer: 0
m_Name: Viewport
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &1249341605781352115
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6325998095679041594}
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:
- {fileID: 3859181713588757330}
m_Father: {fileID: 8509357265976112098}
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: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &3735377383881924944
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6325998095679041594}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3312d7739989d2b4e91e6319e9a96d76, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.RectMask2D
m_Padding: {x: 0, y: 0, z: 0, w: 0}
m_Softness: {x: 0, y: 0}
--- !u!1 &7783630706378024170
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 6506596215124840048}
- component: {fileID: 557565527712788877}
- component: {fileID: 590656949008087397}
- component: {fileID: 8940946843088443230}
m_Layer: 0
m_Name: Label
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &6506596215124840048
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7783630706378024170}
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: 3036137187819422772}
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: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &557565527712788877
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7783630706378024170}
m_CullTransparentMesh: 1
--- !u!114 &590656949008087397
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7783630706378024170}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Text
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 0
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_FontData:
m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
m_FontSize: 16
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 10
m_MaxSize: 40
m_Alignment: 4
m_AlignByGeometry: 0
m_RichText: 1
m_HorizontalOverflow: 0
m_VerticalOverflow: 1
m_LineSpacing: 1
m_Text: "\u0417\u0430\u043A\u0440\u044B\u0442\u044C"
--- !u!114 &8940946843088443230
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7783630706378024170}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 0}
m_Name:
m_EditorClassIdentifier: Vanguard.Runtime::Vanguard.UI.LocalizedText
--- !u!1 &9132900455699837241
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3451897472484662775}
- component: {fileID: 5914423097922492218}
- component: {fileID: 2895284629386790160}
- component: {fileID: 2474737544313137945}
- component: {fileID: 656849464713321005}
m_Layer: 0
m_Name: Title
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &3451897472484662775
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 9132900455699837241}
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: 3845338837237151509}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 100, y: 100}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &5914423097922492218
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 9132900455699837241}
m_CullTransparentMesh: 1
--- !u!114 &2895284629386790160
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 9132900455699837241}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Text
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 0
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_FontData:
m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
m_FontSize: 24
m_FontStyle: 1
m_BestFit: 0
m_MinSize: 10
m_MaxSize: 40
m_Alignment: 3
m_AlignByGeometry: 0
m_RichText: 1
m_HorizontalOverflow: 0
m_VerticalOverflow: 1
m_LineSpacing: 1
m_Text: "\u041A\u0430\u0440\u0442\u044B"
--- !u!114 &2474737544313137945
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 9132900455699837241}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 0}
m_Name:
m_EditorClassIdentifier: Vanguard.Runtime::Vanguard.UI.LocalizedText
--- !u!114 &656849464713321005
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 9132900455699837241}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.LayoutElement
m_IgnoreLayout: 0
m_MinWidth: -1
m_MinHeight: -1
m_PreferredWidth: -1
m_PreferredHeight: 44
m_FlexibleWidth: 1
m_FlexibleHeight: -1
m_LayoutPriority: 1
m_MaxWidth: -1
m_MaxHeight: -1

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 2c887fa3582706442bd825731aff3340
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: ce2d32c68ec33dd42917fe8d3c4265bd
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -28,15 +28,26 @@ namespace Vanguard.UI.Overlays
public bool IsVisible => _root != null && _root.gameObject.activeSelf;
public RectTransform Root => _root;
public void Build(Transform parent)
{
var prefabRoot = OverlayPrefabs.Instantiate("CardActionMenu", parent);
if (prefabRoot != null)
{
_root = prefabRoot;
_popup = (RectTransform)_root.Find("Popup");
WireBackdrop();
_root.gameObject.SetActive(false);
return;
}
_root = UiKit.CreatePanel(parent, "CardActionMenu", new Color(0f, 0f, 0f, 0.01f));
var image = _root.GetComponent<Image>();
image.raycastTarget = true;
var backdrop = _root.gameObject.AddComponent<Button>();
backdrop.targetGraphic = image;
backdrop.onClick.AddListener(Hide);
_popup = UiKit.CreatePanel(_root, "Popup", new Color(0.045f, 0.06f, 0.09f, 0.98f));
_popup.anchorMin = new Vector2(0f, 1f);
@ -45,9 +56,29 @@ namespace Vanguard.UI.Overlays
_popup.sizeDelta = new Vector2(250f, 380f);
UiKit.AddVerticalLayout(_popup, 8, 4);
WireBackdrop();
_root.gameObject.SetActive(false);
}
private void WireBackdrop()
{
if (_root == null)
return;
var image = _root.GetComponent<Image>();
if (image != null)
image.raycastTarget = true;
var backdrop = _root.GetComponent<Button>();
if (backdrop == null)
{
backdrop = _root.gameObject.AddComponent<Button>();
backdrop.targetGraphic = image;
}
backdrop.onClick.AddListener(Hide);
}
public void Show(
Vector2 screenPosition,
string title,

View File

@ -23,6 +23,21 @@ namespace Vanguard.UI.Overlays
{
_catalog = catalog;
var prefabRoot = OverlayPrefabs.Instantiate("CardDetailOverlay", parent);
if (prefabRoot != null)
{
_root = prefabRoot;
_name = _root.Find("CardDetailPanel/Header/Name").GetComponent<Text>();
_art = _root.Find("CardDetailPanel/Body/Art").GetComponent<Image>();
_meta = _root.Find("CardDetailPanel/Body/Info/Meta").GetComponent<Text>();
_stats = _root.Find("CardDetailPanel/Body/Info/Stats").GetComponent<Text>();
_ability = _root.Find("CardDetailPanel/Body/Info/Ability").GetComponent<Text>();
WireBack(_root.Find("CardDetailPanel/Header/Back").GetComponent<Button>());
WireBack(_root.Find("CardDetailPanel/Header/Close").GetComponent<Button>());
_root.gameObject.SetActive(false);
return;
}
_root = UiKit.CreatePanel(parent, "CardDetailOverlay", new Color(0f, 0f, 0f, 0.82f));
var panel = UiKit.CreateCenteredCard(
_root,
@ -40,13 +55,15 @@ namespace Vanguard.UI.Overlays
UiKit.MakeLiteral(_name);
UiKit.SetPreferredHeight(_name, 44f);
var back = UiKit.CreateButton(header, "Back", "Назад", () => _onBack?.Invoke(), 16);
var back = UiKit.CreateButton(header, "Back", "Назад", null, 16);
var backElement = UiKit.SetPreferredHeight(back, 40f, 0f);
backElement.preferredWidth = 110f;
WireBack(back);
var close = UiKit.CreateButton(header, "Close", "Закрыть", () => _onBack?.Invoke(), 16);
var close = UiKit.CreateButton(header, "Close", "Закрыть", null, 16);
var closeElement = UiKit.SetPreferredHeight(close, 40f, 0f);
closeElement.preferredWidth = 110f;
WireBack(close);
var body = UiKit.CreatePanel(panel, "Body", Color.clear);
var bodyElement = body.gameObject.AddComponent<LayoutElement>();
@ -89,6 +106,14 @@ namespace Vanguard.UI.Overlays
public bool IsVisible => _root.gameObject.activeSelf;
public RectTransform Root => _root;
private void WireBack(Button button)
{
if (button != null)
button.onClick.AddListener(() => _onBack?.Invoke());
}
public void Show(CardListEntry entry, Action onBack)
{
_onBack = onBack;

View File

@ -26,6 +26,18 @@ namespace Vanguard.UI.Overlays
{
_catalog = catalog;
var prefabRoot = OverlayPrefabs.Instantiate("CardListView", parent);
if (prefabRoot != null)
{
_root = prefabRoot;
_title = _root.Find("CardListPanel/Header/Title").GetComponent<Text>();
_content = (RectTransform)_root.Find(
"CardListPanel/CardScroll/Viewport/Content");
WireClose(_root.Find("CardListPanel/Header/Close").GetComponent<Button>());
_root.gameObject.SetActive(false);
return;
}
_root = UiKit.CreatePanel(parent, "CardListView", new Color(0f, 0f, 0f, 0.78f));
var panel = UiKit.CreateCenteredCard(
_root,
@ -48,9 +60,10 @@ namespace Vanguard.UI.Overlays
_title.fontStyle = FontStyle.Bold;
UiKit.SetPreferredHeight(_title, 44f);
var close = UiKit.CreateButton(header, "Close", "Закрыть", () => _onClose?.Invoke(), 16);
var close = UiKit.CreateButton(header, "Close", "Закрыть", null, 16);
var closeElement = UiKit.SetPreferredHeight(close, 40f, 0f);
closeElement.preferredWidth = 120f;
WireClose(close);
var scroll = UiKit.CreateHorizontalScrollView(panel, "CardScroll", out _content, 10f);
var scrollElement = scroll.gameObject.AddComponent<LayoutElement>();
@ -60,6 +73,14 @@ namespace Vanguard.UI.Overlays
_root.gameObject.SetActive(false);
}
public RectTransform Root => _root;
private void WireClose(Button close)
{
if (close != null)
close.onClick.AddListener(() => _onClose?.Invoke());
}
public bool IsVisible => _root.gameObject.activeSelf;
public void Show(

View File

@ -0,0 +1,27 @@
using UnityEngine;
namespace Vanguard.UI.Overlays
{
/// <summary>
/// Загружает статические части overlay-экранов из Resources/Overlays.
/// Если prefab ещё не собран, views строят ту же иерархию кодом.
/// </summary>
public static class OverlayPrefabs
{
public static bool Disabled { get; set; }
public static RectTransform Instantiate(string name, Transform parent)
{
if (Disabled)
return null;
var prefab = Resources.Load<GameObject>("Overlays/" + name);
if (prefab == null)
return null;
var instance = Object.Instantiate(prefab, parent, false);
instance.name = name;
return (RectTransform)instance.transform;
}
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 31b17b9cddb025547a7e92db714d7173

View File

@ -39,16 +39,18 @@ namespace Vanguard.UI.Overlays
Vector2 position,
Vector2 size)
{
Root = UiKit.CreatePanel(parent, name, new Color(0.02f, 0.035f, 0.055f, 0.82f));
Root.anchorMin = anchor;
Root.anchorMax = anchor;
Root.pivot = pivot;
Root.anchoredPosition = position;
Root.sizeDelta = size;
var prefabRoot = OverlayPrefabs.Instantiate("ZoneBlockStrip", parent);
if (prefabRoot != null)
{
Root = prefabRoot;
Root.name = name;
ApplyLayout(anchor, pivot, position, size);
WireButtons();
return;
}
var image = Root.GetComponent<Image>();
if (image != null)
image.raycastTarget = false;
Root = UiKit.CreatePanel(parent, name, new Color(0.02f, 0.035f, 0.055f, 0.82f));
ApplyLayout(anchor, pivot, position, size);
UiKit.AddVerticalLayout(Root, 8, 4);
@ -63,23 +65,72 @@ namespace Vanguard.UI.Overlays
UiKit.MakeLiteral(_header);
UiKit.SetPreferredHeight(_header, 20f);
var firstRow = CreateRow("Row1");
var secondRow = CreateRow("Row2");
CreateRow("Row1");
CreateRow("Row2");
CreateZoneButtons();
WireButtons();
}
private void CreateZoneButtons()
{
for (var i = 0; i < Zones.Length; i++)
{
var zone = Zones[i];
var row = Root.Find(i < 4 ? "Row1" : "Row2");
UiKit.CreateButton(
row,
"Zone_" + zone,
string.Empty,
null,
13);
}
}
private void ApplyLayout(
Vector2 anchor,
Vector2 pivot,
Vector2 position,
Vector2 size)
{
Root.anchorMin = anchor;
Root.anchorMax = anchor;
Root.pivot = pivot;
Root.anchoredPosition = position;
Root.sizeDelta = size;
var image = Root.GetComponent<Image>();
if (image != null)
image.raycastTarget = false;
}
private void WireButtons()
{
_header = Root.Find("Header")?.GetComponent<Text>();
if (_header != null)
{
_header.fontStyle = FontStyle.Bold;
UiKit.MakeLiteral(_header);
}
for (var i = 0; i < Zones.Length; i++)
{
var zone = Zones[i];
var row = i < 4 ? firstRow : secondRow;
var button = UiKit.CreateButton(
row,
"Zone_" + zone,
string.Empty,
() => ZoneClicked?.Invoke(zone),
13);
var element = UiKit.SetPreferredHeight(button, 32f);
var row = i < 4 ? "Row1" : "Row2";
var button = Root.Find(row + "/Zone_" + zone)?.GetComponent<Button>();
if (button == null)
continue;
var element = button.GetComponent<LayoutElement>();
if (element == null)
element = button.gameObject.AddComponent<LayoutElement>();
element.preferredHeight = 32f;
element.preferredWidth = i < 4 ? 80f : 108f;
_labels[zone] = button.GetComponentInChildren<Text>();
if (_labels[zone] != null)
UiKit.MakeLiteral(_labels[zone]);
button.onClick.AddListener(() => ZoneClicked?.Invoke(zone));
}
}

View File

@ -176,6 +176,7 @@ namespace Vanguard.UI
var button = go.GetComponent<Button>();
button.targetGraphic = image;
if (onClick != null)
button.onClick.AddListener(onClick);
var text = CreateText(rect, "Label", label, fontSize, Color.white);

View File

@ -67,7 +67,8 @@ namespace Vanguard.Tests
Assert.IsTrue(Exists("CardDetailOverlay"));
var back = Resources.FindObjectsOfTypeAll<Button>()
.FirstOrDefault(button => button.name == "Back");
.FirstOrDefault(button => button.name == "Back"
&& button.gameObject.scene.IsValid());
Assert.IsNotNull(back);
back.onClick.Invoke();
Assert.IsTrue(Exists("CardListView"));
@ -83,6 +84,23 @@ namespace Vanguard.Tests
}
}
[Test]
public void Overlay_Prefabs_Are_Available()
{
foreach (var name in new[]
{
"CardListView",
"CardDetailOverlay",
"CardActionMenu",
"ZoneBlockStrip",
})
{
Assert.IsNotNull(
Resources.Load<GameObject>("Overlays/" + name),
name);
}
}
[Test]
public void Animation_Config_Asset_Is_Loaded_From_Resources()
{

View File

@ -123,6 +123,72 @@ namespace Vanguard.Tests
Object.DestroyImmediate(go);
}
[Test]
public void Battle_Layout_Fits_Reference_Resolution()
{
var config = new AppConfig();
config.Load();
var tokens = new TokenStore();
var api = new ApiClient(config, tokens);
var player = new PlayerState();
var auth = new AuthService(api, tokens, player);
var meta = new MetaService(api, player);
var canvas = UiKit.CreateCanvas("Layout Test Canvas");
try
{
var battle = new BattleView(canvas.transform, meta, () => { });
var screen = Resources.FindObjectsOfTypeAll<GameObject>()
.First(go => go.name == "BattleScreen");
screen.SetActive(true);
var self = ReferenceRect(FindRect("ZoneBlocksSelf"));
var opponent = ReferenceRect(FindRect("ZoneBlocksOpponent"));
var phase = ReferenceRect(FindRect("PhasePanel"));
var stats = ReferenceRect(FindRect("CombatStats"));
AssertWithinScreen(self, "self zones");
AssertWithinScreen(opponent, "opponent zones");
AssertWithinScreen(phase, "phase panel");
AssertWithinScreen(stats, "combat stats");
Assert.IsFalse(self.Overlaps(opponent));
Assert.IsFalse(self.Overlaps(phase));
Assert.IsFalse(opponent.Overlaps(phase));
Assert.IsFalse(opponent.Overlaps(stats));
Assert.IsFalse(phase.Overlaps(stats));
}
finally
{
Object.DestroyImmediate(canvas.gameObject);
Cleanup();
}
}
private static RectTransform FindRect(string name) =>
Resources.FindObjectsOfTypeAll<GameObject>()
.Where(go => go.scene.IsValid() && go.name == name)
.Select(go => go.GetComponent<RectTransform>())
.First(rect => rect != null);
private static Rect ReferenceRect(RectTransform rect)
{
var size = rect.sizeDelta;
var anchor = new Vector2(
Mathf.Lerp(0f, 1920f, rect.anchorMin.x),
Mathf.Lerp(0f, 1080f, rect.anchorMin.y));
return new Rect(
anchor + rect.anchoredPosition - Vector2.Scale(size, rect.pivot),
size);
}
private static void AssertWithinScreen(Rect rect, string name)
{
Assert.GreaterOrEqual(rect.xMin, 0f, name + " left");
Assert.GreaterOrEqual(rect.yMin, 0f, name + " bottom");
Assert.LessOrEqual(rect.xMax, 1920f, name + " right");
Assert.LessOrEqual(rect.yMax, 1080f, name + " top");
}
[Test]
public void Battle_Renders_3D_Damage_And_Rested_Cards()
{

View File

@ -944,3 +944,21 @@ Battle; Boot и общие сервисы остаются персистент
- Дальше: по желанию вынести overlay-экраны и меню в prefab-ассеты; проверить
итоговые позиции на реальном разрешении и, при необходимости, подкрутить
`AnimationConfig`/`PlaymatLayoutConfig`.
## 2026-10-23 — Overlay prefabs и проверка раскладки
- `CardListView`, `CardDetailOverlay`, `CardActionMenuView` и
`ZoneBlockStripView` теперь умеют брать статическую иерархию из
`Resources/Overlays/*.prefab`; при отсутствии prefab-а сохраняется
прежняя кодовая сборка. Динамические плитки/пункты/подписи по-прежнему
создаются кодом.
- `OverlayPrefabBuilder` (`Vanguard → Rebuild Overlay Prefabs`) собирает
prefab-ассеты из тех же view-классов; `SceneBuilder.BuildAll` вызывает его
автоматически. Runtime-загрузка — `OverlayPrefabs`.
- Добавлен `Battle_Layout_Fits_Reference_Resolution`: проверяет блоки зон,
панель фаз и боевую плашку на 1920×1080 и отсутствие пересечений; при
другом разрешении CanvasScaler масштабирует reference-раскладку.
- Проверки: клиент EditMode **28/28**, `SCENE_SMOKE success=True`,
`PLAYMAT_SMOKE success=True cards=25 hand=5/5 fieldVisible=True`.
- Дальше: только 3D-модели/наполнение сцен, анимации retire/ghost и
декбилдер; prefab-оверлеи и раскладка закрыты.

View File

@ -162,13 +162,13 @@ curl http://127.0.0.1:18080/health
-executeMethod Vanguard.Editor.SceneSmoke.RunPlaymat
```
Клиентские проверки: **26/26** EditMode (сборка всех экранов, импорт арта,
Клиентские проверки: **28/28** EditMode (сборка всех экранов, импорт арта,
перевод статических/динамических строк, live-переключение языка, рендер
3D-доски с уроном и отдыхающей картой, геометрия поля, правила
перемещения, рука в поле зрения камеры, обмен колоды/дропа, триггер-зона,
CardListView/Detail, зоны и рука противника, InputLock, контекстное меню,
стрелка атаки), `SCENE_SMOKE success=True`,
`PLAYMAT_SMOKE success=True cards=25 hand=5/5 fieldVisible=True`.
стрелка атаки, prefab-оверлеи, раскладка на 1920×1080), `SCENE_SMOKE
success=True`, `PLAYMAT_SMOKE success=True cards=25 hand=5/5 fieldVisible=True`.
`SceneSmoke` заменяет PlayMode-тест загрузки сцен: Single-загрузка сцены
ломает стандартный PlayMode test runner. `SceneBuilder` пересобирает сцены:
@ -201,6 +201,9 @@ client/Assets/Vanguard/Runtime/UI/Overlays/
CardListModels.cs зоны и скрытые карты
ZoneBlockStripView.cs кликабельные блоки зон
CardActionMenuView.cs контекстное меню карты
OverlayPrefabs.cs загрузка prefab-оверлеев
client/Assets/Vanguard/Editor/
OverlayPrefabBuilder.cs сборка Resources/Overlays/*.prefab
client/Assets/Vanguard/Runtime/Battle/
AnimationConfig.cs длительности/скорости анимаций
InputLockService.cs блокировка ввода по причинам
@ -215,6 +218,7 @@ client/Assets/Vanguard/Runtime/Board3D/
View/AttackArrowView.cs стрелка атаки с наконечником
PlaymatSandbox.cs демо без сервера
client/Assets/Vanguard/Resources/AnimationConfig.asset настройки анимаций
client/Assets/Vanguard/Resources/Overlays/*.prefab prefab-оверлеи
client/Assets/Vanguard/Resources/CardArt/vanguard_back.png рубашка VF
client/Assets/Vanguard/Scenes/GameBoard3D.unity песочница поля
client/Assets/Vanguard/Runtime/Api/ApiClient.cs + ApiContracts.cs
@ -238,12 +242,12 @@ client/Assets/Plugins/Vanguard.Shared + MessagePack
## Следующие шаги
1. UX-план 3D-поля: Phase 2–4 закрыты (InputLock/AnimationConfig, контекстное
меню, Power/Shield, стрелка, Guardian/Trigger, debug-подписи). Осталось:
при необходимости вынести overlay-экраны в prefab-ассеты и отполировать
расположение на реальном разрешении.
1. UX-план 3D-поля: Phase 2–4 закрыты, overlay-экраны вынесены в prefab
(`Resources/Overlays`), раскладка проверена на 1920×1080 и масштабируется
CanvasScaler'ом. Осталось при желании отполировать позиции на конкретном
мониторе.
2. Декбилдер: drag&drop, счётчики лимитов, live-валидация, пресеты.
3. 3D-наполнение: модели карт/стола, prefab-экраны, анимации retire/ghost.
3. 3D-наполнение: модели карт/стола, prefab-экраны сцен, анимации retire/ghost.
4. Звук и настройки, DOTween.
5. Лаунчер WPF.

View File

@ -36,11 +36,12 @@
Сцены `Login`, `Lobby`, `DeckBuilder`, `Battle` созданы;
`VanguardApp` и общие сервисы персистентны, `SceneFlow` загружает сцены.
Сейчас 3D-окружение собрано из примитивов, UI — code-generated uGUI.
Боевое поле уже 3D: `GameBoard3D` строит стол, круги, руку и стопки,
поддерживает drag&drop, Rest/фейс-даун и ограниченную камеру. Песочница —
`Assets/Vanguard/Scenes/GameBoard3D.unity`.
Дальше: 3D-модели карт/стола, prefab-экраны, анимации и наполнение сцен.
Сейчас 3D-окружение собрано из примитивов, UI — uGUI; статические части
боевых overlay-экранов вынесены в `Resources/Overlays/*.prefab`, остальные
панели пока code-generated. Боевое поле уже 3D: `GameBoard3D` строит стол,
круги, руку и стопки, поддерживает drag&drop, Rest/фейс-даун и ограниченную
камеру. Песочница — `Assets/Vanguard/Scenes/GameBoard3D.unity`.
Дальше: 3D-модели карт/стола, prefab-экраны сцен, анимации и наполнение сцен.
Уже перенесено: