1. 跑通第一章全部流程 2. 优化拼装玩法体验

This commit is contained in:
SepComet 2026-04-23 20:19:18 +08:00
parent 113358330c
commit facfe7a437
24 changed files with 429 additions and 81 deletions

1
.gitignore vendored
View File

@ -100,3 +100,4 @@ crashlytics-build.properties
/.omc /.omc
/.omx /.omx
/.dotnet_home /.dotnet_home
/.dotnet

View File

@ -14,3 +14,4 @@
107 游戏场景覆盖UI MainOverlayForm Overlay False False 107 游戏场景覆盖UI MainOverlayForm Overlay False False
108 AI对话UI AIChatForm Overlay False False 108 AI对话UI AIChatForm Overlay False False
109 章节标题UI ChapterTitleForm Overlay False False 109 章节标题UI ChapterTitleForm Overlay False False
110 AI对话入口 AIChatEntryForm Top False False

View File

@ -318,6 +318,7 @@ namespace CustomComponent
{ {
slot.SetOccupiedPart(part); slot.SetOccupiedPart(part);
part.PlaceToSlot(slot); part.PlaceToSlot(slot);
HidePlacedPair(slot, part);
_placedCount++; _placedCount++;
AdvanceOrderCursor(); AdvanceOrderCursor();
@ -338,8 +339,6 @@ namespace CustomComponent
} }
_isCompleted = true; _isCompleted = true;
GameEntry.Event.Fire(this, CombineCompletedEventArgs.Create());
_onPuzzleCompleted.Invoke(); _onPuzzleCompleted.Invoke();
} }
@ -371,6 +370,19 @@ namespace CustomComponent
GameEntry.Event.Fire(this, CombineFeedbackEventArgs.Create(feedbackType, message)); GameEntry.Event.Fire(this, CombineFeedbackEventArgs.Create(feedbackType, message));
} }
private static void HidePlacedPair(CombineSlot slot, CombineDraggablePart part)
{
if (slot != null && slot.gameObject != null)
{
slot.gameObject.SetActive(false);
}
if (part != null && part.gameObject != null)
{
part.gameObject.SetActive(false);
}
}
#endregion #endregion
#region Runtime Context #region Runtime Context
@ -569,6 +581,7 @@ namespace CustomComponent
for (int i = 0; i < _orderedSlots.Count; i++) for (int i = 0; i < _orderedSlots.Count; i++)
{ {
CombineSlot slot = _orderedSlots[i]; CombineSlot slot = _orderedSlots[i];
slot.gameObject.SetActive(true);
slot.BindController(this); slot.BindController(this);
slot.ResetSlot(); slot.ResetSlot();
} }
@ -587,6 +600,7 @@ namespace CustomComponent
continue; continue;
} }
part.gameObject.SetActive(true);
part.BindController(this); part.BindController(this);
part.CacheSpawnState(); part.CacheSpawnState();
part.ResetToSpawn(); part.ResetToSpawn();

View File

@ -73,6 +73,8 @@ namespace UI
private Tween _returnTween; private Tween _returnTween;
private Vector2 _dragPointerOffset = Vector2.zero;
#endregion #endregion
#region Public Query #region Public Query
@ -185,10 +187,11 @@ namespace UI
_canvasGroup.blocksRaycasts = false; _canvasGroup.blocksRaycasts = false;
MoveToDragRoot(); MoveToDragRoot();
_rectTransform.SetAsLastSibling(); _rectTransform.SetAsLastSibling();
CacheDragOffset(eventData);
} }
/// <summary> /// <summary>
/// 拖拽中:按指针增量更新锚点位置。 /// 拖拽中:按屏幕坐标映射到父节点局部坐标更新位置。
/// </summary> /// </summary>
public void OnDrag(PointerEventData eventData) public void OnDrag(PointerEventData eventData)
{ {
@ -197,6 +200,13 @@ namespace UI
return; return;
} }
if (TryGetDragParent(out RectTransform dragParent) &&
TryGetPointerLocalPosition(eventData, dragParent, out Vector2 pointerLocalPosition))
{
_rectTransform.anchoredPosition = pointerLocalPosition + _dragPointerOffset;
return;
}
_rectTransform.anchoredPosition += eventData.delta; _rectTransform.anchoredPosition += eventData.delta;
} }
@ -216,6 +226,11 @@ namespace UI
if (!_isPlaced) if (!_isPlaced)
{ {
if (ShouldKeepDroppedInPartArea(eventData))
{
return;
}
ReturnToSpawnAnimated(); ReturnToSpawnAnimated();
} }
} }
@ -273,6 +288,138 @@ namespace UI
} }
} }
private void CacheDragOffset(PointerEventData eventData)
{
_dragPointerOffset = Vector2.zero;
if (!TryGetDragParent(out RectTransform dragParent))
{
return;
}
if (TryGetPointerLocalPosition(eventData, dragParent, out Vector2 pointerLocalPosition))
{
_dragPointerOffset = _rectTransform.anchoredPosition - pointerLocalPosition;
}
}
private bool TryGetDragParent(out RectTransform dragParent)
{
dragParent = _rectTransform.parent as RectTransform;
return dragParent != null;
}
private bool TryGetPointerLocalPosition(PointerEventData eventData, RectTransform targetRect,
out Vector2 localPosition)
{
localPosition = Vector2.zero;
if (eventData == null || targetRect == null)
{
return false;
}
Camera eventCamera = ResolveEventCamera(eventData);
return RectTransformUtility.ScreenPointToLocalPointInRectangle(targetRect, eventData.position, eventCamera,
out localPosition);
}
private Camera ResolveEventCamera(PointerEventData eventData)
{
if (eventData != null)
{
if (eventData.pressEventCamera != null)
{
return eventData.pressEventCamera;
}
if (eventData.enterEventCamera != null)
{
return eventData.enterEventCamera;
}
}
Canvas canvas = GetComponentInParent<Canvas>();
if (canvas != null && canvas.renderMode != RenderMode.ScreenSpaceOverlay)
{
return canvas.worldCamera;
}
return null;
}
private bool ShouldKeepDroppedInPartArea(PointerEventData eventData)
{
if (eventData == null)
{
return false;
}
if (!TryGetDragArea(out RectTransform dragArea))
{
return false;
}
Camera eventCamera = ResolveEventCamera(eventData);
if (!RectTransformUtility.RectangleContainsScreenPoint(dragArea, eventData.position, eventCamera))
{
return false;
}
ClampInsideDragArea(dragArea);
return true;
}
private bool TryGetDragArea(out RectTransform dragArea)
{
dragArea = null;
if (_controller == null)
{
return false;
}
dragArea = _controller.GetDragRoot() as RectTransform;
return dragArea != null;
}
private void ClampInsideDragArea(RectTransform dragArea)
{
if (dragArea == null)
{
return;
}
Vector2 current = _rectTransform.anchoredPosition;
Rect areaRect = dragArea.rect;
Rect partRect = _rectTransform.rect;
Vector2 pivot = _rectTransform.pivot;
Vector3 scale = _rectTransform.localScale;
float width = Mathf.Abs(partRect.width * scale.x);
float height = Mathf.Abs(partRect.height * scale.y);
float minX = areaRect.xMin + width * Mathf.Clamp01(pivot.x);
float maxX = areaRect.xMax - width * (1f - Mathf.Clamp01(pivot.x));
float minY = areaRect.yMin + height * Mathf.Clamp01(pivot.y);
float maxY = areaRect.yMax - height * (1f - Mathf.Clamp01(pivot.y));
if (minX > maxX)
{
float centerX = (areaRect.xMin + areaRect.xMax) * 0.5f;
minX = centerX;
maxX = centerX;
}
if (minY > maxY)
{
float centerY = (areaRect.yMin + areaRect.yMax) * 0.5f;
minY = centerY;
maxY = centerY;
}
current.x = Mathf.Clamp(current.x, minX, maxX);
current.y = Mathf.Clamp(current.y, minY, maxY);
_rectTransform.anchoredPosition = current;
}
#endregion #endregion
#region Placement #region Placement
@ -307,13 +454,7 @@ namespace UI
_currentSlot = slot; _currentSlot = slot;
_isPlaced = true; _isPlaced = true;
_isLocked = _lockAfterPlaced; _isLocked = _lockAfterPlaced;
_canvasGroup.blocksRaycasts = false;
RectTransform snapPoint = slot.SnapPoint;
_rectTransform.SetParent(snapPoint != null ? snapPoint : slot.transform, false);
_rectTransform.anchoredPosition = Vector2.zero;
_rectTransform.localRotation = Quaternion.identity;
_rectTransform.localScale = Vector3.one;
_canvasGroup.blocksRaycasts = !_isLocked;
} }
/// <summary> /// <summary>

View File

@ -1,3 +1,4 @@
using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using CustomComponent; using CustomComponent;
using Event; using Event;
@ -37,8 +38,20 @@ namespace UI
[SerializeField] [Range(0f, 1f)] private float _partSpawnMaxYNormalized = 0.9f; [SerializeField] [Range(0f, 1f)] private float _partSpawnMaxYNormalized = 0.9f;
[SerializeField] private float _completeToFinalStageDelay = 0.35f;
[SerializeField] private float _finalStageToCloseDelay = 0.35f;
private CombineComponent _controller; private CombineComponent _controller;
private CombineStageOverlay _stageOverlay;
private Coroutine _completeFlowCoroutine;
private bool _completionFlowStarted;
private bool _fireCompletedEventOnClose;
private readonly List<GameObject> _runtimeNodes = new(); private readonly List<GameObject> _runtimeNodes = new();
#endregion #endregion
@ -78,6 +91,10 @@ namespace UI
_controller.BindRuntimeContext(_slotRoot, _partRoot); _controller.BindRuntimeContext(_slotRoot, _partRoot);
GameEntry.Event.Subscribe(CombineFeedbackEventArgs.EventId, OnFeedbackChanged); GameEntry.Event.Subscribe(CombineFeedbackEventArgs.EventId, OnFeedbackChanged);
GameEntry.Event.Subscribe(CombineProgressEventArgs.EventId, OnCombineProgressChanged);
_completionFlowStarted = false;
_fireCompletedEventOnClose = false;
if (context.AutoStart) if (context.AutoStart)
{ {
@ -104,6 +121,15 @@ namespace UI
protected override void OnClose(bool isShutdown, object userData) protected override void OnClose(bool isShutdown, object userData)
{ {
GameEntry.Event.Unsubscribe(CombineFeedbackEventArgs.EventId, OnFeedbackChanged); GameEntry.Event.Unsubscribe(CombineFeedbackEventArgs.EventId, OnFeedbackChanged);
GameEntry.Event.Unsubscribe(CombineProgressEventArgs.EventId, OnCombineProgressChanged);
StopCompleteFlow();
if (_fireCompletedEventOnClose)
{
_fireCompletedEventOnClose = false;
GameEntry.Event.Fire(this, CombineCompletedEventArgs.Create());
}
if (_controller != null) if (_controller != null)
{ {
@ -163,6 +189,8 @@ namespace UI
private void ClearRuntimeNodes() private void ClearRuntimeNodes()
{ {
_stageOverlay = null;
for (int i = _runtimeNodes.Count - 1; i >= 0; i--) for (int i = _runtimeNodes.Count - 1; i >= 0; i--)
{ {
GameObject node = _runtimeNodes[i]; GameObject node = _runtimeNodes[i];
@ -213,6 +241,7 @@ namespace UI
CombineStageOverlay stageOverlay = structureNode.GetComponentInChildren<CombineStageOverlay>(true); CombineStageOverlay stageOverlay = structureNode.GetComponentInChildren<CombineStageOverlay>(true);
if (stageOverlay != null) if (stageOverlay != null)
{ {
_stageOverlay = stageOverlay;
List<CombineSlot> managedSlots = stageOverlay.GetManagedSlots(); List<CombineSlot> managedSlots = stageOverlay.GetManagedSlots();
if (managedSlots.Count > 0) if (managedSlots.Count > 0)
{ {
@ -313,6 +342,7 @@ namespace UI
if (rootRect.width <= 0f || rootRect.height <= 0f) if (rootRect.width <= 0f || rootRect.height <= 0f)
{ {
partRect.anchoredPosition = _partStartAnchoredPosition + Vector2.down * (_partVerticalSpacing * index); partRect.anchoredPosition = _partStartAnchoredPosition + Vector2.down * (_partVerticalSpacing * index);
ClampAnchoredPositionToPartRoot(partRect);
return; return;
} }
@ -325,9 +355,69 @@ namespace UI
float maxY = Mathf.Lerp(rootRect.yMin, rootRect.yMax, float maxY = Mathf.Lerp(rootRect.yMin, rootRect.yMax,
Mathf.Max(_partSpawnMinYNormalized, _partSpawnMaxYNormalized)); Mathf.Max(_partSpawnMinYNormalized, _partSpawnMaxYNormalized));
Vector2 size = GetPartSize(partRect);
Vector2 xRange = BuildSafeAxisRange(minX, maxX, rootRect.xMin, rootRect.xMax, size.x, partRect.pivot.x);
Vector2 yRange = BuildSafeAxisRange(minY, maxY, rootRect.yMin, rootRect.yMax, size.y, partRect.pivot.y);
partRect.anchoredPosition = new Vector2( partRect.anchoredPosition = new Vector2(
Random.Range(minX, maxX), Random.Range(xRange.x, xRange.y),
Random.Range(minY, maxY)); Random.Range(yRange.x, yRange.y));
}
private static Vector2 BuildSafeAxisRange(float desiredMin, float desiredMax, float containerMin, float containerMax,
float partSize, float pivot)
{
float min = Mathf.Min(desiredMin, desiredMax);
float max = Mathf.Max(desiredMin, desiredMax);
float size = Mathf.Max(0f, partSize);
float safeMin = containerMin + size * Mathf.Clamp01(pivot);
float safeMax = containerMax - size * (1f - Mathf.Clamp01(pivot));
if (safeMin > safeMax)
{
float center = (containerMin + containerMax) * 0.5f;
safeMin = center;
safeMax = center;
}
min = Mathf.Clamp(min, safeMin, safeMax);
max = Mathf.Clamp(max, safeMin, safeMax);
if (min > max)
{
float temp = min;
min = max;
max = temp;
}
return new Vector2(min, max);
}
private static Vector2 GetPartSize(RectTransform partRect)
{
Rect rect = partRect.rect;
Vector3 scale = partRect.localScale;
return new Vector2(
Mathf.Abs(rect.width * scale.x),
Mathf.Abs(rect.height * scale.y));
}
private void ClampAnchoredPositionToPartRoot(RectTransform partRect)
{
if (partRect == null || _partRoot == null)
{
return;
}
Rect rootRect = _partRoot.rect;
Vector2 anchored = partRect.anchoredPosition;
Vector2 size = GetPartSize(partRect);
Vector2 xRange = BuildSafeAxisRange(anchored.x, anchored.x, rootRect.xMin, rootRect.xMax, size.x, partRect.pivot.x);
Vector2 yRange = BuildSafeAxisRange(anchored.y, anchored.y, rootRect.yMin, rootRect.yMax, size.y, partRect.pivot.y);
partRect.anchoredPosition = new Vector2(xRange.x, yRange.x);
} }
#endregion #endregion
@ -343,6 +433,60 @@ namespace UI
} }
} }
private void OnCombineProgressChanged(object sender, GameEventArgs e)
{
if (!(e is CombineProgressEventArgs args))
{
return;
}
if (args.TotalSteps <= 0 || args.CurrentStep < args.TotalSteps || _completionFlowStarted)
{
return;
}
_completionFlowStarted = true;
StopCompleteFlow();
_completeFlowCoroutine = StartCoroutine(PlayCompleteFlow());
}
private IEnumerator PlayCompleteFlow()
{
float delayToFinalStage = Mathf.Max(0f, _completeToFinalStageDelay);
if (delayToFinalStage > 0f)
{
yield return new WaitForSecondsRealtime(delayToFinalStage);
}
if (_stageOverlay != null && _controller != null)
{
// For N parts, progress displays sprite[N-1]; completion tail uses sprite[N].
int finalStageIndex = _controller.TotalStep;
_stageOverlay.ApplyOverlayByIndex(finalStageIndex);
}
float delayToClose = Mathf.Max(0f, _finalStageToCloseDelay);
if (delayToClose > 0f)
{
yield return new WaitForSecondsRealtime(delayToClose);
}
_fireCompletedEventOnClose = true;
_completeFlowCoroutine = null;
Close();
}
private void StopCompleteFlow()
{
if (_completeFlowCoroutine == null)
{
return;
}
StopCoroutine(_completeFlowCoroutine);
_completeFlowCoroutine = null;
}
#endregion #endregion
} }
} }

View File

@ -96,19 +96,35 @@ namespace UI
return; return;
} }
if (currentStep <= 0 || _stageSprites == null || _stageSprites.Count == 0) // Keep overlay's initial sprite/layout untouched before any placement.
if (currentStep <= 0)
{
return;
}
if (_stageSprites == null || _stageSprites.Count == 0)
{ {
_overlayImage.sprite = null;
return; return;
} }
int spriteIndex = Mathf.Clamp(currentStep - 1, 0, _stageSprites.Count - 1); int spriteIndex = Mathf.Clamp(currentStep - 1, 0, _stageSprites.Count - 1);
Sprite sprite = _stageSprites[spriteIndex]; ApplyOverlayByIndex(spriteIndex);
_overlayImage.sprite = sprite; }
if (sprite != null)
public bool ApplyOverlayByIndex(int spriteIndex)
{ {
_overlayImage.SetNativeSize(); if (_overlayImage == null || _stageSprites == null || _stageSprites.Count == 0)
} {
return false;
}
if (spriteIndex < 0 || spriteIndex >= _stageSprites.Count)
{
return false;
}
_overlayImage.sprite = _stageSprites[spriteIndex];
return true;
} }
} }
} }

View File

@ -0,0 +1,18 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8e4367863f5042e1b5b0b3b3b7f62f5e, type: 3}
m_Name: Dialog1005
m_EditorClassIdentifier:
_enabled: 1
_triggerType: 1
_triggerId: 1005
_dialogId: 1006

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 70719c1cfdc4d3d4784c3665bb8971f2
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,18 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8e4367863f5042e1b5b0b3b3b7f62f5e, type: 3}
m_Name: Dialog2004
m_EditorClassIdentifier:
_enabled: 1
_triggerType: 1
_triggerId: 2004
_dialogId: 2005

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: a1399a928de585b4db36dd6971370db1
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@ -13,6 +13,6 @@ MonoBehaviour:
m_Name: Dialog2005 m_Name: Dialog2005
m_EditorClassIdentifier: m_EditorClassIdentifier:
_enabled: 1 _enabled: 1
_triggerType: 1 _triggerType: 0
_triggerId: 2005 _triggerId: 2005
_dialogId: 2006 _dialogId: 2006

View File

@ -107,12 +107,12 @@ RectTransform:
m_Children: m_Children:
- {fileID: 2976691118114127848} - {fileID: 2976691118114127848}
- {fileID: 1740328780267263940} - {fileID: 1740328780267263940}
- {fileID: 3836746855600990764}
- {fileID: 5792497928833933334}
- {fileID: 2906817591701175206}
- {fileID: 6752727998275489566}
- {fileID: 2012441421303829031}
- {fileID: 5822314726620909925} - {fileID: 5822314726620909925}
- {fileID: 2012441421303829031}
- {fileID: 6752727998275489566}
- {fileID: 2906817591701175206}
- {fileID: 5792497928833933334}
- {fileID: 3836746855600990764}
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMin: {x: 0.5, y: 0.5}
@ -250,6 +250,11 @@ PrefabInstance:
propertyPath: m_IsActive propertyPath: m_IsActive
value: 1 value: 1
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 6042841259353758438, guid: 0bbb3a6d1e6bb8b4a9b4d8f0510d9c63,
type: 3}
propertyPath: m_Color.a
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6311038108332227273, guid: 0bbb3a6d1e6bb8b4a9b4d8f0510d9c63, - target: {fileID: 6311038108332227273, guid: 0bbb3a6d1e6bb8b4a9b4d8f0510d9c63,
type: 3} type: 3}
propertyPath: m_Pivot.x propertyPath: m_Pivot.x
@ -917,11 +922,6 @@ PrefabInstance:
propertyPath: m_Name propertyPath: m_Name
value: Slot 1 value: Slot 1
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 666986232687351230, guid: 0bbb3a6d1e6bb8b4a9b4d8f0510d9c63,
type: 3}
propertyPath: m_IsActive
value: 1
objectReference: {fileID: 0}
- target: {fileID: 6311038108332227273, guid: 0bbb3a6d1e6bb8b4a9b4d8f0510d9c63, - target: {fileID: 6311038108332227273, guid: 0bbb3a6d1e6bb8b4a9b4d8f0510d9c63,
type: 3} type: 3}
propertyPath: m_Pivot.x propertyPath: m_Pivot.x
@ -1022,29 +1022,7 @@ PrefabInstance:
propertyPath: m_LocalEulerAnglesHint.z propertyPath: m_LocalEulerAnglesHint.z
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 8505202863679558386, guid: 0bbb3a6d1e6bb8b4a9b4d8f0510d9c63, m_RemovedComponents: []
type: 3}
propertyPath: m_Sprite
value:
objectReference: {fileID: -525514452, guid: b996df9807bbd234dbcf6fa7ada6204a,
type: 3}
- target: {fileID: 8505202863679558386, guid: 0bbb3a6d1e6bb8b4a9b4d8f0510d9c63,
type: 3}
propertyPath: m_Color.b
value: 1
objectReference: {fileID: 0}
- target: {fileID: 8505202863679558386, guid: 0bbb3a6d1e6bb8b4a9b4d8f0510d9c63,
type: 3}
propertyPath: m_Color.g
value: 1
objectReference: {fileID: 0}
- target: {fileID: 8505202863679558386, guid: 0bbb3a6d1e6bb8b4a9b4d8f0510d9c63,
type: 3}
propertyPath: m_Color.r
value: 1
objectReference: {fileID: 0}
m_RemovedComponents:
- {fileID: 8505202863679558386, guid: 0bbb3a6d1e6bb8b4a9b4d8f0510d9c63, type: 3}
m_RemovedGameObjects: [] m_RemovedGameObjects: []
m_AddedGameObjects: [] m_AddedGameObjects: []
m_AddedComponents: [] m_AddedComponents: []

View File

@ -107,12 +107,12 @@ RectTransform:
m_Children: m_Children:
- {fileID: 6713220879011963817} - {fileID: 6713220879011963817}
- {fileID: 7125203660545100135} - {fileID: 7125203660545100135}
- {fileID: 705482162937796015}
- {fileID: 6459151817217565989}
- {fileID: 2024599515634043569}
- {fileID: 5879187811660410120}
- {fileID: 5376583332104577173}
- {fileID: 9157560992434891723} - {fileID: 9157560992434891723}
- {fileID: 5376583332104577173}
- {fileID: 5879187811660410120}
- {fileID: 2024599515634043569}
- {fileID: 6459151817217565989}
- {fileID: 705482162937796015}
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMin: {x: 0.5, y: 0.5}

View File

@ -11,7 +11,7 @@ GameObject:
- component: {fileID: 6311038108332227273} - component: {fileID: 6311038108332227273}
- component: {fileID: 7403865899990918019} - component: {fileID: 7403865899990918019}
- component: {fileID: 3955439386906642274} - component: {fileID: 3955439386906642274}
- component: {fileID: 8505202863679558386} - component: {fileID: 6042841259353758438}
m_Layer: 5 m_Layer: 5
m_Name: Slot m_Name: Slot
m_TagString: Untagged m_TagString: Untagged
@ -54,8 +54,6 @@ MonoBehaviour:
_buildOrder: 0 _buildOrder: 0
_requireStrictOrder: 1 _requireStrictOrder: 1
_snapPoint: {fileID: 6311038108332227273} _snapPoint: {fileID: 6311038108332227273}
_mechanicsExplanation:
_mismatchHint:
--- !u!222 &3955439386906642274 --- !u!222 &3955439386906642274
CanvasRenderer: CanvasRenderer:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -64,7 +62,7 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 666986232687351230} m_GameObject: {fileID: 666986232687351230}
m_CullTransparentMesh: 1 m_CullTransparentMesh: 1
--- !u!114 &8505202863679558386 --- !u!114 &6042841259353758438
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
@ -77,7 +75,7 @@ MonoBehaviour:
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
m_Material: {fileID: 0} m_Material: {fileID: 0}
m_Color: {r: 0, g: 0, b: 0, a: 1} m_Color: {r: 1, g: 1, b: 1, a: 0}
m_RaycastTarget: 1 m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1 m_Maskable: 1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 387 KiB

After

Width:  |  Height:  |  Size: 256 KiB

View File

@ -123,7 +123,7 @@ TextureImporter:
serializedVersion: 2 serializedVersion: 2
sprites: sprites:
- serializedVersion: 2 - serializedVersion: 2
name: puzzle1-part4_0 name: puzzle1-part1
rect: rect:
serializedVersion: 2 serializedVersion: 2
x: 258 x: 258
@ -131,7 +131,7 @@ TextureImporter:
width: 157 width: 157
height: 380 height: 380
alignment: 0 alignment: 0
pivot: {x: 0, y: 0} pivot: {x: 0.5, y: 0.5}
border: {x: 0, y: 0, z: 0, w: 0} border: {x: 0, y: 0, z: 0, w: 0}
outline: [] outline: []
physicsShape: [] physicsShape: []
@ -154,7 +154,7 @@ TextureImporter:
weights: [] weights: []
secondaryTextures: [] secondaryTextures: []
nameFileIdTable: nameFileIdTable:
puzzle1-part4_0: -525514452 puzzle1-part1: -525514452
mipmapLimitGroupName: mipmapLimitGroupName:
pSDRemoveMatte: 0 pSDRemoveMatte: 0
userData: userData:

View File

@ -123,7 +123,7 @@ TextureImporter:
serializedVersion: 2 serializedVersion: 2
sprites: sprites:
- serializedVersion: 2 - serializedVersion: 2
name: puzzle1-part5_0 name: puzzle1-part2
rect: rect:
serializedVersion: 2 serializedVersion: 2
x: 22 x: 22
@ -131,7 +131,7 @@ TextureImporter:
width: 206 width: 206
height: 167 height: 167
alignment: 0 alignment: 0
pivot: {x: 0, y: 0} pivot: {x: 0.5, y: 0.5}
border: {x: 0, y: 0, z: 0, w: 0} border: {x: 0, y: 0, z: 0, w: 0}
outline: [] outline: []
physicsShape: [] physicsShape: []
@ -154,7 +154,7 @@ TextureImporter:
weights: [] weights: []
secondaryTextures: [] secondaryTextures: []
nameFileIdTable: nameFileIdTable:
puzzle1-part5_0: -832410263 puzzle1-part2: -832410263
mipmapLimitGroupName: mipmapLimitGroupName:
pSDRemoveMatte: 0 pSDRemoveMatte: 0
userData: userData:

View File

@ -123,7 +123,7 @@ TextureImporter:
serializedVersion: 2 serializedVersion: 2
sprites: sprites:
- serializedVersion: 2 - serializedVersion: 2
name: puzzle1-part6_0 name: puzzle1-part3
rect: rect:
serializedVersion: 2 serializedVersion: 2
x: 452 x: 452
@ -131,7 +131,7 @@ TextureImporter:
width: 237 width: 237
height: 159 height: 159
alignment: 0 alignment: 0
pivot: {x: 0, y: 0} pivot: {x: 0.5, y: 0.5}
border: {x: 0, y: 0, z: 0, w: 0} border: {x: 0, y: 0, z: 0, w: 0}
outline: [] outline: []
physicsShape: [] physicsShape: []
@ -154,7 +154,7 @@ TextureImporter:
weights: [] weights: []
secondaryTextures: [] secondaryTextures: []
nameFileIdTable: nameFileIdTable:
puzzle1-part6_0: 1284561599 puzzle1-part3: 1284561599
mipmapLimitGroupName: mipmapLimitGroupName:
pSDRemoveMatte: 0 pSDRemoveMatte: 0
userData: userData:

View File

@ -123,7 +123,7 @@ TextureImporter:
serializedVersion: 2 serializedVersion: 2
sprites: sprites:
- serializedVersion: 2 - serializedVersion: 2
name: puzzle1-part3_0 name: puzzle1-part4
rect: rect:
serializedVersion: 2 serializedVersion: 2
x: 134 x: 134
@ -131,7 +131,7 @@ TextureImporter:
width: 434 width: 434
height: 119 height: 119
alignment: 0 alignment: 0
pivot: {x: 0, y: 0} pivot: {x: 0.5, y: 0.5}
border: {x: 0, y: 0, z: 0, w: 0} border: {x: 0, y: 0, z: 0, w: 0}
outline: [] outline: []
physicsShape: [] physicsShape: []
@ -154,7 +154,7 @@ TextureImporter:
weights: [] weights: []
secondaryTextures: [] secondaryTextures: []
nameFileIdTable: nameFileIdTable:
puzzle1-part3_0: -987589928 puzzle1-part4: -987589928
mipmapLimitGroupName: mipmapLimitGroupName:
pSDRemoveMatte: 0 pSDRemoveMatte: 0
userData: userData:

View File

@ -123,7 +123,7 @@ TextureImporter:
serializedVersion: 2 serializedVersion: 2
sprites: sprites:
- serializedVersion: 2 - serializedVersion: 2
name: puzzle1-part1_0 name: puzzle1-part5
rect: rect:
serializedVersion: 2 serializedVersion: 2
x: 117 x: 117
@ -131,7 +131,7 @@ TextureImporter:
width: 225 width: 225
height: 162 height: 162
alignment: 0 alignment: 0
pivot: {x: 0, y: 0} pivot: {x: 0.5, y: 0.5}
border: {x: 0, y: 0, z: 0, w: 0} border: {x: 0, y: 0, z: 0, w: 0}
outline: [] outline: []
physicsShape: [] physicsShape: []
@ -154,7 +154,7 @@ TextureImporter:
weights: [] weights: []
secondaryTextures: [] secondaryTextures: []
nameFileIdTable: nameFileIdTable:
puzzle1-part1_0: -1516610160 puzzle1-part5: -1516610160
mipmapLimitGroupName: mipmapLimitGroupName:
pSDRemoveMatte: 0 pSDRemoveMatte: 0
userData: userData:

View File

@ -123,7 +123,7 @@ TextureImporter:
serializedVersion: 2 serializedVersion: 2
sprites: sprites:
- serializedVersion: 2 - serializedVersion: 2
name: puzzle1-part2_0 name: puzzle1-part6
rect: rect:
serializedVersion: 2 serializedVersion: 2
x: 356 x: 356
@ -131,7 +131,7 @@ TextureImporter:
width: 316 width: 316
height: 153 height: 153
alignment: 0 alignment: 0
pivot: {x: 0, y: 0} pivot: {x: 0.5, y: 0.5}
border: {x: 0, y: 0, z: 0, w: 0} border: {x: 0, y: 0, z: 0, w: 0}
outline: [] outline: []
physicsShape: [] physicsShape: []
@ -154,7 +154,7 @@ TextureImporter:
weights: [] weights: []
secondaryTextures: [] secondaryTextures: []
nameFileIdTable: nameFileIdTable:
puzzle1-part2_0: 1334563188 puzzle1-part6: 1334563188
mipmapLimitGroupName: mipmapLimitGroupName:
pSDRemoveMatte: 0 pSDRemoveMatte: 0
userData: userData:

View File

@ -1426,8 +1426,10 @@ MonoBehaviour:
- {fileID: 11400000, guid: ca6d8fc1e5685c549abfb652ad07fa31, type: 2} - {fileID: 11400000, guid: ca6d8fc1e5685c549abfb652ad07fa31, type: 2}
- {fileID: 11400000, guid: 044addf3f9fd75c4b979f732f1d5b270, type: 2} - {fileID: 11400000, guid: 044addf3f9fd75c4b979f732f1d5b270, type: 2}
- {fileID: 11400000, guid: 3772a85732f8a6f44a7418878b85b7a5, type: 2} - {fileID: 11400000, guid: 3772a85732f8a6f44a7418878b85b7a5, type: 2}
- {fileID: 11400000, guid: 638ca342190613c40b05e45091988549, type: 2}
- {fileID: 11400000, guid: 3f853a1029e766343b69579255e40bbc, type: 2} - {fileID: 11400000, guid: 3f853a1029e766343b69579255e40bbc, type: 2}
- {fileID: 11400000, guid: 4439eec25b0603e4abc486862811413a, type: 2} - {fileID: 11400000, guid: 4439eec25b0603e4abc486862811413a, type: 2}
- {fileID: 11400000, guid: 70719c1cfdc4d3d4784c3665bb8971f2, type: 2}
- {fileID: 11400000, guid: 70abcb8196a34ab4293f06f432f45446, type: 2} - {fileID: 11400000, guid: 70abcb8196a34ab4293f06f432f45446, type: 2}
- {fileID: 11400000, guid: 20a90da7b22b040428da0c9c38c892d0, type: 2} - {fileID: 11400000, guid: 20a90da7b22b040428da0c9c38c892d0, type: 2}
- {fileID: 11400000, guid: 993a30dececf3c849b753dec84f5a6f0, type: 2} - {fileID: 11400000, guid: 993a30dececf3c849b753dec84f5a6f0, type: 2}

View File

@ -14,3 +14,4 @@
107 游戏场景覆盖UI MainOverlayForm Overlay False False 107 游戏场景覆盖UI MainOverlayForm Overlay False False
108 AI对话UI AIChatForm Overlay False False 108 AI对话UI AIChatForm Overlay False False
109 章节标题UI ChapterTitleForm Overlay False False 109 章节标题UI ChapterTitleForm Overlay False False
110 AI对话入口 AIChatEntryForm Top False False

Binary file not shown.