feat(scene-mgmt): 支持无线轱辘分层与加速晃动

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-20 03:47:05 +08:00
co-authored by Cursor
parent 6e5e5d5790
commit cca5404f0c
@@ -16,6 +16,7 @@ namespace AibisDream
private const string DreamSpritePath = "Sprite/梦境/{0}.png";
private const string KiteBaseSuffix = "_底图";
private const string KiteMotionSuffix = "_风筝层";
private const float ReelMotionSpeedMultiplier = 2f;
[SerializeField] private SpriteRenderer _spriteRenderer;
[SerializeField] private SpriteRenderer _backgroundSpriteRenderer;
@@ -393,6 +394,12 @@ namespace AibisDream
: motionProfile.Trim().ToLowerInvariant();
}
private static bool IsReelPic(string picName)
{
var normalized = NormalizeDreamPicName(picName);
return normalized == "D2S轱辘" || normalized == "D2S轱辘没线";
}
private Vector3 BaseOffset(float x, float y)
{
return _smallBaseLocalPosition + _smallMotionBaseOffset + new Vector3(x, y, 0f);
@@ -402,8 +409,9 @@ namespace AibisDream
{
var normalized = NormalizeDreamPicName(picName);
// 风筝图已改由风筝 Rig(ShowKite 等)连续驱动,分层底图+遮罩通路仅保留给轱辘特写
if (normalized == "D2S轱辘")
// 风筝图已改由风筝 Rig(ShowKite 等)连续驱动,分层底图+遮罩通路仅保留给轱辘特写
// 普通阶段用有线轱辘,结尾受力晃动改用无线轱辘;两张图各自使用对应的拆分层。
if (IsReelPic(normalized))
{
basePicName = $"{normalized}{KiteBaseSuffix}";
motionPicName = $"{normalized}{KiteMotionSuffix}";
@@ -444,6 +452,7 @@ namespace AibisDream
return;
}
seq.timeScale = ReelMotionSpeedMultiplier;
_smallMotionSequence = seq;
}
@@ -568,6 +577,7 @@ namespace AibisDream
}
seq.OnComplete(() => PlayReelHold(tr, Mathf.Min(1f, strain + 0.22f)));
seq.timeScale = ReelMotionSpeedMultiplier;
_smallMotionSequence = seq;
}
@@ -715,7 +725,7 @@ namespace AibisDream
var useSplitMotion = TryGetSplitMotionPicNames(picName, out var basePicName, out var motionPicName);
var isSamePic = string.Equals(_currentSmallPicName, normalizedName, StringComparison.OrdinalIgnoreCase)
&& _currentSmallUsesSplitLayers == useSplitMotion;
_smallMotionBaseOffset = normalizedName == "D2S轱辘" ? new Vector3(0f, -0.32f, 0f) : Vector3.zero;
_smallMotionBaseOffset = IsReelPic(normalizedName) ? new Vector3(0f, -0.32f, 0f) : Vector3.zero;
KillSmallTweenState();
@@ -1072,7 +1082,7 @@ namespace AibisDream
if (_spriteRenderer == null) yield break;
var normalizedName = NormalizeDreamPicName(picName);
_smallMotionBaseOffset = normalizedName == "D2S轱辘" ? new Vector3(0f, -0.32f, 0f) : Vector3.zero;
_smallMotionBaseOffset = IsReelPic(normalizedName) ? new Vector3(0f, -0.32f, 0f) : Vector3.zero;
_spriteRenderer.gameObject.SetActive(true);
if (usesSplitLayers)