wangguan
2020-11-04 2ae9edd5bfd8b8baabb8cd995485f9ade4faebc9
增加音效
38 files added
37 files modified
1597 ■■■■ changed files
Assets/00000/package/Materials/Glow_003_b.mat 2 ●●● patch | view | raw | blame | history
Assets/00000/package/Materials/Glow_012_b.mat 2 ●●● patch | view | raw | blame | history
Assets/00000/package/Materials/Glow_029_02.mat 2 ●●● patch | view | raw | blame | history
Assets/00000/package/Materials/Glow_039.mat 2 ●●● patch | view | raw | blame | history
Assets/00000/package/Materials/Object_004.mat 2 ●●● patch | view | raw | blame | history
Assets/00000/package/Materials/Object_005.mat 2 ●●● patch | view | raw | blame | history
Assets/00000/package/Materials/Object_006.mat 2 ●●● patch | view | raw | blame | history
Assets/00000/package/Materials/Object_009.mat 2 ●●● patch | view | raw | blame | history
Assets/00000/package/Materials/Sequence_005_4X3.mat 2 ●●● patch | view | raw | blame | history
Assets/00000/package/Materials/Sequence_006_6X5.mat 2 ●●● patch | view | raw | blame | history
Assets/00000/package/Materials/Sequence_007_4X3.mat 2 ●●● patch | view | raw | blame | history
Assets/00000/package/Materials/Sequence_008_6X4.mat 2 ●●● patch | view | raw | blame | history
Assets/00000/package/Materials/Sequence_009_3X2.mat 2 ●●● patch | view | raw | blame | history
Assets/00000/package/Materials/Sequence_019_4X4_02.mat 2 ●●● patch | view | raw | blame | history
Assets/00000/package/Materials/Sequence_022_4X4_02.mat 2 ●●● patch | view | raw | blame | history
Assets/00000/package/Materials/Sequence_024_9X8_b.mat 2 ●●● patch | view | raw | blame | history
Assets/00000/package/Texture/Texmap_003.png.meta 13 ●●●●● patch | view | raw | blame | history
Assets/GabrielAguiarProductions/Unique_Projectiles_Volume_1/Scripts/ProjectileMoveScript.cs 8 ●●●● patch | view | raw | blame | history
Assets/Resources/Music.meta 8 ●●●●● patch | view | raw | blame | history
Assets/Resources/Music/BGM1.mp3 patch | view | raw | blame | history
Assets/Resources/Music/BGM1.mp3.meta 22 ●●●●● patch | view | raw | blame | history
Assets/Resources/Music/BGM2.mp3 patch | view | raw | blame | history
Assets/Resources/Music/BGM2.mp3.meta 22 ●●●●● patch | view | raw | blame | history
Assets/Resources/Music/BOSS死亡.wav patch | view | raw | blame | history
Assets/Resources/Music/BOSS死亡.wav.meta 22 ●●●●● patch | view | raw | blame | history
Assets/Resources/Music/UI按键.mp3 patch | view | raw | blame | history
Assets/Resources/Music/UI按键.mp3.meta 22 ●●●●● patch | view | raw | blame | history
Assets/Resources/Music/不可点击_错误.wav patch | view | raw | blame | history
Assets/Resources/Music/不可点击_错误.wav.meta 22 ●●●●● patch | view | raw | blame | history
Assets/Resources/Music/拖动宝石时.wav patch | view | raw | blame | history
Assets/Resources/Music/拖动宝石时.wav.meta 22 ●●●●● patch | view | raw | blame | history
Assets/Resources/Music/放下宝石.wav patch | view | raw | blame | history
Assets/Resources/Music/放下宝石.wav.meta 22 ●●●●● patch | view | raw | blame | history
Assets/Resources/Music/敌人攻击塔.wav patch | view | raw | blame | history
Assets/Resources/Music/敌人攻击塔.wav.meta 22 ●●●●● patch | view | raw | blame | history
Assets/Resources/Music/木攻击.wav patch | view | raw | blame | history
Assets/Resources/Music/木攻击.wav.meta 22 ●●●●● patch | view | raw | blame | history
Assets/Resources/Music/水攻击.wav patch | view | raw | blame | history
Assets/Resources/Music/水攻击.wav.meta 22 ●●●●● patch | view | raw | blame | history
Assets/Resources/Music/游戏结束.mp3 patch | view | raw | blame | history
Assets/Resources/Music/游戏结束.mp3.meta 22 ●●●●● patch | view | raw | blame | history
Assets/Resources/Music/火技能.wav patch | view | raw | blame | history
Assets/Resources/Music/火技能.wav.meta 22 ●●●●● patch | view | raw | blame | history
Assets/Resources/Music/火攻击.wav patch | view | raw | blame | history
Assets/Resources/Music/火攻击.wav.meta 22 ●●●●● patch | view | raw | blame | history
Assets/Resources/Music/电技能.wav patch | view | raw | blame | history
Assets/Resources/Music/电技能.wav.meta 22 ●●●●● patch | view | raw | blame | history
Assets/Resources/Music/翻书.wav patch | view | raw | blame | history
Assets/Resources/Music/翻书.wav.meta 22 ●●●●● patch | view | raw | blame | history
Assets/Resources/Music/选择buff后.wav patch | view | raw | blame | history
Assets/Resources/Music/选择buff后.wav.meta 22 ●●●●● patch | view | raw | blame | history
Assets/Resources/Music/金币.mp3 patch | view | raw | blame | history
Assets/Resources/Music/金币.mp3.meta 22 ●●●●● patch | view | raw | blame | history
Assets/Scenes/Levels/Battle/Endless.unity 57 ●●●●● patch | view | raw | blame | history
Assets/Scripts/GameAnalytics_SDK/TDAA_SDKManager.cs 1 ●●●● patch | view | raw | blame | history
Assets/Scripts/GameAnalytics_SDK/UI/LoginUI.cs 1 ●●●● patch | view | raw | blame | history
Assets/Scripts/Manager/ManagerRoot.cs 6 ●●●●● patch | view | raw | blame | history
Assets/Scripts/Music.meta 8 ●●●●● patch | view | raw | blame | history
Assets/Scripts/Music/AudioSourceManager.cs 272 ●●●●● patch | view | raw | blame | history
Assets/Scripts/Music/AudioSourceManager.cs.meta 11 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/Affectors/AttackAffector.cs 707 ●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/Input/EndlessTowerDefenseKeyboardMouseInput.cs 11 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/Level/EndlessWaveLineManager.cs 4 ●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/Towers/EndlessViewObtainedProps.cs 2 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/UI/EndGameScreen.cs 16 ●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/UI/EndlessBossHPManager.cs 4 ●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/UI/EndlessBuffSelect.cs 5 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/UI/EndlessSettlement.cs 4 ●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/UI/EndlessSettlementPropList.cs 2 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/UI/EndlessSwitchSpeed.cs 2 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/UI/EndlessUIStart.cs 6 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/UI/HUD/EndlessGameUI.cs 8 ●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/UI/HUD/EndlessRandomTower.cs 29 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/UI/HUD/SelectBuffIcon.cs 2 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/UI/MainMenuScene.cs 4 ●●●● patch | view | raw | blame | history
Assets/00000/package/Materials/Glow_003_b.mat
@@ -7,7 +7,7 @@
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_Name: Glow_003 1
  m_Name: Glow_003_b
  m_Shader: {fileID: 203, guid: 0000000000000000f000000000000000, type: 0}
  m_ShaderKeywords: 
  m_LightmapFlags: 4
Assets/00000/package/Materials/Glow_012_b.mat
@@ -7,7 +7,7 @@
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_Name: Glow_012 1
  m_Name: Glow_012_b
  m_Shader: {fileID: 203, guid: 0000000000000000f000000000000000, type: 0}
  m_ShaderKeywords: 
  m_LightmapFlags: 4
Assets/00000/package/Materials/Glow_029_02.mat
@@ -7,7 +7,7 @@
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_Name: Glow_029_b
  m_Name: Glow_029_02
  m_Shader: {fileID: 203, guid: 0000000000000000f000000000000000, type: 0}
  m_ShaderKeywords: 
  m_LightmapFlags: 4
Assets/00000/package/Materials/Glow_039.mat
@@ -7,7 +7,7 @@
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_Name: ditu
  m_Name: Glow_039
  m_Shader: {fileID: 200, guid: 0000000000000000f000000000000000, type: 0}
  m_ShaderKeywords: 
  m_LightmapFlags: 4
Assets/00000/package/Materials/Object_004.mat
@@ -7,7 +7,7 @@
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_Name: Object_0014
  m_Name: Object_004
  m_Shader: {fileID: 203, guid: 0000000000000000f000000000000000, type: 0}
  m_ShaderKeywords: 
  m_LightmapFlags: 4
Assets/00000/package/Materials/Object_005.mat
@@ -7,7 +7,7 @@
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_Name: Object_0029
  m_Name: Object_005
  m_Shader: {fileID: 203, guid: 0000000000000000f000000000000000, type: 0}
  m_ShaderKeywords: 
  m_LightmapFlags: 4
Assets/00000/package/Materials/Object_006.mat
@@ -7,7 +7,7 @@
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_Name: "\u7CBE\u70753"
  m_Name: Object_006
  m_Shader: {fileID: 203, guid: 0000000000000000f000000000000000, type: 0}
  m_ShaderKeywords: 
  m_LightmapFlags: 4
Assets/00000/package/Materials/Object_009.mat
@@ -7,7 +7,7 @@
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_Name: "1920\u6C34\u66761"
  m_Name: Object_009
  m_Shader: {fileID: 203, guid: 0000000000000000f000000000000000, type: 0}
  m_ShaderKeywords: 
  m_LightmapFlags: 4
Assets/00000/package/Materials/Sequence_005_4X3.mat
@@ -7,7 +7,7 @@
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_Name: 7e7ae91d-c194-4197-81f1-30d18678a08c
  m_Name: Sequence_005_4X3
  m_Shader: {fileID: 200, guid: 0000000000000000f000000000000000, type: 0}
  m_ShaderKeywords: 
  m_LightmapFlags: 4
Assets/00000/package/Materials/Sequence_006_6X5.mat
@@ -7,7 +7,7 @@
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_Name: 42c3f028-4755-4977-8544-0365321b0312
  m_Name: Sequence_006_6X5
  m_Shader: {fileID: 203, guid: 0000000000000000f000000000000000, type: 0}
  m_ShaderKeywords: 
  m_LightmapFlags: 4
Assets/00000/package/Materials/Sequence_007_4X3.mat
@@ -7,7 +7,7 @@
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_Name: 218d2fa5-3080-44fd-8769-2dcbb57a589f
  m_Name: Sequence_007_4X3
  m_Shader: {fileID: 203, guid: 0000000000000000f000000000000000, type: 0}
  m_ShaderKeywords: 
  m_LightmapFlags: 4
Assets/00000/package/Materials/Sequence_008_6X4.mat
@@ -7,7 +7,7 @@
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_Name: c8cd391b-30df-4811-9715-3b8cdf8c36c6
  m_Name: Sequence_008_6X4
  m_Shader: {fileID: 203, guid: 0000000000000000f000000000000000, type: 0}
  m_ShaderKeywords: 
  m_LightmapFlags: 4
Assets/00000/package/Materials/Sequence_009_3X2.mat
@@ -7,7 +7,7 @@
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_Name: ef115a70-dd8a-4420-9182-f650ae55c8da
  m_Name: Sequence_009_3X2
  m_Shader: {fileID: 203, guid: 0000000000000000f000000000000000, type: 0}
  m_ShaderKeywords: 
  m_LightmapFlags: 0
Assets/00000/package/Materials/Sequence_019_4X4_02.mat
@@ -7,7 +7,7 @@
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_Name: Sequence_019_4X4_b
  m_Name: Sequence_019_4X4_02
  m_Shader: {fileID: 203, guid: 0000000000000000f000000000000000, type: 0}
  m_ShaderKeywords: 
  m_LightmapFlags: 4
Assets/00000/package/Materials/Sequence_022_4X4_02.mat
@@ -7,7 +7,7 @@
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_Name: Sequence_022_4X4 1
  m_Name: Sequence_022_4X4_02
  m_Shader: {fileID: 203, guid: 0000000000000000f000000000000000, type: 0}
  m_ShaderKeywords: 
  m_LightmapFlags: 4
Assets/00000/package/Materials/Sequence_024_9X8_b.mat
@@ -7,7 +7,7 @@
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_Name: Sequence_024_9X8 1
  m_Name: Sequence_024_9X8_b
  m_Shader: {fileID: 203, guid: 0000000000000000f000000000000000, type: 0}
  m_ShaderKeywords: 
  m_LightmapFlags: 4
Assets/00000/package/Texture/Texmap_003.png.meta
@@ -3,11 +3,11 @@
TextureImporter:
  internalIDToNameTable: []
  externalObjects: {}
  serializedVersion: 10
  serializedVersion: 11
  mipmaps:
    mipMapMode: 0
    enableMipMap: 0
    sRGBTexture: 1
    enableMipMap: 1
    sRGBTexture: 0
    linearTexture: 0
    fadeOut: 0
    borderMipMap: 0
@@ -23,6 +23,7 @@
  isReadable: 0
  streamingMipmaps: 0
  streamingMipmapsPriority: 0
  vTOnly: 0
  grayScaleToAlpha: 0
  generateCubemap: 6
  cubemapConvolution: 0
@@ -49,14 +50,16 @@
  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
  spriteGenerateFallbackPhysicsShape: 1
  alphaUsage: 1
  alphaIsTransparency: 1
  alphaIsTransparency: 0
  spriteTessellationDetail: -1
  textureType: 0
  textureType: 1
  textureShape: 1
  singleChannelComponent: 0
  maxTextureSizeSet: 0
  compressionQualitySet: 0
  textureFormatSet: 0
  ignorePngGamma: 0
  applyGammaDecoding: 1
  platformSettings:
  - serializedVersion: 3
    buildTarget: DefaultTexturePlatform
Assets/GabrielAguiarProductions/Unique_Projectiles_Volume_1/Scripts/ProjectileMoveScript.cs
@@ -50,10 +50,10 @@
            }
        }
        if (shotSFX != null && GetComponent<AudioSource>())
        {
            GetComponent<AudioSource>().PlayOneShot(shotSFX);
        }
        // if (shotSFX != null && GetComponent<AudioSource>())
        // {
        //     GetComponent<AudioSource>().PlayOneShot(shotSFX);
        // }
        // StartCoroutine(RecycleParticle(gameObject, recycleDelay));
    }
Assets/Resources/Music.meta
New file
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 50373d69833fd2c4587aacb78149479e
folderAsset: yes
DefaultImporter:
  externalObjects: {}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Resources/Music/BGM1.mp3
Binary files differ
Assets/Resources/Music/BGM1.mp3.meta
New file
@@ -0,0 +1,22 @@
fileFormatVersion: 2
guid: 33c8d9123e51138469bc394b1d779b94
AudioImporter:
  externalObjects: {}
  serializedVersion: 6
  defaultSettings:
    loadType: 0
    sampleRateSetting: 0
    sampleRateOverride: 44100
    compressionFormat: 1
    quality: 1
    conversionMode: 0
  platformSettingOverrides: {}
  forceToMono: 0
  normalize: 1
  preloadAudioData: 1
  loadInBackground: 0
  ambisonic: 0
  3D: 1
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Resources/Music/BGM2.mp3
Binary files differ
Assets/Resources/Music/BGM2.mp3.meta
New file
@@ -0,0 +1,22 @@
fileFormatVersion: 2
guid: 6f2fb621b3ebc2c49a3e50032946657e
AudioImporter:
  externalObjects: {}
  serializedVersion: 6
  defaultSettings:
    loadType: 0
    sampleRateSetting: 0
    sampleRateOverride: 44100
    compressionFormat: 1
    quality: 1
    conversionMode: 0
  platformSettingOverrides: {}
  forceToMono: 0
  normalize: 1
  preloadAudioData: 1
  loadInBackground: 0
  ambisonic: 0
  3D: 1
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Resources/Music/BOSS死亡.wav
Binary files differ
Assets/Resources/Music/BOSS死亡.wav.meta
New file
@@ -0,0 +1,22 @@
fileFormatVersion: 2
guid: a8b59ef05212b344db6712b146dd2d49
AudioImporter:
  externalObjects: {}
  serializedVersion: 6
  defaultSettings:
    loadType: 0
    sampleRateSetting: 0
    sampleRateOverride: 44100
    compressionFormat: 1
    quality: 1
    conversionMode: 0
  platformSettingOverrides: {}
  forceToMono: 0
  normalize: 1
  preloadAudioData: 1
  loadInBackground: 0
  ambisonic: 0
  3D: 1
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Resources/Music/UI按键.mp3
Binary files differ
Assets/Resources/Music/UI按键.mp3.meta
New file
@@ -0,0 +1,22 @@
fileFormatVersion: 2
guid: 43808f08f96a2ed4c878dd497c285654
AudioImporter:
  externalObjects: {}
  serializedVersion: 6
  defaultSettings:
    loadType: 0
    sampleRateSetting: 0
    sampleRateOverride: 44100
    compressionFormat: 1
    quality: 1
    conversionMode: 0
  platformSettingOverrides: {}
  forceToMono: 0
  normalize: 1
  preloadAudioData: 1
  loadInBackground: 0
  ambisonic: 0
  3D: 1
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Resources/Music/不可点击_错误.wav
Binary files differ
Assets/Resources/Music/不可点击_错误.wav.meta
New file
@@ -0,0 +1,22 @@
fileFormatVersion: 2
guid: 0782288ff0426494da2f384e99479605
AudioImporter:
  externalObjects: {}
  serializedVersion: 6
  defaultSettings:
    loadType: 0
    sampleRateSetting: 0
    sampleRateOverride: 44100
    compressionFormat: 1
    quality: 1
    conversionMode: 0
  platformSettingOverrides: {}
  forceToMono: 0
  normalize: 1
  preloadAudioData: 1
  loadInBackground: 0
  ambisonic: 0
  3D: 1
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Resources/Music/拖动宝石时.wav
Binary files differ
Assets/Resources/Music/拖动宝石时.wav.meta
New file
@@ -0,0 +1,22 @@
fileFormatVersion: 2
guid: 742e0a01d32ae4442bfb87cd27dea761
AudioImporter:
  externalObjects: {}
  serializedVersion: 6
  defaultSettings:
    loadType: 0
    sampleRateSetting: 0
    sampleRateOverride: 44100
    compressionFormat: 1
    quality: 1
    conversionMode: 0
  platformSettingOverrides: {}
  forceToMono: 0
  normalize: 1
  preloadAudioData: 1
  loadInBackground: 0
  ambisonic: 0
  3D: 1
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Resources/Music/放下宝石.wav
Binary files differ
Assets/Resources/Music/放下宝石.wav.meta
New file
@@ -0,0 +1,22 @@
fileFormatVersion: 2
guid: 8a482b8cb705ac14ca63365b3b5f4cf7
AudioImporter:
  externalObjects: {}
  serializedVersion: 6
  defaultSettings:
    loadType: 0
    sampleRateSetting: 0
    sampleRateOverride: 44100
    compressionFormat: 1
    quality: 1
    conversionMode: 0
  platformSettingOverrides: {}
  forceToMono: 0
  normalize: 1
  preloadAudioData: 1
  loadInBackground: 0
  ambisonic: 0
  3D: 1
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Resources/Music/敌人攻击塔.wav
Binary files differ
Assets/Resources/Music/敌人攻击塔.wav.meta
New file
@@ -0,0 +1,22 @@
fileFormatVersion: 2
guid: b4264295d9357fb4684313bd508f2d47
AudioImporter:
  externalObjects: {}
  serializedVersion: 6
  defaultSettings:
    loadType: 0
    sampleRateSetting: 0
    sampleRateOverride: 44100
    compressionFormat: 1
    quality: 1
    conversionMode: 0
  platformSettingOverrides: {}
  forceToMono: 0
  normalize: 1
  preloadAudioData: 1
  loadInBackground: 0
  ambisonic: 0
  3D: 1
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Resources/Music/木攻击.wav
Binary files differ
Assets/Resources/Music/木攻击.wav.meta
New file
@@ -0,0 +1,22 @@
fileFormatVersion: 2
guid: 7df95920553c48542a42652d517d7bf9
AudioImporter:
  externalObjects: {}
  serializedVersion: 6
  defaultSettings:
    loadType: 0
    sampleRateSetting: 0
    sampleRateOverride: 44100
    compressionFormat: 1
    quality: 1
    conversionMode: 0
  platformSettingOverrides: {}
  forceToMono: 0
  normalize: 1
  preloadAudioData: 1
  loadInBackground: 0
  ambisonic: 0
  3D: 1
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Resources/Music/水攻击.wav
Binary files differ
Assets/Resources/Music/水攻击.wav.meta
New file
@@ -0,0 +1,22 @@
fileFormatVersion: 2
guid: 1b2f3693228142947998df0e8083ab76
AudioImporter:
  externalObjects: {}
  serializedVersion: 6
  defaultSettings:
    loadType: 0
    sampleRateSetting: 0
    sampleRateOverride: 44100
    compressionFormat: 1
    quality: 1
    conversionMode: 0
  platformSettingOverrides: {}
  forceToMono: 0
  normalize: 1
  preloadAudioData: 1
  loadInBackground: 0
  ambisonic: 0
  3D: 1
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Resources/Music/游戏结束.mp3
Binary files differ
Assets/Resources/Music/游戏结束.mp3.meta
New file
@@ -0,0 +1,22 @@
fileFormatVersion: 2
guid: 8d05baf767f6c014da8dafb958119d55
AudioImporter:
  externalObjects: {}
  serializedVersion: 6
  defaultSettings:
    loadType: 0
    sampleRateSetting: 0
    sampleRateOverride: 44100
    compressionFormat: 1
    quality: 1
    conversionMode: 0
  platformSettingOverrides: {}
  forceToMono: 0
  normalize: 1
  preloadAudioData: 1
  loadInBackground: 0
  ambisonic: 0
  3D: 1
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Resources/Music/火技能.wav
Binary files differ
Assets/Resources/Music/火技能.wav.meta
New file
@@ -0,0 +1,22 @@
fileFormatVersion: 2
guid: 9568b3c3314ba5e42ab333482d08136a
AudioImporter:
  externalObjects: {}
  serializedVersion: 6
  defaultSettings:
    loadType: 0
    sampleRateSetting: 0
    sampleRateOverride: 44100
    compressionFormat: 1
    quality: 1
    conversionMode: 0
  platformSettingOverrides: {}
  forceToMono: 0
  normalize: 1
  preloadAudioData: 1
  loadInBackground: 0
  ambisonic: 0
  3D: 1
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Resources/Music/火攻击.wav
Binary files differ
Assets/Resources/Music/火攻击.wav.meta
New file
@@ -0,0 +1,22 @@
fileFormatVersion: 2
guid: b034842bd9cf25e4f8428d69e5139efd
AudioImporter:
  externalObjects: {}
  serializedVersion: 6
  defaultSettings:
    loadType: 0
    sampleRateSetting: 0
    sampleRateOverride: 44100
    compressionFormat: 1
    quality: 1
    conversionMode: 0
  platformSettingOverrides: {}
  forceToMono: 0
  normalize: 1
  preloadAudioData: 1
  loadInBackground: 0
  ambisonic: 0
  3D: 1
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Resources/Music/电技能.wav
Binary files differ
Assets/Resources/Music/电技能.wav.meta
New file
@@ -0,0 +1,22 @@
fileFormatVersion: 2
guid: 00215b7c90990e141b365e74e26b4085
AudioImporter:
  externalObjects: {}
  serializedVersion: 6
  defaultSettings:
    loadType: 0
    sampleRateSetting: 0
    sampleRateOverride: 44100
    compressionFormat: 1
    quality: 1
    conversionMode: 0
  platformSettingOverrides: {}
  forceToMono: 0
  normalize: 1
  preloadAudioData: 1
  loadInBackground: 0
  ambisonic: 0
  3D: 1
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Resources/Music/翻书.wav
Binary files differ
Assets/Resources/Music/翻书.wav.meta
New file
@@ -0,0 +1,22 @@
fileFormatVersion: 2
guid: d4487dcf24219ad4ba6a1c264dd56425
AudioImporter:
  externalObjects: {}
  serializedVersion: 6
  defaultSettings:
    loadType: 0
    sampleRateSetting: 0
    sampleRateOverride: 44100
    compressionFormat: 1
    quality: 1
    conversionMode: 0
  platformSettingOverrides: {}
  forceToMono: 0
  normalize: 1
  preloadAudioData: 1
  loadInBackground: 0
  ambisonic: 0
  3D: 1
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Resources/Music/选择buff后.wav
Binary files differ
Assets/Resources/Music/选择buff后.wav.meta
New file
@@ -0,0 +1,22 @@
fileFormatVersion: 2
guid: 28f2776f5338e0d44af75342f26e20da
AudioImporter:
  externalObjects: {}
  serializedVersion: 6
  defaultSettings:
    loadType: 0
    sampleRateSetting: 0
    sampleRateOverride: 44100
    compressionFormat: 1
    quality: 1
    conversionMode: 0
  platformSettingOverrides: {}
  forceToMono: 0
  normalize: 1
  preloadAudioData: 1
  loadInBackground: 0
  ambisonic: 0
  3D: 1
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Resources/Music/金币.mp3
Binary files differ
Assets/Resources/Music/金币.mp3.meta
New file
@@ -0,0 +1,22 @@
fileFormatVersion: 2
guid: c577492ad0798ba4ba37ae8aaa7794b9
AudioImporter:
  externalObjects: {}
  serializedVersion: 6
  defaultSettings:
    loadType: 0
    sampleRateSetting: 0
    sampleRateOverride: 44100
    compressionFormat: 1
    quality: 1
    conversionMode: 0
  platformSettingOverrides: {}
  forceToMono: 0
  normalize: 1
  preloadAudioData: 1
  loadInBackground: 0
  ambisonic: 0
  3D: 1
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Scenes/Levels/Battle/Endless.unity
@@ -1275,7 +1275,7 @@
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
  m_IsActive: 0
--- !u!4 &157430578
Transform:
  m_ObjectHideFlags: 0
@@ -2124,7 +2124,7 @@
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
  m_IsActive: 0
--- !u!4 &224279364
Transform:
  m_ObjectHideFlags: 0
@@ -2845,7 +2845,7 @@
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
  m_IsActive: 0
--- !u!4 &336125253
Transform:
  m_ObjectHideFlags: 0
@@ -5000,7 +5000,7 @@
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
  m_IsActive: 0
--- !u!4 &622947616
Transform:
  m_ObjectHideFlags: 0
@@ -5763,7 +5763,7 @@
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
  m_IsActive: 0
--- !u!4 &786912553
Transform:
  m_ObjectHideFlags: 0
@@ -7187,7 +7187,7 @@
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
  m_IsActive: 0
--- !u!4 &938609223
Transform:
  m_ObjectHideFlags: 0
@@ -7453,7 +7453,7 @@
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
  m_IsActive: 0
--- !u!4 &958509393
Transform:
  m_ObjectHideFlags: 0
@@ -7865,7 +7865,7 @@
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
  m_IsActive: 0
--- !u!4 &1015273256
Transform:
  m_ObjectHideFlags: 0
@@ -8011,7 +8011,7 @@
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
  m_IsActive: 0
--- !u!4 &1017486113
Transform:
  m_ObjectHideFlags: 0
@@ -9005,7 +9005,7 @@
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
  m_IsActive: 0
--- !u!4 &1099308090
Transform:
  m_ObjectHideFlags: 0
@@ -9345,7 +9345,7 @@
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
  m_IsActive: 0
--- !u!4 &1149459456
Transform:
  m_ObjectHideFlags: 0
@@ -10293,7 +10293,7 @@
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
  m_IsActive: 0
--- !u!4 &1272628193
Transform:
  m_ObjectHideFlags: 0
@@ -10511,7 +10511,7 @@
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
  m_IsActive: 0
--- !u!4 &1312099771
Transform:
  m_ObjectHideFlags: 0
@@ -12730,7 +12730,7 @@
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
  m_IsActive: 0
--- !u!4 &1581489634
Transform:
  m_ObjectHideFlags: 0
@@ -13055,6 +13055,7 @@
  m_Script: {fileID: 11500000, guid: 003fa822c2d516a488dcbbed96c8d9ab, type: 3}
  m_Name: 
  m_EditorClassIdentifier: 
  buyButtonScaler: 1.9
  placementTilePrefab: {fileID: 114496876178851720, guid: 8ce97201eea4a404b86d7d0906b89847,
    type: 3}
  placementTilePrefabMobile: {fileID: 114496876178851720, guid: 18a440af7ac5d46c8af359534286c4bf,
@@ -13823,7 +13824,7 @@
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
  m_IsActive: 0
--- !u!4 &1719795769
Transform:
  m_ObjectHideFlags: 0
@@ -15400,7 +15401,7 @@
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
  m_IsActive: 0
--- !u!4 &1900826878
Transform:
  m_ObjectHideFlags: 0
@@ -15687,7 +15688,7 @@
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
  m_IsActive: 0
--- !u!4 &1930436492
Transform:
  m_ObjectHideFlags: 0
@@ -16111,19 +16112,7 @@
  m_TargetGraphic: {fileID: 1953656509}
  m_OnClick:
    m_PersistentCalls:
      m_Calls:
      - m_Target: {fileID: 1953656507}
        m_TargetAssemblyTypeName: EndlessRandomTower, Assembly-CSharp
        m_MethodName: onClick
        m_Mode: 1
        m_Arguments:
          m_ObjectArgument: {fileID: 0}
          m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
          m_IntArgument: 0
          m_FloatArgument: 0
          m_StringArgument:
          m_BoolArgument: 0
        m_CallState: 2
      m_Calls: []
--- !u!114 &1953656509
MonoBehaviour:
  m_ObjectHideFlags: 0
@@ -16510,7 +16499,7 @@
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 1967975859}
  m_Enabled: 1
  m_Enabled: 0
  serializedVersion: 4
  OutputAudioMixerGroup: {fileID: 243875498303300022, guid: c40bed98f23a748f89472abe9c1a6871,
    type: 2}
@@ -16936,7 +16925,7 @@
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
  m_IsActive: 0
--- !u!4 &1988006378
Transform:
  m_ObjectHideFlags: 0
@@ -18057,7 +18046,7 @@
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
  m_IsActive: 0
--- !u!4 &2076014242
Transform:
  m_ObjectHideFlags: 0
@@ -18293,7 +18282,7 @@
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
  m_IsActive: 0
--- !u!4 &2127394827
Transform:
  m_ObjectHideFlags: 0
Assets/Scripts/GameAnalytics_SDK/TDAA_SDKManager.cs
@@ -386,7 +386,6 @@
    private void OnDestroy()
    {
        Debug.Log("onDestroy");
        TalkingDataPlugin.SessionStoped();
    }
}
Assets/Scripts/GameAnalytics_SDK/UI/LoginUI.cs
@@ -82,6 +82,7 @@
    {
        if (!isLogining)
        {
            AudioSourceManager.Ins.Play(AudioEnum.UI);
            TDAA_SDKManager.Ins.Statistics(2);//埋点
            //StartCoroutine(loginMy());
Assets/Scripts/Manager/ManagerRoot.cs
@@ -16,12 +16,18 @@
            gameObject.AddComponent<DoNotDestory>();
            gameObject.AddComponent<MasterSocket>();
            gameObject.AddComponent<TDAA_SDKManager>();
            gameObject.AddComponent<AudioSourceManager>();
            //gameObject.AddComponent<ErrorLogOnGUIMyTools>();
            //gameObject.AddComponent<JsonDataReader>();
        }
        void Start()
        {
            AudioSourceManager.Ins.Play(AudioEnum.BGM1);
        }
        // public void AfterRead()
        // {
        //     JsonDataReader.Instance.StartRead(() =>
Assets/Scripts/Music.meta
New file
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: d330a3137fb70f24496338b85278f40e
folderAsset: yes
DefaultImporter:
  externalObjects: {}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Scripts/Music/AudioSourceManager.cs
New file
@@ -0,0 +1,272 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public enum AudioEnum
{
    BGM1,
    BGM2,
    UI,//UI按键
    UIDisable,//UI不可点击_错误
    BuffAppear,//翻书
    ChooseBuff,//选择buff后
    End,//游戏结束
    BossDie,//BOSS死亡
    AttackTower,//敌人攻击塔
    DragTower,//拖动宝石时
    PutTower,//放下宝石
    FireTAttack,//火攻击
    WaterTAttack,//水攻击
    WoodTAttack,//木攻击
    LightningSkill,//电技能
    FireSkill//火技能
}
public class AudioSourceManager : MonoBehaviour
{
    private static AudioSourceManager _ins;
    public static AudioSourceManager Ins
    {
        get { return _ins; }
    }
    private void Awake()
    {
        _ins = this;
        clipDic = new Dictionary<string, AudioClip>();
        audioSourceList = new List<AudioSource>();
        for (int i = 0; i < 5; i++)
        {
            audioSourceList.Add(gameObject.AddComponent<AudioSource>());
        }
    }
    private AudioSource audioSource;
    private List<AudioSource> audioSourceList = new List<AudioSource>();
    /// <summary>
    /// 跳过第一个,第一个用来播放背景音 获取一个空的组件
    /// </summary>
    /// <returns></returns>
    private AudioSource GetAudioSource()
    {
        for (int i = 1; i < audioSourceList.Count; i++)
        {
            if (!audioSourceList[i].isPlaying)
            {
                return audioSourceList[i];
            }
        }
        AudioSource tmpAudioSource = gameObject.AddComponent<AudioSource>();
        audioSourceList.Add(tmpAudioSource);
        return tmpAudioSource;
    }
    private AudioClip LoadAudioClip(string musicName)
    {
        if (clipDic.ContainsKey(musicName))
            return clipDic[musicName];
        else
        {
            AudioClip au = Resources.Load<AudioClip>("Music/" + musicName);
            clipDic.Add(musicName, au);
            return au;
        }
    }
    public void Play(AudioEnum en)
    {
        Debug.Log("播放了音效:"+en);
        switch (en)
        {
            case AudioEnum.BGM1:
                Play("BGM1", false);
                break;
            case AudioEnum.BGM2:
                Play("BGM2", false);
                break;
            case AudioEnum.UI:
                Play("UI按键", true);
                break;
            case AudioEnum.UIDisable:
                Play("不可点击_错误", true);
                break;
            case AudioEnum.BuffAppear:
                Play("翻书", true);
                break;
            case AudioEnum.ChooseBuff:
                StopOneShot("选择buff后", true);
                //Play("选择buff后", true);
                break;
            case AudioEnum.End:
                Play("游戏结束", true);
                break;
            case AudioEnum.BossDie:
                Play("BOSS死亡", true);
                break;
            case AudioEnum.AttackTower:
                Play("敌人攻击塔", true);
                break;
            case AudioEnum.DragTower:
                Play("拖动宝石时", true);
                break;
            case AudioEnum.PutTower:
                Play("放下宝石", true);
                break;
            case AudioEnum.FireTAttack:
                Play("火攻击", true);
                break;
            case AudioEnum.WaterTAttack:
                Play("水攻击", true);
                break;
            case AudioEnum.WoodTAttack:
                Play("木攻击", true);
                break;
            case AudioEnum.LightningSkill:
                Play("电技能", true);
                break;
            case AudioEnum.FireSkill:
                Play("火技能", true);
                break;
        }
    }
    Dictionary<string, AudioClip> clipDic;
    private void Play(string musicName, bool isOneShot)
    {
        AudioClip au = LoadAudioClip(musicName);
        AudioSource tmpAudioSource;
        //tmpAudioSource.volume = PlayerPrefs.GetFloat("BgmVal");
        if (isOneShot)
        {
            tmpAudioSource = GetAudioSource();
            tmpAudioSource.clip = au;
            tmpAudioSource.loop = false;
            //tmpAudioSource.PlayOneShot(au);//无法立刻暂停
            StartCoroutine(RemoAudio(tmpAudioSource, au));
        }
        else
        {
            tmpAudioSource = audioSourceList[0];
            tmpAudioSource.clip = au;
            tmpAudioSource.loop = true;
        }
        tmpAudioSource.Play();
    }
    /// <summary>
    /// 销毁音效
    /// </summary>
    /// <param name="audioClip"></param>
    private IEnumerator RemoAudio(AudioSource tmpAudioSource, AudioClip au)
    {
        if (audioSourceList.Count > 5)
        {
            yield return new WaitForSeconds(au.length);
            audioSourceList.Remove(tmpAudioSource);
            Destroy(tmpAudioSource);
        }
        yield break;
    }
    /// <summary>
    /// 调整音效时更新音量
    /// </summary>
    public void UpdateAudioVal()
    {
        foreach (AudioSource val in audioSourceList)
        {
            //便利所有的Bgm ,设置音量
            if (val)
            {
                val.volume = PlayerPrefs.GetFloat("BgmVal");
            }
        }
    }
    /// <summary>
    /// 删除指定音效
    /// </summary>
    /// <param name="audioName">被删除的音乐</param>
    public void DeleteAudio(string audioName)
    {
        foreach (AudioSource val in audioSourceList)
        {
            if (val && val.clip.name == audioName)
            {
                audioSourceList.Remove(val);
                Destroy(val.gameObject);
                break;
            }
        }
    }
    /// <summary>
    /// 音乐暂停
    /// </summary>
    /// <param name="isStop">是否暂停</param>
    public void StopAudio(bool isStop)
    {
        foreach (AudioSource val in audioSourceList)
        {
            if (isStop && val)
            {
                val.Pause();
            }
            else if (val)
            {
                val.Play();
            }
        }
    }
    /// <summary>
    /// 判断当前音乐是否存在
    /// </summary>
    /// <param name="audioName">音乐名字</param>
    /// <returns></returns>
    private bool AudioIsTrue(string audioName)
    {
        foreach (AudioSource val in audioSourceList)
        {
            if (val && val.clip.name == audioName)
            {
                return true;
            }
        }
        return false;
    }
    /// <summary>
    /// 停止播放某一个音效
    /// </summary>
    /// <param name="audioName"></param>
    private void StopOneShot(string musicName, bool isOneShot)
    {
        foreach (AudioSource val in audioSourceList)
        {
            if (val && val.clip && val.clip.name == musicName)
            {
                val.Stop();
                val.clip = null;
                break;
            }
        }
        Play(musicName, isOneShot);
    }
}
Assets/Scripts/Music/AudioSourceManager.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 25127f6980e3a024d86d7beab218785e
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Scripts/TowerDefense/Affectors/AttackAffector.cs
@@ -12,43 +12,43 @@
namespace TowerDefense.Affectors
{
    /// <summary>
    /// The common effect for handling firing projectiles to attack
    ///
    /// Requires an ILauncher but it is not automatically added
    /// Add an ILauncher implementation to this GameObject before you add this script
    /// </summary>
    [RequireComponent(typeof(ILauncher))]
    public class AttackAffector : Affector, ITowerRadiusProvider
    {
        /// <summary>
        /// The projectile used to attack
        /// </summary>
        public GameObject projectile;
    /// <summary>
    /// The common effect for handling firing projectiles to attack
    ///
    /// Requires an ILauncher but it is not automatically added
    /// Add an ILauncher implementation to this GameObject before you add this script
    /// </summary>
    [RequireComponent(typeof(ILauncher))]
    public class AttackAffector : Affector, ITowerRadiusProvider
    {
        /// <summary>
        /// The projectile used to attack
        /// </summary>
        public GameObject projectile;
        //
        protected GameObject projectile1;
        protected GameObject projectile2;
        //
        protected GameObject projectile1;
        protected GameObject projectile2;
        /// <summary>
        /// The list of points to launch the projectiles from
        /// </summary>
        public Transform[] projectilePoints;
        /// <summary>
        /// The list of points to launch the projectiles from
        /// </summary>
        public Transform[] projectilePoints;
        /// <summary>
        /// The reference to the center point where the tower will search from
        /// </summary>
        public Transform epicenter;
        /// <summary>
        /// The reference to the center point where the tower will search from
        /// </summary>
        public Transform epicenter;
        /// <summary>
        /// Configuration for when the tower does splash damage
        /// </summary>
        public bool isMultiAttack;
        /// <summary>
        /// Configuration for when the tower does splash damage
        /// </summary>
        public bool isMultiAttack;
        /// <summary>
        /// 如果是多目标攻击,最多攻击目标
        /// </summary>
        public int maxAttackNum = 1;
        /// <summary>
        /// 如果是多目标攻击,最多攻击目标
        /// </summary>
        public int maxAttackNum = 1;
        /// <summary>
@@ -57,356 +57,381 @@
        public float fireRate;
        /// <summary>
        /// 是否木属性数据
        /// </summary>
        public bool bWoodAffector = false;
        /// <summary>
        /// 是否木属性数据
        /// </summary>
        public bool bWoodAffector = false;
        /// <summary>
        /// The audio source to play when firing
        /// </summary>
        public RandomAudioSource randomAudioSource;
        /// <summary>
        /// The audio source to play when firing
        /// </summary>
        public RandomAudioSource randomAudioSource;
        /// <summary>
        /// Gets the targetter
        /// </summary>
        public Targetter towerTargetter;
        /// <summary>
        /// Gets the targetter
        /// </summary>
        public Targetter towerTargetter;
        /// <summary>
        /// Color of effect radius visualization
        /// </summary>
        public Color radiusEffectColor;
        /// <summary>
        /// Color of effect radius visualization
        /// </summary>
        public Color radiusEffectColor;
        /// <summary>
        /// Search condition
        /// </summary>
        public Filter searchCondition;
        /// <summary>
        /// Search condition
        /// </summary>
        public Filter searchCondition;
        /// <summary>
        /// Fire condition
        /// </summary>
        public Filter fireCondition;
        /// <summary>
        /// Fire condition
        /// </summary>
        public Filter fireCondition;
        /// <summary>
        /// The reference to the attached launcher
        /// </summary>
        protected ILauncher m_Launcher;
        /// <summary>
        /// The reference to the attached launcher
        /// </summary>
        protected ILauncher m_Launcher;
        /// <summary>
        /// The time before firing is possible
        /// </summary>
        protected float m_FireTimer;
        /// <summary>
        /// The time before firing is possible
        /// </summary>
        protected float m_FireTimer;
        /// <summary>
        /// Reference to the current tracked enemy
        /// </summary>
        protected Targetable m_TrackingEnemy;
        /// <summary>
        /// Reference to the current tracked enemy
        /// </summary>
        protected Targetable m_TrackingEnemy;
        /// <summary>
        /// 处理装弹时间.
        /// </summary>
        protected float fillBulletTime = 0.0f;
        /// <summary>
        /// 处理装弹时间.
        /// </summary>
        protected float fillBulletTime = 0.0f;
        /// <summary>
        /// 充能时间
        /// </summary>
        protected float energyCalTime = 0;
        protected float fInEnergy = 0;
        protected float fBackupTimer = 0.0f;
        /// <summary>
        /// Gets the search rate from the targetter
        /// </summary>
        public float searchRate
        {
            get { return towerTargetter.searchRate; }
            set { towerTargetter.searchRate = value; }
        }
        /// <summary>
        /// Gets the targetable
        /// </summary>
        public Targetable trackingEnemy
        {
            get { return m_TrackingEnemy; }
        }
        /// <summary>
        /// Gets or sets the attack radius
        /// </summary>
        public float effectRadius
        {
            get { return towerTargetter.effectRadius; }
        }
        public Color effectColor
        {
            get { return radiusEffectColor; }
        }
        public Targetter targetter
        {
            get { return towerTargetter; }
        }
        /// <summary>
        /// Initializes the attack affector
        /// </summary>
        public override void Initialize(IAlignmentProvider affectorAlignment)
        {
            Initialize(affectorAlignment, -1);
        }
        /// <summary>
        /// 返回可能存在的Targetter.
        /// </summary>
        /// <returns></returns>
        public override TowerDefense.Targetting.Targetter GetTargetter()
        {
            return targetter;
        }
        /// <summary>
        /// Initialises the  attack affector with a layer mask
        /// </summary>
        public override void Initialize(IAlignmentProvider affectorAlignment, LayerMask mask)
        {
            base.Initialize(affectorAlignment, mask);
            SetUpTimers();
            towerTargetter.ResetTargetter();
            towerTargetter.alignment = affectorAlignment;
            towerTargetter.acquiredTarget += OnAcquiredTarget;
            towerTargetter.lostTarget += OnLostTarget;
        }
        void OnDestroy()
        {
            towerTargetter.acquiredTarget -= OnAcquiredTarget;
            towerTargetter.lostTarget -= OnLostTarget;
        }
        void OnLostTarget()
        {
            m_TrackingEnemy = null;
        }
        void OnAcquiredTarget(Targetable acquiredTarget)
        {
            m_TrackingEnemy = acquiredTarget;
        }
        public Damager damagerProjectile
        {
            get { return projectile == null ? null : projectile.GetComponent<Damager>(); }
        }
        public Damager damagerProjectile1
        {
            get { return projectile == null ? null : projectile.GetComponent<Damager>(); }
        }
        public Damager damagerProjectile2
        {
            get { return projectile == null ? null : projectile.GetComponent<Damager>(); }
        }
        /// <summary>
        /// Returns the total projectile damage
        /// </summary>
        public float GetProjectileDamage()
        {
            var splash = projectile.GetComponent<SplashDamager>();
            float splashDamage = splash != null ? splash.damage : 0;
            return damagerProjectile.finalDamage + splashDamage;
        }
        /// <summary>
        /// Initialise the RepeatingTimer
        /// </summary>
        protected virtual void SetUpTimers()
        {
            m_FireTimer = 1 / fireRate;
            m_Launcher = GetComponent<ILauncher>();
        }
        protected void updateTowerSkillData()
        protected float fInEnergy = 0;
        protected float fBackupTimer = 0.0f;
        /// <summary>
        /// Gets the search rate from the targetter
        /// </summary>
        public float searchRate
        {
            //
            // 预留出来装填子弹的时间.
            if (fillBulletTime > 0)
            {
                fillBulletTime -= Time.deltaTime;
                if (fillBulletTime <= 0.3f)
                {
                    if (towerPtr && towerPtr.bulletCtl)
                        towerPtr.bulletCtl.resetToMaxBullet();
                }
            get { return towerTargetter.searchRate; }
            set { towerTargetter.searchRate = value; }
        }
                if (fillBulletTime <= 0)
                {
                    fillBulletTime = 0;
                }
            }
        /// <summary>
        /// Gets the targetable
        /// </summary>
        public Targetable trackingEnemy
        {
            get { return m_TrackingEnemy; }
        }
            //
            // 充能时间的处理
            if( towerPtr && towerPtr.energyCtl)
        /// <summary>
        /// Gets or sets the attack radius
        /// </summary>
        public float effectRadius
        {
            get { return towerTargetter.effectRadius; }
        }
        public Color effectColor
        {
            get { return radiusEffectColor; }
        }
        public Targetter targetter
        {
            get { return towerTargetter; }
        }
        /// <summary>
        /// Initializes the attack affector
        /// </summary>
        public override void Initialize(IAlignmentProvider affectorAlignment)
        {
            Initialize(affectorAlignment, -1);
        }
        /// <summary>
        /// 返回可能存在的Targetter.
        /// </summary>
        /// <returns></returns>
        public override TowerDefense.Targetting.Targetter GetTargetter()
        {
            return targetter;
        }
        /// <summary>
        /// Initialises the  attack affector with a layer mask
        /// </summary>
        public override void Initialize(IAlignmentProvider affectorAlignment, LayerMask mask)
        {
            base.Initialize(affectorAlignment, mask);
            SetUpTimers();
            towerTargetter.ResetTargetter();
            towerTargetter.alignment = affectorAlignment;
            towerTargetter.acquiredTarget += OnAcquiredTarget;
            towerTargetter.lostTarget += OnLostTarget;
            GetAudioEnum();
        }
        private AudioEnum audioEnum;//当前音乐的种类
        void GetAudioEnum()
        {
            if (transform.parent.name.StartsWith("GrowUpTower"))
            {
                if( this.fInEnergy <= 0)
                //火元素
                audioEnum = AudioEnum.FireTAttack;
            }
            else if (transform.parent.name.StartsWith("BlinkTower"))
            {
                //木元素
                audioEnum = AudioEnum.WoodTAttack;
            }
            else if (transform.parent.name.StartsWith("CopyCatTower"))
            {
                //水元素
                audioEnum = AudioEnum.WaterTAttack;
            }
        }
        void OnDestroy()
        {
            towerTargetter.acquiredTarget -= OnAcquiredTarget;
            towerTargetter.lostTarget -= OnLostTarget;
        }
        void OnLostTarget()
        {
            m_TrackingEnemy = null;
        }
        void OnAcquiredTarget(Targetable acquiredTarget)
        {
            m_TrackingEnemy = acquiredTarget;
        }
        public Damager damagerProjectile
        {
            get { return projectile == null ? null : projectile.GetComponent<Damager>(); }
        }
        public Damager damagerProjectile1
        {
            get { return projectile == null ? null : projectile.GetComponent<Damager>(); }
        }
        public Damager damagerProjectile2
        {
            get { return projectile == null ? null : projectile.GetComponent<Damager>(); }
        }
        /// <summary>
        /// Returns the total projectile damage
        /// </summary>
        public float GetProjectileDamage()
        {
            var splash = projectile.GetComponent<SplashDamager>();
            float splashDamage = splash != null ? splash.damage : 0;
            return damagerProjectile.finalDamage + splashDamage;
        }
        /// <summary>
        /// Initialise the RepeatingTimer
        /// </summary>
        protected virtual void SetUpTimers()
        {
            m_FireTimer = 1 / fireRate;
            m_Launcher = GetComponent<ILauncher>();
        }
        protected void updateTowerSkillData()
        {
            //
            // 预留出来装填子弹的时间.
            if (fillBulletTime > 0)
            {
                fillBulletTime -= Time.deltaTime;
                if (fillBulletTime <= 0.3f)
                {
                    this.energyCalTime += Time.deltaTime;
                    float process = energyCalTime % 11.0f;
                    int proint = (int)Math.Floor(process);
                    proint += towerPtr.uiProOffset;
                    towerPtr.energyCtl.SetEnergyProcessFloat( process );
                    if (proint == 10)
                    {
                        fInEnergy = 5.0f;
                    if (towerPtr && towerPtr.bulletCtl)
                        towerPtr.bulletCtl.resetToMaxBullet();
                }
                        // 设置多倍攻击速度
                        fBackupTimer = m_FireTimer;
                        m_FireTimer = m_FireTimer / 3.0f;
                if (fillBulletTime <= 0)
                {
                    fillBulletTime = 0;
                }
            }
                        towerPtr.uiProOffset = 0;
                        towerPtr.PlayEnergyEffect(true);
                    }
            //
            // 充能时间的处理
            if (towerPtr && towerPtr.energyCtl)
            {
                if (this.fInEnergy <= 0)
                {
                    this.energyCalTime += Time.deltaTime;
                    float process = energyCalTime % 11.0f;
                    int proint = (int)Math.Floor(process);
                    proint += towerPtr.uiProOffset;
                    towerPtr.energyCtl.SetEnergyProcessFloat(process);
                    if (proint == 10)
                    {
                        fInEnergy = 5.0f;
                        // 设置多倍攻击速度
                        fBackupTimer = m_FireTimer;
                        m_FireTimer = m_FireTimer / 3.0f;
                        towerPtr.uiProOffset = 0;
                        towerPtr.PlayEnergyEffect(true);
                    }
                }
                else
                {
                    fInEnergy -= Time.deltaTime;
                    if( fInEnergy <= 0)
                    fInEnergy -= Time.deltaTime;
                    if (fInEnergy <= 0)
                    {
                        EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.FireTowerChargeEnd);
                        fInEnergy = 0.0f;
                        this.energyCalTime = 0.0f;
                        towerPtr.energyCtl.SetEnergyProgress(0);
                        fInEnergy = 0.0f;
                        this.energyCalTime = 0.0f;
                        towerPtr.energyCtl.SetEnergyProgress(0);
                        // 恢复正常攻击速度
                        m_FireTimer = fBackupTimer;
                        // 恢复正常攻击速度
                        m_FireTimer = fBackupTimer;
                        towerPtr.PlayEnergyEffect(false);
                        towerPtr.PlayEnergyEffect(false);
                    }
                }
                    }
                }
            }
        }
            }
        }
        /// <summary>
        /// Update the timers
        /// </summary>
        protected virtual void Update()
        {
            // 处理当前Affector所在Tower对应的技能
            updateTowerSkillData();
        /// <summary>
        /// Update the timers
        /// </summary>
        protected virtual void Update()
        {
            // 处理当前Affector所在Tower对应的技能
            updateTowerSkillData();
            m_FireTimer -= Time.deltaTime;
            if( trackingEnemy == null )
                m_TrackingEnemy = targetter.GetTarget(waveLineID, bWoodAffector);
            if (trackingEnemy != null && m_FireTimer <= 0.0f)
            {
                OnFireTimer();
                m_FireTimer = 1 / fireRate;
                // 多倍攻速:
                if (fInEnergy > 0.0f)
                    m_FireTimer = m_FireTimer / 3.0f;
            }
        }
        /// <summary>
        /// Fired at every poll of the fire rate timer
        /// </summary>
        protected virtual void OnFireTimer()
        {
            if (fireCondition != null)
            {
                if (!fireCondition())
                {
                    return;
                }
            }
            FireProjectile();
        }
        /// <summary>
        /// Common logic when attacking
        /// 调用攻击的核心函数,由这个函数发起真正的攻击,多目标或者单目标
        /// </summary>
        protected virtual void FireProjectile()
        {
            // 不再处理多子弹攻击,确保只有一个弹道
            isMultiAttack = false;
            m_TrackingEnemy = targetter.GetTarget( waveLineID, bWoodAffector );
            if ( (m_TrackingEnemy == null) || (fillBulletTime>0) )
            {
                if (this.towerPtr)
                    towerPtr.setTowerState(false);
                return;
            }else
            m_FireTimer -= Time.deltaTime;
            if (trackingEnemy == null)
                m_TrackingEnemy = targetter.GetTarget(waveLineID, bWoodAffector);
            if (trackingEnemy != null && m_FireTimer <= 0.0f)
            {
                if (this.towerPtr)
                    towerPtr.setTowerState(true);
                OnFireTimer();
                m_FireTimer = 1 / fireRate;
                // 多倍攻速:
                if (fInEnergy > 0.0f)
                    m_FireTimer = m_FireTimer / 3.0f;
            }
        }
        /// <summary>
        /// Fired at every poll of the fire rate timer
        /// </summary>
        protected virtual void OnFireTimer()
        {
            if (fireCondition != null)
            {
                if (!fireCondition())
                {
                    return;
                }
            }
            FireProjectile();
        }
        /// <summary>
        /// Common logic when attacking
        /// 调用攻击的核心函数,由这个函数发起真正的攻击,多目标或者单目标
        /// </summary>
        protected virtual void FireProjectile()
        {
            // 不再处理多子弹攻击,确保只有一个弹道
            isMultiAttack = false;
            m_TrackingEnemy = targetter.GetTarget(waveLineID, bWoodAffector);
            if ((m_TrackingEnemy == null) || (fillBulletTime > 0))
            {
                if (this.towerPtr)
                    towerPtr.setTowerState(false);
                return;
            }
            else
            {
                if (this.towerPtr)
                    towerPtr.setTowerState(true);
            }
            //
            // 处理子弹充能相关的内容
            if( towerPtr && (towerPtr.bulletCtl != null))
            //
            // 处理子弹充能相关的内容
            if (towerPtr && (towerPtr.bulletCtl != null))
            {
                int bnum = towerPtr.bulletCtl.decBullet();
                //
                if (bnum == 0)
                {
                    damagerProjectile.damageMulti = 5.0f;
                    fillBulletTime = 2.0f;
                }
                int bnum = towerPtr.bulletCtl.decBullet();
                //
                if (bnum == 0)
                {
                    damagerProjectile.damageMulti = 5.0f;
                    fillBulletTime = 2.0f;
                }
            }
            if (isMultiAttack)
            {
                List<Targetable> enemies = towerTargetter.GetAllTargets();
                if( (enemies != null)&&(Targetter.bSearchTarget) )
                    m_Launcher.Launch(enemies, projectile, projectilePoints,this.maxAttackNum);
            }
            else
            {
                if(Targetter.bSearchTarget )
                    m_Launcher.Launch(m_TrackingEnemy, damagerProjectile.gameObject, projectilePoints);
            }
            if (randomAudioSource != null)
            {
                if( Targetter.bSearchTarget )
                    randomAudioSource.PlayRandomClip();
            }
        }
            if (isMultiAttack)
            {
                List<Targetable> enemies = towerTargetter.GetAllTargets();
                if ((enemies != null) && (Targetter.bSearchTarget))
                    m_Launcher.Launch(enemies, projectile, projectilePoints, this.maxAttackNum);
            }
            else
            {
                if (Targetter.bSearchTarget)
                {
                    m_Launcher.Launch(m_TrackingEnemy, damagerProjectile.gameObject, projectilePoints);
                    AudioSourceManager.Ins.Play(audioEnum);
                }
            }
            if (randomAudioSource != null)
            {
                if (Targetter.bSearchTarget)
                    randomAudioSource.PlayRandomClip();
            }
        }
        /// <summary>
        /// A delegate to compare distances of components
        /// </summary>
        /// <param name="first"></param>
        /// <param name="second"></param>
        protected virtual int ByDistance(Targetable first, Targetable second)
        {
            float firstSqrMagnitude = Vector3.SqrMagnitude(first.position - epicenter.position);
            float secondSqrMagnitude = Vector3.SqrMagnitude(second.position - epicenter.position);
            return firstSqrMagnitude.CompareTo(secondSqrMagnitude);
        }
        /// <summary>
        /// A delegate to compare distances of components
        /// </summary>
        /// <param name="first"></param>
        /// <param name="second"></param>
        protected virtual int ByDistance(Targetable first, Targetable second)
        {
            float firstSqrMagnitude = Vector3.SqrMagnitude(first.position - epicenter.position);
            float secondSqrMagnitude = Vector3.SqrMagnitude(second.position - epicenter.position);
            return firstSqrMagnitude.CompareTo(secondSqrMagnitude);
        }
#if UNITY_EDITOR
        /// <summary>
        /// Draws the search area
        /// </summary>
        void OnDrawGizmosSelected()
        {
            Gizmos.DrawWireSphere(epicenter.position, towerTargetter.effectRadius);
        }
        /// <summary>
        /// Draws the search area
        /// </summary>
        void OnDrawGizmosSelected()
        {
            Gizmos.DrawWireSphere(epicenter.position, towerTargetter.effectRadius);
        }
#endif
    }
    }
    /// <summary>
    /// A delegate for boolean calculation logic
    /// </summary>
    public delegate bool Filter();
    /// <summary>
    /// A delegate for boolean calculation logic
    /// </summary>
    public delegate bool Filter();
}
Assets/Scripts/TowerDefense/Input/EndlessTowerDefenseKeyboardMouseInput.cs
@@ -154,6 +154,9 @@
            m_GameUI.TryMoveGhost(pointer, false);
            this.isInDragState = true;
            AudioSourceManager.Ins.Play(AudioEnum.DragTower);
            //Debug.Log("开始拖拽");
        }
        protected override void OnDrag(PointerActionInfo pointer)
@@ -168,9 +171,15 @@
        {
            // EndDrag 只能放置相关的GhostTower.
            if (this.isInDragState)
                m_GameUI.onEndTowerDrag(pointer);
            {
                AudioSourceManager.Ins.Play(AudioEnum.PutTower);
            }
            m_GameUI.onEndTowerDrag(pointer);
            this.isInDragState = false;
            //Debug.Log("结束拖拽");
        }
        /// <summary>
Assets/Scripts/TowerDefense/Level/EndlessWaveLineManager.cs
@@ -60,6 +60,8 @@
            ps = obj.transform.GetChild(0).GetComponent<ParticleSystem>();
        ps.transform.position = EndlessLevelManager.instance.WaveManager.GetWaveEndPos(id);
        ps.Play();
        AudioSourceManager.Ins.Play(AudioEnum.FireSkill);
        Destroy(obj, ps.main.duration);
    }
@@ -78,6 +80,8 @@
            ps = obj.transform.GetChild(0).GetComponent<ParticleSystem>();
        ps.transform.position = pos;
        ps.Play();
        AudioSourceManager.Ins.Play(AudioEnum.LightningSkill);
        Destroy(obj, ps.main.duration);
    }
Assets/Scripts/TowerDefense/Towers/EndlessViewObtainedProps.cs
@@ -60,6 +60,8 @@
        public void OnClick()
        {
            AudioSourceManager.Ins.Play(AudioEnum.UI);
            isShow = !isShow;
            if (isShow) Refresh();
Assets/Scripts/TowerDefense/UI/EndGameScreen.cs
@@ -246,10 +246,10 @@
        protected void Victory()
        {
            OpenEndGameScreen(true);
            if ((victorySound != null) && (audioSource != null))
            {
                audioSource.PlayOneShot(victorySound);
            }
            // if ((victorySound != null) && (audioSource != null))
            // {
            //     audioSource.PlayOneShot(victorySound);
            // }
            //background.color = winBackgroundColor;
            //first check if there are any more levels after this one
@@ -294,10 +294,10 @@
            //    nextLevelButton.enabled = false;
            //    nextLevelButton.gameObject.SetActive(false);
            //}
            if ((defeatSound != null) && (audioSource != null))
            {
                audioSource.PlayOneShot(defeatSound);
            }
            // if ((defeatSound != null) && (audioSource != null))
            // {
            //     audioSource.PlayOneShot(defeatSound);
            // }
            //background.color = loseBackgroundColor;
        }
Assets/Scripts/TowerDefense/UI/EndlessBossHPManager.cs
@@ -139,6 +139,10 @@
        public void UpdateWave(int wave)
        {
            WaveNumText.text = $"x{wave}";
            if (wave == 0)
            {
                AudioSourceManager.Ins.Play(AudioEnum.BossDie);
            }
        }
        /// <summary>
Assets/Scripts/TowerDefense/UI/EndlessBuffSelect.cs
@@ -50,6 +50,9 @@
            {
                IconList[i].Reset();
            }
            AudioSourceManager.Ins?.Play(AudioEnum.BuffAppear);
        }
        
@@ -109,6 +112,8 @@
            int index = SelectedIndex;
            AudioSourceManager.Ins.Play(AudioEnum.UI);
            HideBuffUI();
            if (BuffSelectCompleted != null)
Assets/Scripts/TowerDefense/UI/EndlessSettlement.cs
@@ -126,8 +126,8 @@
        private void ShowPanel()
        {
            OpenEndGameScreen(true);
            if (VictoryAudio != null && AudioSource != null)
                AudioSource.PlayOneShot(VictoryAudio);
            // if (VictoryAudio != null && AudioSource != null)
            //     AudioSource.PlayOneShot(VictoryAudio);
        }
        /// <summary>
Assets/Scripts/TowerDefense/UI/EndlessSettlementPropList.cs
@@ -74,6 +74,8 @@
        private void StartLater()
        {
            AudioSourceManager.Ins.Play(AudioEnum.End);
            StartCoroutine(ShowSlow());
        }
Assets/Scripts/TowerDefense/UI/EndlessSwitchSpeed.cs
@@ -29,6 +29,8 @@
        public void OnClick()
        {
            AudioSourceManager.Ins.Play(AudioEnum.UI);
            SwitchSpeed();
        }
Assets/Scripts/TowerDefense/UI/EndlessUIStart.cs
@@ -85,6 +85,8 @@
        GameConfig.EndlessOpenAttackTowerCount = 0;
        GameConfig.EndlessBuyTowerCount = 0;
        GameConfig.EndlessPortUseSkillTowerCount = 0;
        AudioSourceManager.Ins.Play(AudioEnum.BGM2);
    }
    private void InitSDK()
@@ -93,6 +95,10 @@
            gameObject.AddComponent<TDAA_SDKManager>();
        TDAA_SDKManager.Ins.ArriveBattle();//埋点
        TDAA_SDKManager.Ins.Statistics(4);//埋点
        if (AudioSourceManager.Ins == null)
            gameObject.AddComponent<AudioSourceManager>();
    }
    /// <summary>
Assets/Scripts/TowerDefense/UI/HUD/EndlessGameUI.cs
@@ -1455,7 +1455,8 @@
        /// </summary>
        protected void disableRandomTowerBtn()
        {
            randomTowerBtn.interactable = false;
            randomTowerBtn.GetComponent<EndlessRandomTower>().ChangeBtnClick();
            //randomTowerBtn.interactable = false;
            if (towerPriceText)
            {
                towerPriceText.color = new Color(0.5f, 0.5f, 0.5f);
@@ -1477,7 +1478,10 @@
                towerPriceText.color = new Color(1.0f, 1.0f, 1.0f);
            if (randomTowerBtn)
                randomTowerBtn.interactable = true;
            {
                randomTowerBtn.GetComponent<EndlessRandomTower>().ChangeBtnClickNormal();
                //randomTowerBtn.interactable = true;
            }
            tdBuyDisable = false;
        }
Assets/Scripts/TowerDefense/UI/HUD/EndlessRandomTower.cs
@@ -88,7 +88,25 @@
        bCdTimeStart = false;
        cdTimeBg.gameObject.SetActive(false);
        cdTimeText.text = "";
        randomBtn.onClick.AddListener(onClick);
    }
    public void ChangeBtnClickNormal()
    {
        randomBtn.onClick.RemoveAllListeners();
        randomBtn.onClick.AddListener(onClick);
    }
    public void ChangeBtnClick()
    {
        randomBtn.onClick.RemoveAllListeners();
        randomBtn.onClick.AddListener(() =>
        {
            AudioSourceManager.Ins.Play(AudioEnum.UIDisable);
        });
    }
    /// <summary>
@@ -280,7 +298,14 @@
    /// </summary>
    public void onClick()
    {
        if (GameConfig.IsNewbie && !GameConfig.CanBuyNewTower) return;
        if (GameConfig.IsNewbie && !GameConfig.CanBuyNewTower)
        {
            AudioSourceManager.Ins.Play(AudioEnum.UIDisable);
            return;
        }
        AudioSourceManager.Ins.Play(AudioEnum.UI);
        // 还没到技能时间,忽略掉技能宝石
        Tower newTower = GetRandomTower(EndlessUIStart.instance.GameStartTime <= SKILL_TOWER_TIME);
@@ -295,7 +320,7 @@
    /// 随机找一个空白位置放置塔防
    /// </summary>
    /// <param name="tower"></param>
    public bool RandomPlaceTower(Tower tower, int level = -1, int cost = -1, int posx = - 1, int posy = -1)
    public bool RandomPlaceTower(Tower tower, int level = -1, int cost = -1, int posx = -1, int posy = -1)
    {
        EndlessGameUI gameUI = EndlessGameUI.instance;
Assets/Scripts/TowerDefense/UI/HUD/SelectBuffIcon.cs
@@ -59,6 +59,8 @@
        public void OnClick()
        {
            AudioSourceManager.Ins.Play(AudioEnum.ChooseBuff);
            if (OnSelectBuffCompleted != null)
                OnSelectBuffCompleted(Index);
        }
Assets/Scripts/TowerDefense/UI/MainMenuScene.cs
@@ -70,6 +70,8 @@
    /// </summary>
    public void cooperateBtnClick()
    {
        AudioSourceManager.Ins.Play(AudioEnum.UI);
        combatBtn.transform.DOKill();
        combatBtn.transform.localScale = new Vector3(1.0f, 1.0f, 1.0f);
        this.SafelyUnsubscribe();
@@ -83,6 +85,8 @@
    /// </summary>
    public void StartGame()
    {
        AudioSourceManager.Ins.Play(AudioEnum.UI);
        combatBtn.transform.DOKill();
        combatBtn.transform.localScale = new Vector3(1.0f, 1.0f, 1.0f);