using System; using Cielonos.MainGame.Inventory; using Sirenix.OdinInspector; using SLSUtilities.FunctionalAnimation; using SLSUtilities.WwiseAssistance; using UnityEngine; namespace Cielonos.MainGame.FunctionalAnimation { [Serializable] public class PlaySoundFX : FuncAnimPayloadBase { [WwiseEvent] public uint soundID = AkUnitySoundEngine.AK_INVALID_PLAYING_ID; [Tooltip("是否显示高级设置")] public bool advancedSettings = false; [ShowIf("advancedSettings")] public bool attachToBodyPart = false; [ShowIf("@advancedSettings && attachToBodyPart")] public bool attachToMainBodyPart = true; [ShowIf("@advancedSettings && attachToMainBodyPart")] public ViewObjectData.AttachBodyPartType mainBodyPart; [ShowIf("@advancedSettings && !attachToMainBodyPart")] public string customBodyPart; [ShowIf("advancedSettings")] public Vector3 positionOffset = Vector3.zero; public override void Invoke() { if (mute) return; if (!advancedSettings) { AudioManager.Post(soundID, Executor.CenterPosition); } else { Vector3 postPosition = Executor.CenterPosition; if (attachToBodyPart && Character != null) { Transform part = attachToMainBodyPart ? Character.bodyPartsSc.GetPart(mainBodyPart) : Character.bodyPartsSc.GetPart(customBodyPart); postPosition = part != null ? part.position : Executor.CenterPosition; } Vector3 finalPosition = postPosition + positionOffset; AudioManager.Post(soundID, finalPosition); } } } }