Bezi回来了
This commit is contained in:
@@ -12,29 +12,21 @@ namespace Cielonos.MainGame.Effects.Feedback
|
||||
[Serializable]
|
||||
public struct FloatCurveChannel
|
||||
{
|
||||
/// <summary>
|
||||
/// 是否启用此通道。
|
||||
/// </summary>
|
||||
public bool active;
|
||||
|
||||
/// <summary>
|
||||
/// 震动曲线,X轴为归一化时间[0,1],Y轴为强度[0,1]。
|
||||
/// </summary>
|
||||
[ShowIf("active")]
|
||||
[ShakeCurvePreset]
|
||||
public AnimationCurve curve;
|
||||
|
||||
/// <summary>
|
||||
/// 曲线值0对应的实际数值。
|
||||
/// </summary>
|
||||
[ShowIf("active")]
|
||||
[LabelText("Remap Min")]
|
||||
public float remapMin;
|
||||
|
||||
/// <summary>
|
||||
/// 曲线值1对应的实际数值。
|
||||
/// </summary>
|
||||
[ShowIf("active")]
|
||||
[LabelText("Remap Max")]
|
||||
public float remapMax;
|
||||
|
||||
@@ -47,11 +39,10 @@ namespace Cielonos.MainGame.Effects.Feedback
|
||||
/// <summary>
|
||||
/// 创建默认的曲线通道。
|
||||
/// </summary>
|
||||
public static FloatCurveChannel CreateDefault(bool active = true, float remapMin = 0f, float remapMax = 1f, bool relativeToInitial = true)
|
||||
public static FloatCurveChannel CreateDefault(float remapMin = 0f, float remapMax = 1f, bool relativeToInitial = true)
|
||||
{
|
||||
return new FloatCurveChannel
|
||||
{
|
||||
active = active,
|
||||
curve = new AnimationCurve(
|
||||
new Keyframe(0f, 0f),
|
||||
new Keyframe(0.5f, 1f),
|
||||
@@ -68,7 +59,7 @@ namespace Cielonos.MainGame.Effects.Feedback
|
||||
/// </summary>
|
||||
public readonly float Evaluate(float normalizedTime)
|
||||
{
|
||||
if (!active || curve == null) return 0f;
|
||||
if (curve == null) return 0f;
|
||||
float t = Mathf.Clamp01(normalizedTime);
|
||||
float curveValue = curve.Evaluate(t);
|
||||
return Mathf.LerpUnclamped(remapMin, remapMax, curveValue);
|
||||
@@ -81,15 +72,9 @@ namespace Cielonos.MainGame.Effects.Feedback
|
||||
[Serializable]
|
||||
public struct ColorCurveChannel
|
||||
{
|
||||
/// <summary>
|
||||
/// 是否启用此通道。
|
||||
/// </summary>
|
||||
public bool active;
|
||||
|
||||
/// <summary>
|
||||
/// 颜色渐变。
|
||||
/// </summary>
|
||||
[ShowIf("active")]
|
||||
[LabelText("颜色渐变")]
|
||||
public Gradient gradient;
|
||||
|
||||
@@ -100,7 +85,6 @@ namespace Cielonos.MainGame.Effects.Feedback
|
||||
{
|
||||
return new ColorCurveChannel
|
||||
{
|
||||
active = true,
|
||||
gradient = new Gradient()
|
||||
};
|
||||
}
|
||||
@@ -110,7 +94,7 @@ namespace Cielonos.MainGame.Effects.Feedback
|
||||
/// </summary>
|
||||
public Color Evaluate(float normalizedTime)
|
||||
{
|
||||
if (!active || gradient == null) return Color.white;
|
||||
if (gradient == null) return Color.white;
|
||||
return gradient.Evaluate(Mathf.Clamp01(normalizedTime));
|
||||
}
|
||||
}
|
||||
@@ -121,23 +105,17 @@ namespace Cielonos.MainGame.Effects.Feedback
|
||||
[Serializable]
|
||||
public struct Vector2CurveChannel
|
||||
{
|
||||
public bool active;
|
||||
|
||||
[ShowIf("active")]
|
||||
[LabelText("曲线 X")]
|
||||
[ShakeCurvePreset]
|
||||
public AnimationCurve curveX;
|
||||
|
||||
[ShowIf("active")]
|
||||
|
||||
[LabelText("曲线 Y")]
|
||||
[ShakeCurvePreset]
|
||||
public AnimationCurve curveY;
|
||||
|
||||
[ShowIf("active")]
|
||||
|
||||
[LabelText("Remap Min")]
|
||||
public Vector2 remapMin;
|
||||
|
||||
[ShowIf("active")]
|
||||
|
||||
[LabelText("Remap Max")]
|
||||
public Vector2 remapMax;
|
||||
|
||||
@@ -153,7 +131,6 @@ namespace Cielonos.MainGame.Effects.Feedback
|
||||
{
|
||||
return new Vector2CurveChannel
|
||||
{
|
||||
active = true,
|
||||
curveX = new AnimationCurve(new Keyframe(0f, 0f), new Keyframe(1f, 1f)),
|
||||
curveY = new AnimationCurve(new Keyframe(0f, 0f), new Keyframe(1f, 1f)),
|
||||
remapMin = Vector2.zero,
|
||||
@@ -164,9 +141,8 @@ namespace Cielonos.MainGame.Effects.Feedback
|
||||
/// <summary>
|
||||
/// 根据归一化时间计算Vector2值。
|
||||
/// </summary>
|
||||
public Vector2 Evaluate(float normalizedTime, Vector2 initialValue)
|
||||
public readonly Vector2 Evaluate(float normalizedTime, Vector2 initialValue)
|
||||
{
|
||||
if (!active) return Vector2.zero;
|
||||
float t = Mathf.Clamp01(normalizedTime);
|
||||
float x = curveX?.Evaluate(t) ?? 0f;
|
||||
float y = curveY?.Evaluate(t) ?? 0f;
|
||||
|
||||
@@ -39,26 +39,19 @@ namespace Cielonos.MainGame.Effects.Feedback
|
||||
/// 将给定的本地空间向量根据当前设置转换到世界空间。
|
||||
/// 如果两个方向都开启,角色方向优先。
|
||||
/// </summary>
|
||||
/// <param name="localAmplitude">本地空间下的振幅向量</param>
|
||||
/// <param name="standardScreenVector">在摄像机和角色相同朝向时,屏幕空间的振幅向量</param>
|
||||
/// <param name="ownerTransform">角色 Transform(可能为 null)</param>
|
||||
/// <returns>经方向变换后的振幅向量</returns>
|
||||
public Vector3 TransformAmplitude(Vector3 localAmplitude, Transform ownerTransform)
|
||||
public Vector3 TransformAmplitude(Vector3 standardScreenVector, Transform ownerTransform)
|
||||
{
|
||||
if (affectedByCharacterDirection && ownerTransform != null)
|
||||
{
|
||||
return ownerTransform.TransformDirection(localAmplitude);
|
||||
}
|
||||
Camera mainCamera = MainGameManager.Instance?.player?.viewSc?.playerCamera;
|
||||
if (mainCamera == null) return standardScreenVector;
|
||||
|
||||
if (affectedByCameraDirection)
|
||||
{
|
||||
Camera mainCamera = MainGameManager.Instance.player.viewSc.playerCamera;
|
||||
if (mainCamera != null)
|
||||
{
|
||||
return mainCamera.transform.TransformDirection(localAmplitude);
|
||||
}
|
||||
}
|
||||
Quaternion characterRotation = ownerTransform?.rotation ?? Quaternion.identity;
|
||||
Quaternion cameraRotation = mainCamera.transform.rotation;
|
||||
|
||||
return localAmplitude;
|
||||
Quaternion deltaRotation = Quaternion.Inverse(cameraRotation) * characterRotation;
|
||||
return deltaRotation * standardScreenVector;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@ namespace Cielonos.MainGame.Effects.Feedback
|
||||
|
||||
[TitleGroup("FOV设置")]
|
||||
[LabelText("FOV曲线")]
|
||||
public FloatCurveChannel fovCurve = FloatCurveChannel.CreateDefault(remapMax: 10f);
|
||||
public FloatCurveChannel fovCurve = FloatCurveChannel.CreateDefault();
|
||||
|
||||
protected override void TriggerEvent(FeedbackContext context)
|
||||
{
|
||||
@@ -30,11 +30,6 @@ namespace Cielonos.MainGame.Effects.Feedback
|
||||
|
||||
public override bool Validate(out string error)
|
||||
{
|
||||
if (!fovCurve.active)
|
||||
{
|
||||
error = "FOV curve is not enabled.";
|
||||
return false;
|
||||
}
|
||||
error = null;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -44,7 +44,7 @@ namespace Cielonos.MainGame.Effects.Feedback
|
||||
{
|
||||
Vector3 finalAmplitude = directionSettings.TransformAmplitude(amplitude, context.owner);
|
||||
float intensityMultiplier = ComputeAttenuation(context);
|
||||
CameraRotationShakeEvent.Trigger(context, intensityCurve, finalAmplitude * intensityMultiplier);
|
||||
CameraPositionShakeEvent.Trigger(context, intensityCurve, finalAmplitude * intensityMultiplier);
|
||||
}
|
||||
|
||||
protected override void StopEvent(FeedbackContext context)
|
||||
@@ -66,11 +66,6 @@ namespace Cielonos.MainGame.Effects.Feedback
|
||||
|
||||
public override bool Validate(out string error)
|
||||
{
|
||||
if (!intensityCurve.active)
|
||||
{
|
||||
error = "Intensity curve is not enabled.";
|
||||
return false;
|
||||
}
|
||||
error = null;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -17,8 +17,7 @@ namespace Cielonos.MainGame.Effects.Feedback
|
||||
|
||||
public Vector3 amplitude;
|
||||
|
||||
[LabelText("X轴曲线")]
|
||||
public FloatCurveChannel intensityCurve = FloatCurveChannel.CreateDefault(remapMax: 5f);
|
||||
public FloatCurveChannel intensityCurve = FloatCurveChannel.CreateDefault();
|
||||
|
||||
public CameraDirectionSettings directionSettings = new CameraDirectionSettings();
|
||||
|
||||
@@ -40,8 +39,8 @@ namespace Cielonos.MainGame.Effects.Feedback
|
||||
protected override void TriggerEvent(FeedbackContext context)
|
||||
{
|
||||
Vector3 finalAmplitude = directionSettings.TransformAmplitude(amplitude, context.owner);
|
||||
float intensityMultiplier = ComputeAttenuation(context);
|
||||
CameraRotationShakeEvent.Trigger(context, intensityCurve, finalAmplitude * intensityMultiplier);
|
||||
float attenuation = ComputeAttenuation(context);
|
||||
CameraRotationShakeEvent.Trigger(context, intensityCurve, finalAmplitude * attenuation);
|
||||
}
|
||||
|
||||
protected override void StopEvent(FeedbackContext context)
|
||||
|
||||
@@ -58,11 +58,11 @@ namespace Cielonos.MainGame.Effects.Feedback
|
||||
{
|
||||
AnimeACESShakeEvent.Trigger(
|
||||
context,
|
||||
exposureChannel,
|
||||
contrastChannel,
|
||||
saturationChannel,
|
||||
hueChannel,
|
||||
colorFilterChannel
|
||||
modifyExposure, exposureChannel,
|
||||
modifyContrast, contrastChannel,
|
||||
modifySaturation, saturationChannel,
|
||||
modifyHue, hueChannel,
|
||||
modifyColorFilter, colorFilterChannel
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -3,8 +3,16 @@ using UnityEngine;
|
||||
|
||||
namespace Cielonos.MainGame.Effects.Feedback
|
||||
{
|
||||
public class BloomAction : CurveShakeAction
|
||||
public class BloomAction : PostprocessingActionBase
|
||||
{
|
||||
|
||||
protected override void TriggerEvent(FeedbackContext context)
|
||||
{
|
||||
throw new System.NotImplementedException();
|
||||
}
|
||||
|
||||
protected override void StopEvent(FeedbackContext context)
|
||||
{
|
||||
throw new System.NotImplementedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
using System;
|
||||
using Sirenix.OdinInspector;
|
||||
using SLSUtilities.Feedback;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Cielonos.MainGame.Effects.Feedback
|
||||
{
|
||||
/// <summary>
|
||||
/// RGB分离故障反馈动作,通过 RGBSplitGlitchShakeEvent 触发 RGBSplitGlitchShaker。
|
||||
/// </summary>
|
||||
[Serializable]
|
||||
[FeedbackActionColor(1f, 0.3f, 0.8f)]
|
||||
public class RGBSplitGlitchAction : PostprocessingActionBase
|
||||
{
|
||||
public override string DisplayName => "RGB Split Glitch";
|
||||
|
||||
[LabelText("强度曲线")]
|
||||
public FloatCurveChannel intensityCurve = FloatCurveChannel.CreateDefault(remapMax: 1f);
|
||||
|
||||
[LabelText("修改速度")]
|
||||
public bool modifySpeed;
|
||||
|
||||
[ShowIf("modifySpeed")]
|
||||
[LabelText("速度曲线")]
|
||||
public FloatCurveChannel speedCurve = FloatCurveChannel.CreateDefault(remapMax: 50f);
|
||||
|
||||
[HideIf("modifySpeed")]
|
||||
[LabelText("速度")]
|
||||
[Range(0f, 100f)]
|
||||
public float speed = 30f;
|
||||
|
||||
protected override void TriggerEvent(FeedbackContext context)
|
||||
{
|
||||
FloatCurveChannel finalSpeedCurve = modifySpeed
|
||||
? speedCurve
|
||||
: new FloatCurveChannel
|
||||
{
|
||||
curve = AnimationCurve.Constant(0f, 1f, speed),
|
||||
relativeToInitial = false
|
||||
};
|
||||
|
||||
RGBSplitGlitchShakeEvent.Trigger(
|
||||
context,
|
||||
intensityCurve,
|
||||
finalSpeedCurve
|
||||
);
|
||||
}
|
||||
|
||||
protected override void StopEvent(FeedbackContext context)
|
||||
{
|
||||
RGBSplitGlitchShakeEvent.Trigger(context, intensityCurve, stop: true);
|
||||
}
|
||||
|
||||
public override bool Validate(out string error)
|
||||
{
|
||||
error = null;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: dc20b82d80b720247a0ef6db8513af02
|
||||
@@ -14,73 +14,53 @@ namespace Cielonos.MainGame.Effects.Feedback
|
||||
{
|
||||
public override string DisplayName => "Vignette";
|
||||
|
||||
|
||||
public FloatCurveChannel intensityCurve = FloatCurveChannel.CreateDefault(remapMax: 1f);
|
||||
|
||||
/// <summary>
|
||||
/// 是否修改暗角中心点。
|
||||
/// </summary>
|
||||
[LabelText("修改中心点")]
|
||||
public bool modifyCenter;
|
||||
|
||||
/// <summary>
|
||||
/// 模糊中心的屏幕坐标 (0-1)。(0.5, 0.5) 为屏幕正中心。
|
||||
/// </summary>
|
||||
[HideIf("modifyCenter")]
|
||||
[LabelText("中心点")]
|
||||
public Vector2 center = new Vector2(0.5f, 0.5f);
|
||||
|
||||
[ShowIf("modifyCenter")]
|
||||
[LabelText("中心点曲线")]
|
||||
public Vector2CurveChannel centerCurve = Vector2CurveChannel.CreateDefault();
|
||||
|
||||
/// <summary>
|
||||
/// 是否修改颜色。
|
||||
/// </summary>
|
||||
[LabelText("修改颜色")]
|
||||
public bool modifyColors;
|
||||
|
||||
[HideIf("modifyColors")]
|
||||
public Color outColor;
|
||||
|
||||
[HideIf("modifyColors")]
|
||||
public Color innerColor;
|
||||
|
||||
/// <summary>
|
||||
/// 外圈颜色。
|
||||
/// </summary>
|
||||
[ShowIf("modifyColors")]
|
||||
[LabelText("外圈颜色")]
|
||||
public Color outColor = Color.black;
|
||||
|
||||
[HideIf("modifyColors")]
|
||||
[LabelText("内圈颜色")]
|
||||
public Color innerColor = Color.black;
|
||||
|
||||
[ShowIf("modifyColors")]
|
||||
[LabelText("外圈颜色曲线")]
|
||||
public ColorCurveChannel outerColorCurve = ColorCurveChannel.CreateDefault();
|
||||
|
||||
/// <summary>
|
||||
/// 内圈颜色。
|
||||
/// </summary>
|
||||
[ShowIf("modifyColors")]
|
||||
[LabelText("内圈颜色")]
|
||||
[LabelText("内圈颜色曲线")]
|
||||
public ColorCurveChannel innerColorCurve = ColorCurveChannel.CreateDefault();
|
||||
|
||||
/// <summary>
|
||||
/// 是否修改形状。
|
||||
/// </summary>
|
||||
[LabelText("修改形状")]
|
||||
public bool modifyShape;
|
||||
|
||||
[HideIf("modifyShape")]
|
||||
public float smoothness;
|
||||
[LabelText("柔和度")]
|
||||
public float smoothness = 0.5f;
|
||||
|
||||
[HideIf("modifyShape")]
|
||||
public float roundness;
|
||||
[LabelText("圆度")]
|
||||
public float roundness = 1f;
|
||||
|
||||
/// <summary>
|
||||
/// 柔和度曲线。
|
||||
/// </summary>
|
||||
[ShowIf("modifyShape")]
|
||||
[LabelText("柔和度曲线")]
|
||||
public FloatCurveChannel smoothnessCurve = FloatCurveChannel.CreateDefault(remapMax: 0.5f);
|
||||
|
||||
/// <summary>
|
||||
/// 圆度曲线。
|
||||
/// </summary>
|
||||
[ShowIf("modifyShape")]
|
||||
[LabelText("圆度曲线")]
|
||||
public FloatCurveChannel roundnessCurve = FloatCurveChannel.CreateDefault(remapMax: 1f);
|
||||
@@ -91,13 +71,18 @@ namespace Cielonos.MainGame.Effects.Feedback
|
||||
context,
|
||||
intensityCurve,
|
||||
modifyCenter,
|
||||
center,
|
||||
modifyCenter ? centerCurve : default,
|
||||
modifyCenter ? center : default(Vector2),
|
||||
modifyColors,
|
||||
outerColorCurve,
|
||||
innerColorCurve,
|
||||
modifyColors ? outerColorCurve : default,
|
||||
modifyColors ? innerColorCurve : default,
|
||||
modifyColors ? outColor : default,
|
||||
modifyColors ? innerColor : default,
|
||||
modifyShape,
|
||||
smoothnessCurve,
|
||||
roundnessCurve
|
||||
modifyShape ? smoothnessCurve : default,
|
||||
modifyShape ? roundnessCurve : default,
|
||||
modifyShape ? smoothness : 0f,
|
||||
modifyShape ? roundness : 0f
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user