209 lines
7.3 KiB
C#
209 lines
7.3 KiB
C#
using UnityEngine;
|
|
|
|
namespace AibisDream.MiniGame.HuoShan
|
|
{
|
|
/// <summary>
|
|
/// 波形配置
|
|
/// 定义各个模块的波形类型和视觉参数
|
|
/// </summary>
|
|
[CreateAssetMenu(fileName = "WaveformConfig", menuName = "AibisDream/Waveform/Waveform Config")]
|
|
public class WaveformConfig : ScriptableObject
|
|
{
|
|
[Header("情绪模块波形 - 悲伤/焦虑/恐惧")]
|
|
[Tooltip("低频、缓慢起伏、通过谐波叠加表达情绪")]
|
|
public WaveformSettings emotionWaveform = new WaveformSettings
|
|
{
|
|
waveformId = "emotion",
|
|
displayName = "情绪模块",
|
|
waveType = WaveformType.Emotion,
|
|
primaryColor = new Color(0.3f, 0.4f, 0.8f, 1f), // 深蓝色(悲伤)
|
|
secondaryColor = new Color(0.5f, 0.3f, 0.7f, 1f), // 紫色(焦虑)
|
|
waveHeight = 0.8f,
|
|
waveSpeed = 0.8f, // 慢速,沉重感
|
|
frequency = 1f,
|
|
// 谐波配置:基波为主,二次/三次谐波辅助
|
|
harmonicA1 = 0.55f,
|
|
harmonicA2 = 0.28f,
|
|
harmonicA3 = 0.12f,
|
|
harmonicPhase2 = 0.3f,
|
|
harmonicPhase3 = 0.5f,
|
|
verticalOffset = -0.08f
|
|
};
|
|
|
|
[Header("逻辑模块波形 - 简单方波(低幅度)")]
|
|
[Tooltip("规则、简单、清晰的方波,幅度很低")]
|
|
public WaveformSettings logicWaveform = new WaveformSettings
|
|
{
|
|
waveformId = "logic",
|
|
displayName = "逻辑模块",
|
|
waveType = WaveformType.Logic,
|
|
primaryColor = new Color(0.2f, 0.8f, 0.4f, 1f), // 绿色
|
|
secondaryColor = new Color(0.3f, 0.9f, 0.5f, 1f),
|
|
waveHeight = 0.25f, // 低幅度,方便被笑话"淹没"但形状可见
|
|
waveSpeed = 1.5f,
|
|
frequency = 1f // 低频率,清晰的方波
|
|
};
|
|
|
|
[Header("被修改后的情绪 - 笑话/亢奋(高幅度尖锐)")]
|
|
[Tooltip("高频、尖锐、快速起伏,幅度很高")]
|
|
public WaveformSettings jokeWaveform = new WaveformSettings
|
|
{
|
|
waveformId = "joke",
|
|
displayName = "笑话信号",
|
|
waveType = WaveformType.Joke,
|
|
primaryColor = new Color(1f, 0.6f, 0.2f, 1f), // 橙色(亢奋)
|
|
secondaryColor = new Color(1f, 0.4f, 0.4f, 1f), // 红橙色
|
|
waveHeight = 1.0f, // 高幅度,尖锐的笑话信号
|
|
waveSpeed = 3f,
|
|
frequency = 4f // 高频,快速变化
|
|
};
|
|
|
|
[Header("滤波器输出 - 真正的合成波形")]
|
|
[Tooltip("逻辑 + 笑话波形的真实相加叠加")]
|
|
public WaveformSettings filterOutputWaveform = new WaveformSettings
|
|
{
|
|
waveformId = "filter_output",
|
|
displayName = "滤波器输出",
|
|
waveType = WaveformType.FilterOutput,
|
|
primaryColor = new Color(1f, 0.5f, 0.3f, 1f),
|
|
secondaryColor = new Color(0.8f, 0.6f, 0.3f, 1f),
|
|
waveHeight = 1.0f,
|
|
waveSpeed = 2f,
|
|
frequency = 2f // 使用中等频率,让合成效果更明显
|
|
};
|
|
|
|
[Header("合成参数")]
|
|
[Tooltip("逻辑波形在合成中的权重(建议0.2-0.4,低但可见)")]
|
|
[Range(0.1f, 1f)]
|
|
public float logicSynthWeight = 0.3f;
|
|
|
|
[Tooltip("笑话波形在合成中的权重(建议0.7-1.0,占主导)")]
|
|
[Range(0.1f, 1f)]
|
|
public float jokeSynthWeight = 0.85f;
|
|
|
|
[Header("正常的滤波器输出")]
|
|
[Tooltip("逻辑 + 正常情绪的混合(修复后)")]
|
|
public WaveformSettings normalOutputWaveform = new WaveformSettings
|
|
{
|
|
waveformId = "normal_output",
|
|
displayName = "滤波器输出(正常)",
|
|
waveType = WaveformType.NormalOutput,
|
|
primaryColor = new Color(0.4f, 0.7f, 0.8f, 1f), // 青色
|
|
secondaryColor = new Color(0.5f, 0.8f, 0.6f, 1f),
|
|
waveHeight = 0.8f,
|
|
waveSpeed = 1.5f,
|
|
frequency = 1.5f
|
|
};
|
|
|
|
/// <summary>
|
|
/// 根据ID获取波形配置
|
|
/// </summary>
|
|
public WaveformSettings GetWaveformById(string waveformId)
|
|
{
|
|
switch (waveformId)
|
|
{
|
|
case "emotion":
|
|
case "emotion_sine": // 兼容旧ID
|
|
return emotionWaveform;
|
|
case "logic":
|
|
case "logic_square": // 兼容旧ID
|
|
return logicWaveform;
|
|
case "joke":
|
|
return jokeWaveform;
|
|
case "filter_output":
|
|
case "filter_sawtooth": // 兼容旧ID
|
|
return filterOutputWaveform;
|
|
case "normal_output":
|
|
case "filter_normal": // 兼容旧ID
|
|
return normalOutputWaveform;
|
|
default:
|
|
Debug.LogWarning($"未找到波形配置: {waveformId}");
|
|
return emotionWaveform;
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 波形设置
|
|
/// </summary>
|
|
[System.Serializable]
|
|
public class WaveformSettings
|
|
{
|
|
[Tooltip("波形ID,用于在Yarn脚本中引用")]
|
|
public string waveformId;
|
|
|
|
[Tooltip("显示名称")]
|
|
public string displayName;
|
|
|
|
[Tooltip("波形类型")]
|
|
public WaveformType waveType;
|
|
|
|
[Tooltip("主颜色")]
|
|
public Color primaryColor = Color.cyan;
|
|
|
|
[Tooltip("次要颜色(用于渐变)")]
|
|
public Color secondaryColor = Color.blue;
|
|
|
|
[Tooltip("波形高度")]
|
|
[Range(0.1f, 2f)]
|
|
public float waveHeight = 1f;
|
|
|
|
[Tooltip("波形速度")]
|
|
[Range(0.1f, 10f)]
|
|
public float waveSpeed = 2f;
|
|
|
|
[Tooltip("波形频率")]
|
|
[Range(0.5f, 10f)]
|
|
public float frequency = 1f;
|
|
|
|
[Header("谐波配置(用于情绪波形的傅里叶合成)")]
|
|
[Tooltip("基波振幅(主导波形)")]
|
|
[Range(0.1f, 1f)]
|
|
public float harmonicA1 = 0.55f;
|
|
|
|
[Tooltip("二次谐波振幅")]
|
|
[Range(0f, 0.5f)]
|
|
public float harmonicA2 = 0.28f;
|
|
|
|
[Tooltip("三次谐波振幅")]
|
|
[Range(0f, 0.3f)]
|
|
public float harmonicA3 = 0.12f;
|
|
|
|
[Tooltip("二次谐波相位偏移")]
|
|
[Range(0f, 1f)]
|
|
public float harmonicPhase2 = 0.3f;
|
|
|
|
[Tooltip("三次谐波相位偏移")]
|
|
[Range(0f, 1f)]
|
|
public float harmonicPhase3 = 0.5f;
|
|
|
|
[Tooltip("整体偏移(负值表示下沉,用于表达压抑感)")]
|
|
[Range(-0.3f, 0.3f)]
|
|
public float verticalOffset = -0.08f;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 波形类型
|
|
/// </summary>
|
|
public enum WaveformType
|
|
{
|
|
/// <summary>情绪模块 - 悲伤/焦虑/恐惧(低频、沉重、颤抖)</summary>
|
|
Emotion,
|
|
|
|
/// <summary>逻辑模块 - 简单方波</summary>
|
|
Logic,
|
|
|
|
/// <summary>被修改后的情绪 - 笑话/亢奋(高频、尖锐)</summary>
|
|
Joke,
|
|
|
|
/// <summary>滤波器输出 - 逻辑 + 笑话的混合(异常状态)</summary>
|
|
FilterOutput,
|
|
|
|
/// <summary>滤波器输出 - 逻辑 + 正常情绪的混合(正常状态)</summary>
|
|
NormalOutput,
|
|
|
|
/// <summary>波形变换中间态</summary>
|
|
Transforming
|
|
}
|
|
}
|