chore(unity): 固定Unity CLI Loop本地包并移除UnitySkills依赖

This commit is contained in:
Liubing\LB
2026-09-28 18:14:59 +08:00
parent 0eb43b2b40
commit c4ae02def9
952 changed files with 70137 additions and 11 deletions

View File

@@ -0,0 +1,502 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &22181428640489494
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3582369045929623476}
- component: {fileID: 3614889816338958305}
- component: {fileID: 2719428274581312071}
- component: {fileID: 7892078462694320466}
m_Layer: 0
m_Name: RecordingGroup
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &3582369045929623476
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 22181428640489494}
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: 3621534349862372398}
- {fileID: 5117071643518484791}
m_Father: {fileID: 6520280533638980191}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 1}
m_AnchorMax: {x: 0.5, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 308.3724, y: 37.9532}
m_Pivot: {x: 0.5, y: 1}
--- !u!222 &3614889816338958305
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 22181428640489494}
m_CullTransparentMesh: 1
--- !u!114 &2719428274581312071
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 22181428640489494}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 0, g: 0, b: 0, a: 0.6}
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 &7892078462694320466
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 22181428640489494}
m_Enabled: 0
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Padding:
m_Left: 10
m_Right: 10
m_Top: 4
m_Bottom: 4
m_ChildAlignment: 4
m_Spacing: 6
m_ChildForceExpandWidth: 0
m_ChildForceExpandHeight: 0
m_ChildControlWidth: 0
m_ChildControlHeight: 0
m_ChildScaleWidth: 0
m_ChildScaleHeight: 0
m_ReverseArrangement: 0
--- !u!1 &5910659660082971454
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 6520280533638980191}
- component: {fileID: 1629439249830669379}
- component: {fileID: 7672979299455549903}
- component: {fileID: 7304014939787943379}
m_Layer: 0
m_Name: RecordInputOverlay
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &6520280533638980191
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5910659660082971454}
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: 8858599889832361986}
- {fileID: 3582369045929623476}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 1}
m_AnchorMax: {x: 0.5, y: 1}
m_AnchoredPosition: {x: 0, y: -10}
m_SizeDelta: {x: 400, y: 120}
m_Pivot: {x: 0.5, y: 1}
--- !u!225 &1629439249830669379
CanvasGroup:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5910659660082971454}
m_Enabled: 1
m_Alpha: 1
m_Interactable: 0
m_BlocksRaycasts: 0
m_IgnoreParentGroups: 0
--- !u!114 &7672979299455549903
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5910659660082971454}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 626f611c789dd4febbff8920eeb25837, type: 3}
m_Name:
m_EditorClassIdentifier:
_canvasGroup: {fileID: 1629439249830669379}
_countdownGroup: {fileID: 8747864644649913744}
_countdownText: {fileID: 5505213563100565343}
_recordingGroup: {fileID: 22181428640489494}
_recDotText: {fileID: 8821962787790114429}
_statusText: {fileID: 681519330149296984}
--- !u!114 &7304014939787943379
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5910659660082971454}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 55b9e485125e14c979260f3aa7816f9c, type: 3}
m_Name:
m_EditorClassIdentifier:
_view: {fileID: 7672979299455549903}
--- !u!1 &7302841544564334857
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 5117071643518484791}
- component: {fileID: 4639771590543201793}
- component: {fileID: 681519330149296984}
m_Layer: 0
m_Name: StatusText
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &5117071643518484791
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7302841544564334857}
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: 3582369045929623476}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 152.7, y: -18.25}
m_SizeDelta: {x: 100, y: 100}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &4639771590543201793
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7302841544564334857}
m_CullTransparentMesh: 1
--- !u!114 &681519330149296984
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7302841544564334857}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 0.267, b: 0.267, 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_FontData:
m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
m_FontSize: 34
m_FontStyle: 1
m_BestFit: 0
m_MinSize: 2
m_MaxSize: 40
m_Alignment: 4
m_AlignByGeometry: 0
m_RichText: 1
m_HorizontalOverflow: 1
m_VerticalOverflow: 0
m_LineSpacing: 1
m_Text: REC 00:00
--- !u!1 &8311708416284801602
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3621534349862372398}
- component: {fileID: 754498044577037662}
- component: {fileID: 8821962787790114429}
m_Layer: 0
m_Name: RecDot
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &3621534349862372398
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8311708416284801602}
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: 3582369045929623476}
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: -115, y: 3.71}
m_SizeDelta: {x: 100, y: 100}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &754498044577037662
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8311708416284801602}
m_CullTransparentMesh: 1
--- !u!114 &8821962787790114429
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8311708416284801602}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 0.267, b: 0.267, 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_FontData:
m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
m_FontSize: 43
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 2
m_MaxSize: 69
m_Alignment: 4
m_AlignByGeometry: 0
m_RichText: 1
m_HorizontalOverflow: 1
m_VerticalOverflow: 0
m_LineSpacing: 0.41
m_Text: "\u25CF"
--- !u!1 &8406836639261979753
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3888244186547671568}
- component: {fileID: 1083919491349555004}
- component: {fileID: 5505213563100565343}
m_Layer: 0
m_Name: CountdownText
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &3888244186547671568
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8406836639261979753}
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: 8858599889832361986}
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.2}
m_SizeDelta: {x: 400, y: 70}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &1083919491349555004
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8406836639261979753}
m_CullTransparentMesh: 1
--- !u!114 &5505213563100565343
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8406836639261979753}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 0.267, b: 0.267, 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_FontData:
m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
m_FontSize: 48
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 10
m_MaxSize: 48
m_Alignment: 4
m_AlignByGeometry: 0
m_RichText: 1
m_HorizontalOverflow: 1
m_VerticalOverflow: 1
m_LineSpacing: 1
m_Text: REC in 3...
--- !u!1 &8747864644649913744
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8858599889832361986}
- component: {fileID: 8837628031120365172}
- component: {fileID: 2701087203241486620}
m_Layer: 0
m_Name: CountdownGroup
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &8858599889832361986
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8747864644649913744}
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: 3888244186547671568}
m_Father: {fileID: 6520280533638980191}
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: -25.460205}
m_SizeDelta: {x: 0, y: -50.9205}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &8837628031120365172
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8747864644649913744}
m_CullTransparentMesh: 1
--- !u!114 &2701087203241486620
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8747864644649913744}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 0, g: 0, b: 0, a: 0.6}
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

View File

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

View File

@@ -0,0 +1,91 @@
#if UNITY_EDITOR
using System.Globalization;
using UnityEngine;
namespace io.github.hatayama.uLoopMCP
{
public class RecordInputOverlayPresenter : MonoBehaviour
{
private const float FADE_OUT_DURATION = 0.5f;
private const float DOT_BLINK_SPEED = 2f;
[SerializeField] private RecordInputOverlayView _view;
private bool _wasActive;
private float _deactivatedTime;
private int _lastMinutes = -1;
private int _lastSecs = -1;
private string _cachedStatusText = "";
private void Awake()
{
Debug.Assert(_view != null, "_view must be assigned in prefab");
}
private void LateUpdate()
{
RecordInputOverlayPhase phase = RecordInputOverlayState.Phase;
if (phase != RecordInputOverlayPhase.None)
{
_wasActive = true;
_deactivatedTime = 0f;
switch (phase)
{
case RecordInputOverlayPhase.Countdown:
int remaining = Mathf.CeilToInt(RecordInputOverlayState.RemainingSeconds);
_view.ShowCountdown(remaining);
break;
case RecordInputOverlayPhase.Recording:
string statusText = FormatStatusText(RecordInputOverlayState.ElapsedSeconds);
float dotAlpha = Mathf.PingPong(Time.realtimeSinceStartup * DOT_BLINK_SPEED, 1f);
_view.ShowRecording(statusText, dotAlpha);
break;
}
return;
}
if (!_wasActive)
{
return;
}
if (_deactivatedTime <= 0f)
{
_deactivatedTime = Time.realtimeSinceStartup;
_view.ShowStopped();
return;
}
float fadingElapsed = Time.realtimeSinceStartup - _deactivatedTime;
if (fadingElapsed > FADE_OUT_DURATION)
{
_view.Hide();
_wasActive = false;
_deactivatedTime = 0f;
return;
}
float alpha = 1f - (fadingElapsed / FADE_OUT_DURATION);
_view.SetAlpha(alpha);
}
private string FormatStatusText(float seconds)
{
int minutes = (int)(seconds / 60f);
int secs = (int)(seconds % 60f);
if (minutes == _lastMinutes && secs == _lastSecs)
{
return _cachedStatusText;
}
_lastMinutes = minutes;
_lastSecs = secs;
_cachedStatusText = string.Format(CultureInfo.InvariantCulture, "REC {0:D2}:{1:D2}", minutes, secs);
return _cachedStatusText;
}
}
}
#endif

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 55b9e485125e14c979260f3aa7816f9c
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,64 @@
using UnityEngine;
namespace io.github.hatayama.uLoopMCP
{
public enum RecordInputOverlayPhase
{
None,
Countdown,
Recording
}
public static class RecordInputOverlayState
{
private static RecordInputOverlayPhase _phase;
private static float _countdownEndTime;
private static float _recordingStartTime;
public static RecordInputOverlayPhase Phase => _phase;
public static float RemainingSeconds
{
get
{
if (_phase != RecordInputOverlayPhase.Countdown)
{
return 0f;
}
float remaining = _countdownEndTime - Time.realtimeSinceStartup;
return remaining > 0f ? remaining : 0f;
}
}
public static float ElapsedSeconds
{
get
{
if (_phase != RecordInputOverlayPhase.Recording)
{
return 0f;
}
return Time.realtimeSinceStartup - _recordingStartTime;
}
}
public static void StartCountdown(float durationSeconds)
{
_phase = RecordInputOverlayPhase.Countdown;
_countdownEndTime = Time.realtimeSinceStartup + durationSeconds;
}
public static void StartRecording()
{
_phase = RecordInputOverlayPhase.Recording;
_recordingStartTime = Time.realtimeSinceStartup;
}
public static void Clear()
{
_phase = RecordInputOverlayPhase.None;
_countdownEndTime = 0f;
_recordingStartTime = 0f;
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: a506fd4ae8f6b46c294dca15e5da34fd
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,75 @@
#if UNITY_EDITOR
using UnityEngine;
using UnityEngine.UI;
namespace io.github.hatayama.uLoopMCP
{
public class RecordInputOverlayView : MonoBehaviour
{
[SerializeField] private CanvasGroup _canvasGroup;
[SerializeField] private GameObject _countdownGroup;
[SerializeField] private Text _countdownText;
[SerializeField] private GameObject _recordingGroup;
[SerializeField] private Text _recDotText;
[SerializeField] private Text _statusText;
private void Awake()
{
Debug.Assert(_canvasGroup != null, "_canvasGroup must be assigned in prefab");
Debug.Assert(_countdownGroup != null, "_countdownGroup must be assigned in prefab");
Debug.Assert(_countdownText != null, "_countdownText must be assigned in prefab");
Debug.Assert(_recordingGroup != null, "_recordingGroup must be assigned in prefab");
Debug.Assert(_recDotText != null, "_recDotText must be assigned in prefab");
Debug.Assert(_statusText != null, "_statusText must be assigned in prefab");
_canvasGroup.interactable = false;
_canvasGroup.blocksRaycasts = false;
Hide();
}
public void ShowCountdown(int remainingSeconds)
{
_countdownGroup.SetActive(true);
_recordingGroup.SetActive(false);
_countdownText.text = $"REC in {remainingSeconds}...";
_canvasGroup.alpha = 1f;
}
public void ShowRecording(string statusText, float dotAlpha)
{
_countdownGroup.SetActive(false);
_recordingGroup.SetActive(true);
_statusText.text = statusText;
SetDotAlpha(dotAlpha);
_canvasGroup.alpha = 1f;
}
public void ShowStopped()
{
_countdownGroup.SetActive(false);
_recordingGroup.SetActive(true);
_statusText.text = "REC STOPPED";
SetDotAlpha(1f);
}
private void SetDotAlpha(float alpha)
{
Color dotColor = _recDotText.color;
dotColor.a = alpha;
_recDotText.color = dotColor;
}
public void SetAlpha(float alpha)
{
_canvasGroup.alpha = alpha;
}
public void Hide()
{
_canvasGroup.alpha = 0f;
_countdownGroup.SetActive(false);
_recordingGroup.SetActive(false);
}
}
}
#endif

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 626f611c789dd4febbff8920eeb25837
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: