fix(scene-mgmt): 修复相机切换 blend 时间计算
This commit is contained in:
@@ -156,6 +156,12 @@ namespace AibisDream.Framework
|
||||
{
|
||||
yield return new WaitForSeconds(switchDuration);
|
||||
}
|
||||
else
|
||||
{
|
||||
// 至少等待两帧,确保相机切换完成
|
||||
yield return null;
|
||||
yield return null;
|
||||
}
|
||||
}
|
||||
|
||||
private float SwitchCameraSync(CameraEnum camType, bool immediate = false)
|
||||
@@ -181,6 +187,9 @@ namespace AibisDream.Framework
|
||||
CinemachineBlendDefinition.Style.Cut, 0f);
|
||||
}
|
||||
|
||||
_virtualCameraDict.TryGetValue(_curCameraEnum, out var fromVCam);
|
||||
var toVCam = _virtualCameraDict[camType];
|
||||
|
||||
// 设置虚拟相机优先级
|
||||
foreach (var camPair in _virtualCameraDict)
|
||||
{
|
||||
@@ -199,9 +208,34 @@ namespace AibisDream.Framework
|
||||
return 0f;
|
||||
}
|
||||
|
||||
ActionKit.Delay(activeBrain.m_DefaultBlend.BlendTime, () => ResetVirCam(lastCamEnum)).StartGlobal();
|
||||
// CinemachineBrain.LookupBlend 在 2.x 中是 private,这里重写其等价逻辑:
|
||||
// Custom Blends 资产里有匹配项就用它,否则回退到 Default Blend。
|
||||
var blendTime = ResolveBlendTime(activeBrain, fromVCam, toVCam);
|
||||
ActionKit.Delay(blendTime, () => ResetVirCam(lastCamEnum)).StartGlobal();
|
||||
|
||||
return activeBrain.m_DefaultBlend.BlendTime;
|
||||
return blendTime;
|
||||
}
|
||||
|
||||
private static float ResolveBlendTime(
|
||||
CinemachineBrain brain,
|
||||
ICinemachineCamera fromCam,
|
||||
ICinemachineCamera toCam)
|
||||
{
|
||||
var blend = brain.m_DefaultBlend;
|
||||
|
||||
if (brain.m_CustomBlends != null)
|
||||
{
|
||||
var fromName = fromCam != null ? fromCam.Name : string.Empty;
|
||||
var toName = toCam != null ? toCam.Name : string.Empty;
|
||||
blend = brain.m_CustomBlends.GetBlendForVirtualCameras(fromName, toName, blend);
|
||||
}
|
||||
|
||||
if (CinemachineCore.GetBlendOverride != null)
|
||||
{
|
||||
blend = CinemachineCore.GetBlendOverride(fromCam, toCam, blend, brain);
|
||||
}
|
||||
|
||||
return blend.BlendTime;
|
||||
}
|
||||
|
||||
public void ResetCamera()
|
||||
|
||||
@@ -95,7 +95,7 @@ namespace AibisDream
|
||||
|
||||
public IEnumerator Enter()
|
||||
{
|
||||
yield return CameraKit.Instance.SwitchCamera(CameraEnum.Subway, true);
|
||||
yield return CameraKit.Instance.SwitchCamera(CameraEnum.Subway);
|
||||
DialogUIManager.Instance.LoadBubbles(SubwayCenter.Instance.subwaySlots.CollectData());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user