添加音效 v0.1版

This commit is contained in:
2026-07-04 18:35:23 +08:00
parent 8a6721f22a
commit 8ae4469c72
37 changed files with 588 additions and 7 deletions
@@ -0,0 +1,104 @@
---
name: water-reflection
description: 为 Unity 项目中的 UI Image 或 Sprite 应用水面倒影效果。创建或复用 WaterReflection shaderIndianOcean/WaterReflection),创建材质并应用到目标物体。支持水面线位置、波浪振幅、扰动强度、倒影变暗、淡出长度、水面线亮度等参数配置。当用户提到水面倒影、水面反射、倒影效果、water reflection 时使用。
---
# 水面倒影效果 (Water Reflection)
为 UI Image 或 SpriteRenderer 添加水面倒影效果:原图上半部分保持不变,下半部分显示垂直翻转的扰动倒影,水面分界线带波浪起伏和亮线。
## 资源路径
| 资源 | 路径 |
|------|------|
| Shader | `Assets/Light/shaders/WaterReflection.shader` |
| 材质 | `Assets/Materials/WaterReflection.mat` |
| Shader 名称 | `IndianOcean/WaterReflection` |
## 使用流程
### 1. 确保 Shader 存在
检查 `Assets/Light/shaders/WaterReflection.shader` 是否存在。若不存在,从下方 [Shader 源码](#shader-源码) 创建。
### 2. 创建或复用材质
使用 MCP `assets-material-create` 工具:
```
shaderName: "IndianOcean/WaterReflection"
assetPath: "Assets/Materials/WaterReflection.mat"
```
若材质已存在则跳过。
### 3. 应用到目标物体
通过 MCP `script-execute` 执行以下脚本(替换 `TARGET_NAME` 为目标物体名):
```csharp
using UnityEngine;
using UnityEditor;
using UnityEngine.UI;
public class Script
{
public static void Main()
{
var target = GameObject.Find("TARGET_NAME");
var mat = AssetDatabase.LoadAssetAtPath<Material>("Assets/Materials/WaterReflection.mat");
// UI Image
var img = target.GetComponent<Image>();
if (img != null) { img.material = mat; return; }
// SpriteRenderer
var sr = target.GetComponent<SpriteRenderer>();
if (sr != null) { sr.material = mat; return; }
// Any Renderer
var r = target.GetComponent<Renderer>();
if (r != null) { r.material = mat; return; }
}
}
```
### 4. 刷新资源
调用 MCP `assets-refresh` 确保 Unity 编译 shader。
## 可调参数
| 参数 | 说明 | 默认值 | 范围 |
|------|------|--------|------|
| `_Waterline` | 水面线位置(UV.y | 0.7 | 0.05 ~ 0.95 |
| `_WaveAmplitude` | 水面线波浪振幅 | 0.012 | 0 ~ 0.05 |
| `_WaveFreq` | 水面线波浪频率 | 4.0 | 1 ~ 15 |
| `_WaveSpeed` | 水面线波浪速度 | 1.0 | 0 ~ 5 |
| `_DistortStrength` | 倒影水平扰动强度 | 0.015 | 0 ~ 0.08 |
| `_DistortSpeed` | 扰动动画速度 | 1.5 | 0 ~ 5 |
| `_DistortFreq` | 扰动波纹频率 | 8.0 | 1 ~ 20 |
| `_ReflDarken` | 倒影变暗系数 | 0.5 | 0 ~ 1 |
| `_ReflFadeLen` | 倒影向下淡出长度 | 0.25 | 0 ~ 0.5 |
| `_LineBrightness` | 水面线亮度 | 1.5 | 0 ~ 3 |
| `_LineThickness` | 水面线粗细 | 0.004 | 0 ~ 0.02 |
通过 MCP `gameobject-component-modify``object-modify` 修改材质参数。
## Shader 源码
若需重建 shader,完整源码见 [WaterReflection.shader](../../../Assets/Light/shaders/WaterReflection.shader)。
核心原理:
-`_Waterline` 为轴,多层正弦+noise 叠加产生波浪形分界线
- 倒影区 UV 垂直翻转:`reflUV.y = 2 * waterline - uv.y`
- 水平扰动由多层 noise 叠加模拟随机水面波纹
- 倒影从上往下逐渐淡出(alpha 衰减)
- 水面分界线处叠加蓝白色亮线
## 注意事项
- 项目使用 **URP** 渲染管线,shader 已包含 `"RenderPipeline" = "UniversalPipeline"` tag
- UI Image 通过 `Image.material` 设置,不是 `Renderer.material`
- 修改 shader 文件后需调用 `assets-refresh` 触发重新编译
- 波浪效果是动态的(依赖 `_Time.y`),在 Play 模式下最明显
@@ -39,6 +39,10 @@ namespace IndianOceanAssets.Engine2_5D
if (isPlayer && onPlayerDamaged != null)
onPlayerDamaged.Invoke();
// 播放受伤音效
if (isPlayer && AudioManager.Instance != null)
AudioManager.Instance.PlaySFXFromResources("SFX/Hurt", 0.7f);
// If dead
if (health <= 0)
{
@@ -1,5 +1,6 @@
using UnityEngine;
using System.Collections;
using GameFramework;
namespace IndianOceanAssets.Engine2_5D
{
@@ -89,6 +90,10 @@ namespace IndianOceanAssets.Engine2_5D
isRolling = true;
lastRollTime = Time.time;
// 播放冲刺音效
if (AudioManager.Instance != null)
AudioManager.Instance.PlaySFXFromResources("SFX/Dash", 0.8f);
float timer = 0.2f;
Vector3 rollDir = new Vector3(inputDirection.x, 0f, inputDirection.y).normalized;
@@ -30,7 +30,7 @@ Material:
- _EchoIntensity: 0
- _EchoRadius: 39.41617
- _EchoWidth: 2.5
- _LightSoftness: 1
- _LightSoftness: 0.5
- _MinBrightness: 0
m_Colors:
- _DarknessColor: {r: 0.01, g: 0.01, b: 0.02, a: 1}
+35 -1
View File
@@ -2017,6 +2017,7 @@ GameObject:
- component: {fileID: 160213093}
- component: {fileID: 160213092}
- component: {fileID: 160213091}
- component: {fileID: 160213096}
m_Layer: 0
m_HasEditorInfo: 1
m_Name: HUD_Canvas
@@ -2138,6 +2139,22 @@ RectTransform:
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0, y: 0}
--- !u!114 &160213096
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 160213090}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 4acb13cd074243844ae5d9645289796d, type: 3}
m_Name:
m_EditorClassIdentifier:
selectSFXPath: SFX/UI_Click
clickSFXPath: SFX/UI_Click
selectVolume: 0.5
clickVolume: 0.6
--- !u!4 &166849993 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 435539791518907074, guid: 559314d2eb0483149908bafda142bcd7, type: 3}
@@ -8835,6 +8852,7 @@ GameObject:
- component: {fileID: 607799032}
- component: {fileID: 607799034}
- component: {fileID: 607799033}
- component: {fileID: 607799035}
m_Layer: 5
m_HasEditorInfo: 1
m_Name: PauseMenuCanvas
@@ -8926,6 +8944,22 @@ MonoBehaviour:
m_DefaultSpriteDPI: 96
m_DynamicPixelsPerUnit: 1
m_PresetInfoIsWorld: 0
--- !u!114 &607799035
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 607799030}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 4acb13cd074243844ae5d9645289796d, type: 3}
m_Name:
m_EditorClassIdentifier:
selectSFXPath: SFX/UI_Click
clickSFXPath: SFX/UI_Click
selectVolume: 0.5
clickVolume: 0.6
--- !u!1 &609157175
GameObject:
m_ObjectHideFlags: 0
@@ -30447,7 +30481,7 @@ MonoBehaviour:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1966623129}
m_Enabled: 1
m_Enabled: 0
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
m_Name:
+68
View File
@@ -1341,6 +1341,7 @@ GameObject:
- component: {fileID: 897692929}
- component: {fileID: 897692928}
- component: {fileID: 897692927}
- component: {fileID: 897692930}
m_Layer: 0
m_HasEditorInfo: 1
m_Name: Canvas
@@ -1433,6 +1434,22 @@ Canvas:
m_SortingLayerID: 0
m_SortingOrder: 1000
m_TargetDisplay: 0
--- !u!114 &897692930
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 897692925}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 4acb13cd074243844ae5d9645289796d, type: 3}
m_Name:
m_EditorClassIdentifier:
selectSFXPath: SFX/UI_Click
clickSFXPath: SFX/UI_Click
selectVolume: 0.5
clickVolume: 0.6
--- !u!1 &951237302
GameObject:
m_ObjectHideFlags: 0
@@ -1882,6 +1899,7 @@ GameObject:
- component: {fileID: 1036666437}
- component: {fileID: 1036666436}
- component: {fileID: 1036666435}
- component: {fileID: 1036666440}
m_Layer: 0
m_HasEditorInfo: 1
m_Name: MainMenu_Canvas
@@ -1997,6 +2015,22 @@ RectTransform:
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0, y: 0}
--- !u!114 &1036666440
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1036666434}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 4acb13cd074243844ae5d9645289796d, type: 3}
m_Name:
m_EditorClassIdentifier:
selectSFXPath: SFX/UI_Click
clickSFXPath: SFX/UI_Click
selectVolume: 0.5
clickVolume: 0.6
--- !u!1 &1036827524
GameObject:
m_ObjectHideFlags: 0
@@ -2208,6 +2242,7 @@ GameObject:
- component: {fileID: 1065091764}
- component: {fileID: 1065091763}
- component: {fileID: 1065091767}
- component: {fileID: 1065091768}
m_Layer: 5
m_HasEditorInfo: 1
m_Name: UI
@@ -2321,6 +2356,22 @@ MonoBehaviour:
settingsBackButton: {fileID: 774721830}
creditsPanel: {fileID: 0}
creditsCloseButton: {fileID: 0}
--- !u!114 &1065091768
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1065091762}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 4acb13cd074243844ae5d9645289796d, type: 3}
m_Name:
m_EditorClassIdentifier:
selectSFXPath: SFX/UI_Click
clickSFXPath: SFX/UI_Click
selectVolume: 0.5
clickVolume: 0.6
--- !u!1 &1106266784
GameObject:
m_ObjectHideFlags: 0
@@ -3722,6 +3773,7 @@ GameObject:
- component: {fileID: 1852443090}
- component: {fileID: 1852443089}
- component: {fileID: 1852443088}
- component: {fileID: 1852443093}
m_Layer: 0
m_HasEditorInfo: 1
m_Name: HUD_Canvas
@@ -3836,6 +3888,22 @@ RectTransform:
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0, y: 0}
--- !u!114 &1852443093
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1852443087}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 4acb13cd074243844ae5d9645289796d, type: 3}
m_Name:
m_EditorClassIdentifier:
selectSFXPath: SFX/UI_Click
clickSFXPath: SFX/UI_Click
selectVolume: 0.5
clickVolume: 0.6
--- !u!1 &1867658318
GameObject:
m_ObjectHideFlags: 0
+21 -1
View File
@@ -164,7 +164,7 @@ MonoBehaviour:
minBrightness: 0
darknessColor: {r: 0.01, g: 0.01, b: 0.02, a: 1}
lightSoftness: 0.5
followCamera: 1
followTarget: {fileID: 0}
maskPlane: {fileID: 338266643}
maskOffset: {x: 0, y: 0, z: 0}
planeSize: 300
@@ -1730,6 +1730,7 @@ MonoBehaviour:
m_EditorClassIdentifier:
target: {fileID: 441783843}
offset: {x: 0, y: 6.25, z: -7.5}
followSmoothness: 20
--- !u!4 &331731258 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 3758831290525234046, guid: c8ebec87794f9e541b3416e11049afa7, type: 3}
@@ -2322,6 +2323,7 @@ GameObject:
- component: {fileID: 413844532}
- component: {fileID: 413844531}
- component: {fileID: 413844535}
- component: {fileID: 413844536}
m_Layer: 5
m_HasEditorInfo: 1
m_Name: Canvas
@@ -2428,6 +2430,22 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
healthFill: {fileID: 255691866}
--- !u!114 &413844536
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 413844530}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 4acb13cd074243844ae5d9645289796d, type: 3}
m_Name:
m_EditorClassIdentifier:
selectSFXPath: SFX/UI_Click
clickSFXPath: SFX/UI_Click
selectVolume: 0.5
clickVolume: 0.6
--- !u!1001 &416141938
PrefabInstance:
m_ObjectHideFlags: 0
@@ -5494,6 +5512,7 @@ MonoBehaviour:
radius: 2
intensity: 1
registerOnStart: 1
offset: {x: 0, y: 0, z: 0}
followTarget: {fileID: 0}
enableFlicker: 0
flickerSpeed: 5
@@ -7775,6 +7794,7 @@ MonoBehaviour:
radius: 1
intensity: 1
registerOnStart: 1
offset: {x: 0, y: 0, z: 0}
followTarget: {fileID: 0}
enableFlicker: 1
flickerSpeed: 5
+24
View File
@@ -113,6 +113,30 @@ namespace GameFramework
PlaySFX(data);
}
/// <summary>
/// 直接通过 AudioClip 播放音效。
/// </summary>
public void PlaySFX(AudioClip clip, float volume = 1f)
{
if (clip == null) return;
sfxPlayer.PlayOneShot(clip, volume);
}
/// <summary>
/// 通过 Resources 路径加载并播放音效。
/// 路径相对于 Assets/audios/Resources/,例如 "SFX/Bell"
/// </summary>
public void PlaySFXFromResources(string resourcePath, float volume = 1f)
{
var clip = Resources.Load<AudioClip>(resourcePath);
if (clip == null)
{
Debug.LogWarning($"[AudioManager] SFX not found: {resourcePath}");
return;
}
PlaySFX(clip, volume);
}
public void SetSFXVolume(float volume)
{
sfxVolume = Mathf.Clamp01(volume);
+46
View File
@@ -0,0 +1,46 @@
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
namespace GameFramework
{
/// <summary>
/// 全局 UI 按钮音效处理器。
/// 挂到 Canvas 上,自动监听所有按钮的点击/悬停事件并播放音效。
/// 无需在每个按钮上单独添加组件。
/// </summary>
public class UIClickSoundHandler : MonoBehaviour, IPointerEnterHandler, IPointerDownHandler
{
[Header("音效资源路径(相对于 Resources 文件夹)")]
[SerializeField] private string selectSFXPath = "SFX/UI_Click";
[SerializeField] private string clickSFXPath = "SFX/UI_Click";
[Header("音量")]
[SerializeField] private float selectVolume = 0.5f;
[SerializeField] private float clickVolume = 0.6f;
private void PlaySFX(string path, float volume)
{
if (AudioManager.Instance != null)
AudioManager.Instance.PlaySFXFromResources(path, volume);
}
public void OnPointerEnter(PointerEventData eventData)
{
// 只对按钮播放悬停音效
if (eventData.pointerEnter != null && eventData.pointerEnter.GetComponent<Button>() != null)
{
PlaySFX(selectSFXPath, selectVolume);
}
}
public void OnPointerDown(PointerEventData eventData)
{
// 只对按钮播放点击音效
if (eventData.pointerPress != null && eventData.pointerPress.GetComponent<Button>() != null)
{
PlaySFX(clickSFXPath, clickVolume);
}
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: CytM5yuuAC+4h5kKmSUxrxML3yei5rN0+BflxvkJIAYWLnhdd2gv6Zw=
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
+8
View File
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: WnkcvX+vBX1grLqf2w5+8B0Tb/tjUt5zEzSY6+hOxk3dnAMJaAOhNtM=
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
+8
View File
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: Cnse4C/8VS2FRx6YypypE+UQUDhCG57fOPgT4jI5zzyWeQ7CscWY0O0=
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.
@@ -0,0 +1,23 @@
fileFormatVersion: 2
guid: Ci5Ns3iuAn3749M3vTMFYqH9eCmiarZssFwoacecgEEKqjvczbRNpRQ=
AudioImporter:
externalObjects: {}
serializedVersion: 7
defaultSettings:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
preloadAudioData: 0
platformSettingOverrides: {}
forceToMono: 0
normalize: 1
loadInBackground: 0
ambisonic: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.
@@ -0,0 +1,23 @@
fileFormatVersion: 2
guid: XXoc5CP4AS1KyaAWelwxpsjZHN/VfEzFGnzfSiFK08G5CyqkhYZQqBQ=
AudioImporter:
externalObjects: {}
serializedVersion: 7
defaultSettings:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
preloadAudioData: 0
platformSettingOverrides: {}
forceToMono: 0
normalize: 1
loadInBackground: 0
ambisonic: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.
@@ -0,0 +1,23 @@
fileFormatVersion: 2
guid: Xi9K5nmlAXl8b2OJYLNNDNs1LBYLWsUvU34kI6LF3MEL+lwkUMRE1q4=
AudioImporter:
externalObjects: {}
serializedVersion: 7
defaultSettings:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
preloadAudioData: 0
platformSettingOverrides: {}
forceToMono: 0
normalize: 1
loadInBackground: 0
ambisonic: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.
@@ -0,0 +1,23 @@
fileFormatVersion: 2
guid: CntLtiz/USl488aq8E1N5fT0pIBFNP9Cs2b93EGRGbPgJjHgxNRFR2g=
AudioImporter:
externalObjects: {}
serializedVersion: 7
defaultSettings:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
preloadAudioData: 0
platformSettingOverrides: {}
forceToMono: 0
normalize: 1
loadInBackground: 0
ambisonic: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.
@@ -0,0 +1,23 @@
fileFormatVersion: 2
guid: XS4f43n+VSogZuScQ9FGRS77LjL0WjgKOJSuS2aBvlxNYFkAF2s16xM=
AudioImporter:
externalObjects: {}
serializedVersion: 7
defaultSettings:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
preloadAudioData: 0
platformSettingOverrides: {}
forceToMono: 0
normalize: 1
loadInBackground: 0
ambisonic: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:
+8
View File
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: Wn5K536tByrNnYAXMO3AUxsEVGWFMmlChgWYYBjJVVVzoSvUlM5BP60=
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.
+23
View File
@@ -0,0 +1,23 @@
fileFormatVersion: 2
guid: BnsZ4SOkVHxK1acq6mElPwHWV7wuuxexO1WngVaCAHWaiTE4HWahoAQ=
AudioImporter:
externalObjects: {}
serializedVersion: 7
defaultSettings:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
preloadAudioData: 0
platformSettingOverrides: {}
forceToMono: 0
normalize: 1
loadInBackground: 0
ambisonic: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.
+23
View File
@@ -0,0 +1,23 @@
fileFormatVersion: 2
guid: DShOt3j/UH/m/aVULruT+xtEv/xOYfflxDUCmVHUc7V+Nf8eQZNj0Rw=
AudioImporter:
externalObjects: {}
serializedVersion: 7
defaultSettings:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
preloadAudioData: 0
platformSettingOverrides: {}
forceToMono: 0
normalize: 1
loadInBackground: 0
ambisonic: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.
+23
View File
@@ -0,0 +1,23 @@
fileFormatVersion: 2
guid: BnsX4ymkWy2cXI4sdDBcBRw/9iO2NSa9+BXbwXnTVusb7sZnnelBaTg=
AudioImporter:
externalObjects: {}
serializedVersion: 7
defaultSettings:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
preloadAudioData: 0
platformSettingOverrides: {}
forceToMono: 0
normalize: 1
loadInBackground: 0
ambisonic: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.
+23
View File
@@ -0,0 +1,23 @@
fileFormatVersion: 2
guid: WXIctCqpWn4T60mrEWk90qO3iCMrQqrQWMT7k4q2ORunY84HFugcq/E=
AudioImporter:
externalObjects: {}
serializedVersion: 7
defaultSettings:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
preloadAudioData: 0
platformSettingOverrides: {}
forceToMono: 0
normalize: 1
loadInBackground: 0
ambisonic: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.
+23
View File
@@ -0,0 +1,23 @@
fileFormatVersion: 2
guid: WnIfsXuqBnICCkWitQEfbwNmKVUAE/xHqatQYv3rx2Xs5mQaHS8dt2w=
AudioImporter:
externalObjects: {}
serializedVersion: 7
defaultSettings:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
preloadAudioData: 0
platformSettingOverrides: {}
forceToMono: 0
normalize: 1
loadInBackground: 0
ambisonic: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:
+5
View File
@@ -1,5 +1,6 @@
using System;
using UnityEngine;
using GameFramework;
namespace IndianOceanAssets.Engine2_5D
{
@@ -109,6 +110,10 @@ namespace IndianOceanAssets.Engine2_5D
_stateTimer = 0f;
_lastEchoTime = Time.time;
// 播放摇铃音效
if (AudioManager.Instance != null)
AudioManager.Instance.PlaySFXFromResources("SFX/Bell", 0.9f);
// 记录释放时刻的玩家位置(回声中心固定,不跟随移动)
Vector3 p = transform.position;
_center = new Vector2(p.x, p.z);
+5
View File
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using UnityEngine;
using GameFramework;
namespace IndianOceanAssets.Engine2_5D
{
@@ -66,6 +67,10 @@ namespace IndianOceanAssets.Engine2_5D
_remainingLanterns--;
_lastPlaceTime = Time.time;
// 播放灵灯放置音效
if (AudioManager.Instance != null)
AudioManager.Instance.PlaySFXFromResources("SFX/Lantern", 0.8f);
// 在玩家位置实例化灵灯
GameObject lanternObj = Instantiate(lanternPrefab, transform.position, Quaternion.identity);
SpiritLantern lantern = lanternObj.GetComponent<SpiritLantern>();
+4 -4
View File
@@ -27,14 +27,14 @@ EditorUserSettings:
value: 5300055151055f5a5e0c0f27477708444515192b287124367c791f30b3b9616d
flags: 0
RecentlyUsedSceneGuid-7:
value: 5a55515156575a0b0f56592346260f444f16197c7e7f24697d2a4a32b1b0353e
flags: 0
RecentlyUsedSceneGuid-8:
value: 5a5757560101590a5d0c0e24427b5d44434e4c7a7b7a23677f2b4565b7b5353a
flags: 0
RecentlyUsedSceneGuid-9:
RecentlyUsedSceneGuid-8:
value: 0209025f575750595c57092149765d444e4e49727e7c7068757b1c65b6e36c3b
flags: 0
RecentlyUsedSceneGuid-9:
value: 5a55515156575a0b0f56592346260f444f16197c7e7f24697d2a4a32b1b0353e
flags: 0
UnityEditor.ShaderGraph.Blackboard:
value: 18135939215a0a5004000b0e15254b524c030a3f2964643d120d1230e9e93a3fd6e826abbd2e2d293c4ead313b08042de6030a0afa240c0d020be94c4ba75e435d8715fa32c70d15d11612dacc11fee5d3c5d1fe9ab1bf968e93e2ffcbc3e7e2f0b3ffe0e8b0be9af8ffaeffff8e85dd8390e3949c8899daa7
flags: 0