Bladeren bron

水面效果

WGL 4 maanden geleden
bovenliggende
commit
d4062a0075
72 gewijzigde bestanden met toevoegingen van 4597 en 0 verwijderingen
  1. 8 0
      ActionTowerDefense/Assets/Realtime Planar Reflections.meta
  2. 8 0
      ActionTowerDefense/Assets/Realtime Planar Reflections/Material.meta
  3. 30 0
      ActionTowerDefense/Assets/Realtime Planar Reflections/Material/Blur.mat
  4. 4 0
      ActionTowerDefense/Assets/Realtime Planar Reflections/Material/Blur.mat.meta
  5. 81 0
      ActionTowerDefense/Assets/Realtime Planar Reflections/Material/Player.mat
  6. 4 0
      ActionTowerDefense/Assets/Realtime Planar Reflections/Material/Player.mat.meta
  7. 81 0
      ActionTowerDefense/Assets/Realtime Planar Reflections/Material/PlayerGun.mat
  8. 8 0
      ActionTowerDefense/Assets/Realtime Planar Reflections/Material/PlayerGun.mat.meta
  9. 53 0
      ActionTowerDefense/Assets/Realtime Planar Reflections/Material/Reflection.mat
  10. 4 0
      ActionTowerDefense/Assets/Realtime Planar Reflections/Material/Reflection.mat.meta
  11. 8 0
      ActionTowerDefense/Assets/Realtime Planar Reflections/Model.meta
  12. BIN
      ActionTowerDefense/Assets/Realtime Planar Reflections/Model/Player.fbx
  13. 384 0
      ActionTowerDefense/Assets/Realtime Planar Reflections/Model/Player.fbx.meta
  14. 8 0
      ActionTowerDefense/Assets/Realtime Planar Reflections/Script.meta
  15. 272 0
      ActionTowerDefense/Assets/Realtime Planar Reflections/Script/PlanarReflection.cs
  16. 8 0
      ActionTowerDefense/Assets/Realtime Planar Reflections/Script/PlanarReflection.cs.meta
  17. 8 0
      ActionTowerDefense/Assets/Realtime Planar Reflections/Shader.meta
  18. 94 0
      ActionTowerDefense/Assets/Realtime Planar Reflections/Shader/Blur.shader
  19. 5 0
      ActionTowerDefense/Assets/Realtime Planar Reflections/Shader/Blur.shader.meta
  20. 32 0
      ActionTowerDefense/Assets/Realtime Planar Reflections/Shader/Height Atten.shader
  21. 9 0
      ActionTowerDefense/Assets/Realtime Planar Reflections/Shader/Height Atten.shader.meta
  22. 103 0
      ActionTowerDefense/Assets/Realtime Planar Reflections/Shader/Reflection.shader
  23. 9 0
      ActionTowerDefense/Assets/Realtime Planar Reflections/Shader/Reflection.shader.meta
  24. 8 0
      ActionTowerDefense/Assets/Realtime Planar Reflections/Texture.meta
  25. BIN
      ActionTowerDefense/Assets/Realtime Planar Reflections/Texture/Bump.png
  26. 47 0
      ActionTowerDefense/Assets/Realtime Planar Reflections/Texture/Bump.png.meta
  27. BIN
      ActionTowerDefense/Assets/Realtime Planar Reflections/Texture/Ground.jpg
  28. 47 0
      ActionTowerDefense/Assets/Realtime Planar Reflections/Texture/Ground.jpg.meta
  29. BIN
      ActionTowerDefense/Assets/Realtime Planar Reflections/Texture/Mask.png
  30. 47 0
      ActionTowerDefense/Assets/Realtime Planar Reflections/Texture/Mask.png.meta
  31. BIN
      ActionTowerDefense/Assets/Realtime Planar Reflections/Texture/Player.png
  32. 47 0
      ActionTowerDefense/Assets/Realtime Planar Reflections/Texture/Player.png.meta
  33. BIN
      ActionTowerDefense/Assets/Realtime Planar Reflections/Texture/PlayerGun.png
  34. 55 0
      ActionTowerDefense/Assets/Realtime Planar Reflections/Texture/PlayerGun.png.meta
  35. 427 0
      ActionTowerDefense/Assets/Resources/Prefab/ScenceInteraction/Ripples.prefab
  36. 7 0
      ActionTowerDefense/Assets/Resources/Prefab/ScenceInteraction/Ripples.prefab.meta
  37. 8 0
      ActionTowerDefense/Assets/Ripple.meta
  38. 137 0
      ActionTowerDefense/Assets/Ripple/AddShader.shader
  39. 9 0
      ActionTowerDefense/Assets/Ripple/AddShader.shader.meta
  40. 49 0
      ActionTowerDefense/Assets/Ripple/DrawShader.shader
  41. 9 0
      ActionTowerDefense/Assets/Ripple/DrawShader.shader.meta
  42. 48 0
      ActionTowerDefense/Assets/Ripple/HeightToNormal.asset
  43. 8 0
      ActionTowerDefense/Assets/Ripple/HeightToNormal.asset.meta
  44. 80 0
      ActionTowerDefense/Assets/Ripple/Interactive.mat
  45. 8 0
      ActionTowerDefense/Assets/Ripple/Interactive.mat.meta
  46. 33 0
      ActionTowerDefense/Assets/Ripple/InteractiveObj.cs
  47. 11 0
      ActionTowerDefense/Assets/Ripple/InteractiveObj.cs.meta
  48. 39 0
      ActionTowerDefense/Assets/Ripple/InteractiveRT.renderTexture
  49. 8 0
      ActionTowerDefense/Assets/Ripple/InteractiveRT.renderTexture.meta
  50. 8 0
      ActionTowerDefense/Assets/Ripple/Materials.meta
  51. 33 0
      ActionTowerDefense/Assets/Ripple/Materials/sunset.mat
  52. 8 0
      ActionTowerDefense/Assets/Ripple/Materials/sunset.mat.meta
  53. 77 0
      ActionTowerDefense/Assets/Ripple/New Material 2.mat
  54. 8 0
      ActionTowerDefense/Assets/Ripple/New Material 2.mat.meta
  55. 107 0
      ActionTowerDefense/Assets/Ripple/Ripple.cs
  56. 11 0
      ActionTowerDefense/Assets/Ripple/Ripple.cs.meta
  57. 60 0
      ActionTowerDefense/Assets/Ripple/RippleShader.shader
  58. 9 0
      ActionTowerDefense/Assets/Ripple/RippleShader.shader.meta
  59. 91 0
      ActionTowerDefense/Assets/Ripple/Sky.mat
  60. 8 0
      ActionTowerDefense/Assets/Ripple/Sky.mat.meta
  61. 92 0
      ActionTowerDefense/Assets/Ripple/Water.mat
  62. 8 0
      ActionTowerDefense/Assets/Ripple/Water.mat.meta
  63. 223 0
      ActionTowerDefense/Assets/Ripple/Water.shader
  64. 9 0
      ActionTowerDefense/Assets/Ripple/Water.shader.meta
  65. BIN
      ActionTowerDefense/Assets/Ripple/brick.png
  66. 92 0
      ActionTowerDefense/Assets/Ripple/brick.png.meta
  67. BIN
      ActionTowerDefense/Assets/Ripple/brickn.png
  68. 116 0
      ActionTowerDefense/Assets/Ripple/brickn.png.meta
  69. BIN
      ActionTowerDefense/Assets/Ripple/sunset.hdr
  70. 104 0
      ActionTowerDefense/Assets/Ripple/sunset.hdr.meta
  71. 1169 0
      ActionTowerDefense/Assets/Scenes/Water.unity
  72. 11 0
      ActionTowerDefense/Assets/Scenes/Water.unity.meta

+ 8 - 0
ActionTowerDefense/Assets/Realtime Planar Reflections.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 24785289aa09a714d8722a9f8fae5141
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
ActionTowerDefense/Assets/Realtime Planar Reflections/Material.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 2f3a1a621faf2454eb60e1490ab596da
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 30 - 0
ActionTowerDefense/Assets/Realtime Planar Reflections/Material/Blur.mat

@@ -0,0 +1,30 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+  serializedVersion: 6
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_Name: Blur
+  m_Shader: {fileID: 4800000, guid: fe5a36b059df2574ba867fba17c2aa28, type: 3}
+  m_ShaderKeywords: 
+  m_LightmapFlags: 5
+  m_CustomRenderQueue: -1
+  stringTagMap: {}
+  m_SavedProperties:
+    serializedVersion: 2
+    m_TexEnvs:
+      data:
+        first:
+          name: _MainTex
+        second:
+          m_Texture: {fileID: 0}
+          m_Scale: {x: 1, y: 1}
+          m_Offset: {x: 0, y: 0}
+    m_Floats: {}
+    m_Colors:
+      data:
+        first:
+          name: _Color
+        second: {r: 1, g: 1, b: 1, a: 1}

+ 4 - 0
ActionTowerDefense/Assets/Realtime Planar Reflections/Material/Blur.mat.meta

@@ -0,0 +1,4 @@
+fileFormatVersion: 2
+guid: c4a04261945118f4a85111aa652686ed
+NativeFormatImporter:
+  userData: 

+ 81 - 0
ActionTowerDefense/Assets/Realtime Planar Reflections/Material/Player.mat

@@ -0,0 +1,81 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+  serializedVersion: 8
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: Player
+  m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
+  m_ValidKeywords:
+  - _EMISSION
+  m_InvalidKeywords: []
+  m_LightmapFlags: 1
+  m_EnableInstancingVariants: 0
+  m_DoubleSidedGI: 0
+  m_CustomRenderQueue: -1
+  stringTagMap: {}
+  disabledShaderPasses: []
+  m_SavedProperties:
+    serializedVersion: 3
+    m_TexEnvs:
+    - _BumpMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _DetailAlbedoMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _DetailMask:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _DetailNormalMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _EmissionMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _MainTex:
+        m_Texture: {fileID: 2800000, guid: dc1e87e09a32b194eb08420abdfb7f93, type: 3}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _MetallicGlossMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _OcclusionMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _ParallaxMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    m_Ints: []
+    m_Floats:
+    - _BumpScale: 1
+    - _Cutoff: 0.5
+    - _DetailNormalMapScale: 1
+    - _DstBlend: 0
+    - _GlossMapScale: 1
+    - _Glossiness: 0.5
+    - _GlossyReflections: 1
+    - _Metallic: 0
+    - _Mode: 0
+    - _OcclusionStrength: 1
+    - _Parallax: 0.02
+    - _SmoothnessTextureChannel: 0
+    - _SpecularHighlights: 1
+    - _SrcBlend: 1
+    - _UVSec: 0
+    - _ZWrite: 1
+    m_Colors:
+    - _Color: {r: 1, g: 1, b: 1, a: 1}
+    - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
+  m_BuildTextureStacks: []

+ 4 - 0
ActionTowerDefense/Assets/Realtime Planar Reflections/Material/Player.mat.meta

@@ -0,0 +1,4 @@
+fileFormatVersion: 2
+guid: 3bf26de3de116544099d80c42bc9e053
+NativeFormatImporter:
+  userData: 

+ 81 - 0
ActionTowerDefense/Assets/Realtime Planar Reflections/Material/PlayerGun.mat

@@ -0,0 +1,81 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+  serializedVersion: 8
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: PlayerGun
+  m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
+  m_ValidKeywords:
+  - _EMISSION
+  m_InvalidKeywords: []
+  m_LightmapFlags: 1
+  m_EnableInstancingVariants: 0
+  m_DoubleSidedGI: 0
+  m_CustomRenderQueue: -1
+  stringTagMap: {}
+  disabledShaderPasses: []
+  m_SavedProperties:
+    serializedVersion: 3
+    m_TexEnvs:
+    - _BumpMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _DetailAlbedoMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _DetailMask:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _DetailNormalMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _EmissionMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _MainTex:
+        m_Texture: {fileID: 2800000, guid: 6fef107f23622bb4a929fc0cc0b23bc2, type: 3}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _MetallicGlossMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _OcclusionMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _ParallaxMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    m_Ints: []
+    m_Floats:
+    - _BumpScale: 1
+    - _Cutoff: 0.5
+    - _DetailNormalMapScale: 1
+    - _DstBlend: 0
+    - _GlossMapScale: 1
+    - _Glossiness: 0.5
+    - _GlossyReflections: 1
+    - _Metallic: 0
+    - _Mode: 0
+    - _OcclusionStrength: 1
+    - _Parallax: 0.02
+    - _SmoothnessTextureChannel: 0
+    - _SpecularHighlights: 1
+    - _SrcBlend: 1
+    - _UVSec: 0
+    - _ZWrite: 1
+    m_Colors:
+    - _Color: {r: 1, g: 1, b: 1, a: 1}
+    - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
+  m_BuildTextureStacks: []

+ 8 - 0
ActionTowerDefense/Assets/Realtime Planar Reflections/Material/PlayerGun.mat.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 0c78792007d4aef45a3beeb967b75a49
+timeCreated: 1507304121
+licenseType: Store
+NativeFormatImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 53 - 0
ActionTowerDefense/Assets/Realtime Planar Reflections/Material/Reflection.mat

@@ -0,0 +1,53 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+  serializedVersion: 8
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: Reflection
+  m_Shader: {fileID: 4800000, guid: 40d463ea0857bae45a8c74d9333d45a9, type: 3}
+  m_ValidKeywords: []
+  m_InvalidKeywords: []
+  m_LightmapFlags: 4
+  m_EnableInstancingVariants: 0
+  m_DoubleSidedGI: 0
+  m_CustomRenderQueue: -1
+  stringTagMap: {}
+  disabledShaderPasses: []
+  m_SavedProperties:
+    serializedVersion: 3
+    m_TexEnvs:
+    - _BumpTex:
+        m_Texture: {fileID: 2800000, guid: c69013a659832c649b56a9b1fb39911a, type: 3}
+        m_Scale: {x: 3, y: 3}
+        m_Offset: {x: 0, y: 0}
+    - _HeightAttenTex:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _MainTex:
+        m_Texture: {fileID: 2800000, guid: d8415a46bfbd3334fb1a5d6a2f28116e, type: 3}
+        m_Scale: {x: 3, y: 3}
+        m_Offset: {x: 0, y: 0}
+    - _MaskTex:
+        m_Texture: {fileID: 2800000, guid: ef1dcffc7ec50cf4b87ffee59961fc9e, type: 3}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _ReflectionTex:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _SharpReflectionTex:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    m_Ints: []
+    m_Floats:
+    - _BumpStrength: 0.5
+    - _ReflectionStrength: 0.8
+    m_Colors:
+    - _ReflectionTint: {r: 1, g: 1, b: 1, a: 1}
+  m_BuildTextureStacks: []

+ 4 - 0
ActionTowerDefense/Assets/Realtime Planar Reflections/Material/Reflection.mat.meta

@@ -0,0 +1,4 @@
+fileFormatVersion: 2
+guid: 95594790b7b8e2848a86e8c0aafecba5
+NativeFormatImporter:
+  userData: 

+ 8 - 0
ActionTowerDefense/Assets/Realtime Planar Reflections/Model.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: c0ca135bea74b6f45a71991baaba9df7
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

BIN
ActionTowerDefense/Assets/Realtime Planar Reflections/Model/Player.fbx


+ 384 - 0
ActionTowerDefense/Assets/Realtime Planar Reflections/Model/Player.fbx.meta

@@ -0,0 +1,384 @@
+fileFormatVersion: 2
+guid: d5bf700fbdd87b34486cab99c350a766
+ModelImporter:
+  serializedVersion: 16
+  fileIDToRecycleName:
+    100000: Ctrl_Grp
+    100002: Gun
+    100004: Gun 1
+    100006: GunBarrelEnd
+    100008: GunBarrelStretch
+    100010: Hat1
+    100012: Hat2
+    100014: Hat3
+    100016: Hat4
+    100018: Hat5
+    100020: HatEnd
+    100022: Head
+    100024: Hips
+    100026: HipSway
+    100028: LeftBrow1
+    100030: LeftBrow1End
+    100032: LeftBrow2
+    100034: LeftBrow2End
+    100036: LeftBrow3
+    100038: LeftBrow3End
+    100040: LeftHand1
+    100042: LeftHand2
+    100044: LeftLeg
+    100046: LeftLowerArm
+    100048: LeftLowerArm2
+    100050: LeftLowerArm2_IK
+    100052: LeftLowerArm_2_FK
+    100054: LeftLowerArm_FK
+    100056: LeftLowerArm_IK
+    100058: LeftShoulder
+    100060: LeftThumb1
+    100062: LeftThumb2
+    100064: LeftToe
+    100066: LeftUpperArm
+    100068: LeftUpperArm_FK
+    100070: LeftUpperArm_IK
+    100072: LeftWrist
+    100074: LeftWrist_FK
+    100076: LeftWrist_IK
+    100078: //RootNode
+    100080: Player
+    100082: PlayerCtrl
+    100084: RightBrow1
+    100086: RightBrow1End
+    100088: RightBrow2
+    100090: RightBrow2End
+    100092: RightBrow3
+    100094: RightBrow3End
+    100096: RightHand1
+    100098: RightHand2
+    100100: RightLeg
+    100102: RightLowerArm
+    100104: RightLowerArm2
+    100106: RightLowerArm2_FK
+    100108: RightLowerArm2_IK
+    100110: RightLowerArm_FK
+    100112: RightLowerArm_IK
+    100114: RightShoulder
+    100116: RightThumb1
+    100118: RightThumb2
+    100120: RightToe
+    100122: RightUpperArm
+    100124: RightUpperArm_FK
+    100126: RightUpperArm_IK
+    100128: RightWrist
+    100130: RightWrist_FK
+    100132: RightWrist_IK
+    100134: Root
+    100136: Spine
+    100138: Tail1
+    100140: Tail2
+    100142: Tail3
+    400000: Ctrl_Grp
+    400002: Gun
+    400004: Gun 1
+    400006: GunBarrelEnd
+    400008: GunBarrelStretch
+    400010: Hat1
+    400012: Hat2
+    400014: Hat3
+    400016: Hat4
+    400018: Hat5
+    400020: HatEnd
+    400022: Head
+    400024: Hips
+    400026: HipSway
+    400028: LeftBrow1
+    400030: LeftBrow1End
+    400032: LeftBrow2
+    400034: LeftBrow2End
+    400036: LeftBrow3
+    400038: LeftBrow3End
+    400040: LeftHand1
+    400042: LeftHand2
+    400044: LeftLeg
+    400046: LeftLowerArm
+    400048: LeftLowerArm2
+    400050: LeftLowerArm2_IK
+    400052: LeftLowerArm_2_FK
+    400054: LeftLowerArm_FK
+    400056: LeftLowerArm_IK
+    400058: LeftShoulder
+    400060: LeftThumb1
+    400062: LeftThumb2
+    400064: LeftToe
+    400066: LeftUpperArm
+    400068: LeftUpperArm_FK
+    400070: LeftUpperArm_IK
+    400072: LeftWrist
+    400074: LeftWrist_FK
+    400076: LeftWrist_IK
+    400078: Player
+    400080: //RootNode
+    400082: PlayerCtrl
+    400084: RightBrow1
+    400086: RightBrow1End
+    400088: RightBrow2
+    400090: RightBrow2End
+    400092: RightBrow3
+    400094: RightBrow3End
+    400096: RightHand1
+    400098: RightHand2
+    400100: RightLeg
+    400102: RightLowerArm
+    400104: RightLowerArm2
+    400106: RightLowerArm2_FK
+    400108: RightLowerArm2_IK
+    400110: RightLowerArm_FK
+    400112: RightLowerArm_IK
+    400114: RightShoulder
+    400116: RightThumb1
+    400118: RightThumb2
+    400120: RightToe
+    400122: RightUpperArm
+    400124: RightUpperArm_FK
+    400126: RightUpperArm_IK
+    400128: RightWrist
+    400130: RightWrist_FK
+    400132: RightWrist_IK
+    400134: Root
+    400136: Spine
+    400138: Tail1
+    400140: Tail2
+    400142: Tail3
+    2300000: Gun
+    2300002: Player
+    3300000: Gun
+    3300002: Player
+    4300000: Gun
+    4300002: Player
+    7400000: Take 001
+    9500000: //RootNode
+    11100000: //RootNode
+    13700000: Gun
+    13700002: Player
+  materials:
+    importMaterials: 0
+    materialName: 0
+    materialSearch: 1
+  animations:
+    legacyGenerateAnimations: 4
+    bakeSimulation: 0
+    optimizeGameObjects: 0
+    motionNodeName: 
+    animationCompression: 0
+    animationRotationError: .5
+    animationPositionError: .5
+    animationScaleError: .5
+    animationWrapMode: 2
+    extraExposedTransformPaths: []
+    clipAnimations:
+    - serializedVersion: 16
+      name: Take 001
+      takeName: Take 001
+      firstFrame: 1
+      lastFrame: 150
+      wrapMode: 2
+      orientationOffsetY: 0
+      level: 0
+      cycleOffset: 0
+      loop: 0
+      loopTime: 0
+      loopBlend: 0
+      loopBlendOrientation: 0
+      loopBlendPositionY: 0
+      loopBlendPositionXZ: 0
+      keepOriginalOrientation: 0
+      keepOriginalPositionY: 1
+      keepOriginalPositionXZ: 0
+      heightFromFeet: 0
+      mirror: 0
+      bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000
+      curves: []
+      events: []
+      transformMask:
+      - path: 
+        weight: 1
+      - path: Gun
+        weight: 1
+      - path: Player
+        weight: 1
+      - path: PlayerCtrl
+        weight: 1
+      - path: PlayerCtrl/Ctrl_Grp
+        weight: 1
+      - path: PlayerCtrl/Ctrl_Grp/Gun 1
+        weight: 1
+      - path: PlayerCtrl/Ctrl_Grp/Gun 1/GunBarrelStretch
+        weight: 1
+      - path: PlayerCtrl/Ctrl_Grp/Gun 1/GunBarrelStretch/GunBarrelEnd
+        weight: 1
+      - path: PlayerCtrl/Root
+        weight: 1
+      - path: PlayerCtrl/Root/Hips
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/HipSway
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/HipSway/LeftLeg
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/HipSway/LeftLeg/LeftToe
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/HipSway/RightLeg
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/HipSway/RightLeg/RightToe
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/Head
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/Head/Hat1
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/Head/Hat1/Hat2
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/Head/Hat1/Hat2/Hat3
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/Head/Hat1/Hat2/Hat3/Hat4
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/Head/Hat1/Hat2/Hat3/Hat4/Hat5
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/Head/Hat1/Hat2/Hat3/Hat4/Hat5/HatEnd
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/Head/LeftBrow1
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/Head/LeftBrow1/LeftBrow1End
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/Head/LeftBrow2
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/Head/LeftBrow2/LeftBrow2End
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/Head/LeftBrow3
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/Head/LeftBrow3/LeftBrow3End
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/Head/RightBrow1
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/Head/RightBrow1/RightBrow1End
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/Head/RightBrow2
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/Head/RightBrow2/RightBrow2End
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/Head/RightBrow3
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/Head/RightBrow3/RightBrow3End
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/LeftShoulder
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/LeftShoulder/LeftUpperArm
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/LeftShoulder/LeftUpperArm/LeftLowerArm
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/LeftShoulder/LeftUpperArm/LeftLowerArm/LeftLowerArm2
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/LeftShoulder/LeftUpperArm/LeftLowerArm/LeftLowerArm2/LeftWrist
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/LeftShoulder/LeftUpperArm/LeftLowerArm/LeftLowerArm2/LeftWrist/LeftHand1
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/LeftShoulder/LeftUpperArm/LeftLowerArm/LeftLowerArm2/LeftWrist/LeftHand1/LeftHand2
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/LeftShoulder/LeftUpperArm/LeftLowerArm/LeftLowerArm2/LeftWrist/LeftThumb1
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/LeftShoulder/LeftUpperArm/LeftLowerArm/LeftLowerArm2/LeftWrist/LeftThumb1/LeftThumb2
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/LeftShoulder/LeftUpperArm_FK
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/LeftShoulder/LeftUpperArm_FK/LeftLowerArm_FK
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/LeftShoulder/LeftUpperArm_FK/LeftLowerArm_FK/LeftLowerArm_2_FK
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/LeftShoulder/LeftUpperArm_FK/LeftLowerArm_FK/LeftLowerArm_2_FK/LeftWrist_FK
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/LeftShoulder/LeftUpperArm_IK
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/LeftShoulder/LeftUpperArm_IK/LeftLowerArm_IK
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/LeftShoulder/LeftUpperArm_IK/LeftLowerArm_IK/LeftLowerArm2_IK
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/LeftShoulder/LeftUpperArm_IK/LeftLowerArm_IK/LeftLowerArm2_IK/LeftWrist_IK
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/RightShoulder
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/RightShoulder/RightUpperArm
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/RightShoulder/RightUpperArm/RightLowerArm
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/RightShoulder/RightUpperArm/RightLowerArm/RightLowerArm2
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/RightShoulder/RightUpperArm/RightLowerArm/RightLowerArm2/RightWrist
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/RightShoulder/RightUpperArm/RightLowerArm/RightLowerArm2/RightWrist/RightHand1
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/RightShoulder/RightUpperArm/RightLowerArm/RightLowerArm2/RightWrist/RightHand1/RightHand2
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/RightShoulder/RightUpperArm/RightLowerArm/RightLowerArm2/RightWrist/RightThumb1
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/RightShoulder/RightUpperArm/RightLowerArm/RightLowerArm2/RightWrist/RightThumb1/RightThumb2
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/RightShoulder/RightUpperArm_FK
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/RightShoulder/RightUpperArm_FK/RightLowerArm_FK
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/RightShoulder/RightUpperArm_FK/RightLowerArm_FK/RightLowerArm2_FK
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/RightShoulder/RightUpperArm_FK/RightLowerArm_FK/RightLowerArm2_FK/RightWrist_FK
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/RightShoulder/RightUpperArm_IK
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/RightShoulder/RightUpperArm_IK/RightLowerArm_IK
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/RightShoulder/RightUpperArm_IK/RightLowerArm_IK/RightLowerArm2_IK
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Spine/RightShoulder/RightUpperArm_IK/RightLowerArm_IK/RightLowerArm2_IK/RightWrist_IK
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Tail1
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Tail1/Tail2
+        weight: 1
+      - path: PlayerCtrl/Root/Hips/Tail1/Tail2/Tail3
+        weight: 1
+      maskType: 0
+      maskSource: {instanceID: 0}
+    isReadable: 0
+  meshes:
+    lODScreenPercentages: []
+    globalScale: .00999999978
+    meshCompression: 0
+    addColliders: 0
+    importBlendShapes: 1
+    swapUVChannels: 0
+    generateSecondaryUV: 0
+    useFileUnits: 1
+    optimizeMeshForGPU: 1
+    weldVertices: 1
+    secondaryUVAngleDistortion: 8
+    secondaryUVAreaDistortion: 15.000001
+    secondaryUVHardAngle: 88
+    secondaryUVPackMargin: 4
+  tangentSpace:
+    normalSmoothAngle: 60
+    splitTangentsAcrossUV: 1
+    normalImportMode: 0
+    tangentImportMode: 1
+  importAnimation: 1
+  copyAvatar: 0
+  humanDescription:
+    human: []
+    skeleton: []
+    armTwist: .5
+    foreArmTwist: .5
+    upperLegTwist: .5
+    legTwist: .5
+    armStretch: .0500000007
+    legStretch: .0500000007
+    feetSpacing: 0
+    rootMotionBoneName: 
+  lastHumanDescriptionAvatarSource: {instanceID: 0}
+  animationType: 1
+  additionalBone: 0
+  userData: 

+ 8 - 0
ActionTowerDefense/Assets/Realtime Planar Reflections/Script.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 196b5718248901f4c96ffaa8e4df8579
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 272 - 0
ActionTowerDefense/Assets/Realtime Planar Reflections/Script/PlanarReflection.cs

@@ -0,0 +1,272 @@
+using UnityEngine;
+using System.Collections;
+
+[ExecuteInEditMode]   // available in editor mode
+public class PlanarReflection : MonoBehaviour
+{
+	[Header("Reflection")]
+	public Camera m_Camera;
+	[Range(1, 1024)] public int m_TextureSize = 512;
+	public float m_ClipPlaneOffset = 0.07f;
+	[Range(0f, 1f)] public float m_ReflectionStrength = 0f;
+	public Color m_ReflectionTint = Color.white;
+	public bool m_UseLightMap = false;
+	public LayerMask m_ReflectLayers = -1;
+	[Header("Blur")]
+	[Range(0, 8)] public int m_Iterations = 1;
+	[Range(0f, 1f)]	public float m_Interpolation = 1f;
+	public Material m_BlurMat;
+	[Header("Bump")]
+	public Texture2D m_BumpTex;
+	[Range(0.1f, 1f)] public float m_BumpStrength = 0.5f;
+	[Range(1f, 16f)] public float m_BumpTexScale = 1f;
+	[Header("Mask")]
+	public Texture2D m_MaskTex;
+	[Header("Height Based Sharp")]
+	public bool m_EnableHeightSharp = false;
+	[Header("Internal")]
+	public RenderTexture m_RTReflectionColor = null;
+	public RenderTexture m_RTOriginalReflectionColor = null;
+	public RenderTexture m_RTHeightAtten = null;
+	public Shader m_SdrHeightAtten = null;
+	private Camera m_ReflectionCamera = null;
+	private int m_OldReflectionTextureSize = 0;
+	private static bool s_InsideRendering = false;
+
+	void Start ()
+	{
+		m_SdrHeightAtten = Shader.Find ("Realtime Planar Reflections/Height Atten");
+	}
+	void OnWillRenderObject ()
+	{
+		Renderer rd = GetComponent<Renderer> ();
+		if (!enabled || !rd || !rd.sharedMaterial || !rd.enabled)
+			return;
+		Camera cam = m_Camera;
+		if (cam == null)
+			return;
+		if (s_InsideRendering)   // safeguard from recursive reflections.
+			return;
+
+		s_InsideRendering = true;
+		CreateMirrorObjects ();
+        UpdateCameraModes (cam, m_ReflectionCamera);
+		
+		// plane reflection render texture building
+		Vector3 pos = transform.position;
+		Vector3 normal = transform.up;
+		float d = -Vector3.Dot (normal, pos) - m_ClipPlaneOffset;
+		Vector4 reflectionPlane = new Vector4 (normal.x, normal.y, normal.z, d);
+
+		Matrix4x4 mr = Matrix4x4.zero;
+		CalculateReflectionMatrix (ref mr, reflectionPlane);
+		Vector3 oldpos = cam.transform.position;
+		Vector3 newpos = mr.MultiplyPoint (oldpos);
+		m_ReflectionCamera.worldToCameraMatrix = cam.worldToCameraMatrix * mr;
+
+		// setup oblique projection matrix to clip everything below/above it for free.
+		Vector4 clipPlane = CameraSpacePlane (m_ReflectionCamera, pos, normal, 1f);
+		Matrix4x4 projection = cam.projectionMatrix;
+		CalculateObliqueMatrix (ref projection, clipPlane);
+		m_ReflectionCamera.projectionMatrix = projection;
+        
+		m_ReflectionCamera.cullingMask = ~(1 << 4) & m_ReflectLayers.value;
+		m_ReflectionCamera.targetTexture = m_RTReflectionColor;
+		GL.invertCulling = true;
+		m_ReflectionCamera.transform.position = newpos;
+		Vector3 euler = cam.transform.eulerAngles;
+		m_ReflectionCamera.transform.eulerAngles = new Vector3 (0, euler.y, euler.z);
+		m_ReflectionCamera.Render ();
+		
+		// render height based attenuation
+		if (m_EnableHeightSharp)
+		{
+			m_ReflectionCamera.clearFlags = CameraClearFlags.SolidColor;
+			m_ReflectionCamera.backgroundColor = Color.black;
+			m_ReflectionCamera.targetTexture = m_RTHeightAtten;
+			m_ReflectionCamera.RenderWithShader (m_SdrHeightAtten, "");
+		}
+		
+		m_ReflectionCamera.transform.position = oldpos;
+		GL.invertCulling = false;
+		
+		// save a copy of original reflection map
+		Graphics.Blit (m_RTReflectionColor, m_RTOriginalReflectionColor);
+		
+		// blur if necessary
+		if (m_Iterations != 0)
+		{
+			RenderTexture rt = RenderTexture.GetTemporary (m_TextureSize, m_TextureSize, 0, m_RTReflectionColor.format);
+			for (int i = 0; i < m_Iterations; i++)
+			{
+				float radius = (float)i * m_Interpolation + m_Interpolation;
+				m_BlurMat.SetFloat ("_Radius", radius);
+				Graphics.Blit (m_RTReflectionColor, rt, m_BlurMat, 0);
+				Graphics.Blit (rt, m_RTReflectionColor, m_BlurMat, 1);
+			}
+			RenderTexture.ReleaseTemporary (rt);
+		}
+		
+		// setup reflection map
+		Material[] materials;
+		if (Application.isEditor)
+			materials = rd.sharedMaterials;
+		else
+			materials = rd.materials;
+		foreach (Material mat in materials)
+		{
+			if (m_BumpTex)   // enable bump if necessary
+			{
+				mat.EnableKeyword ("RPR_BUMP_REFLECTION");
+				mat.SetFloat ("_BumpStrength", m_BumpStrength);
+				mat.SetTexture ("_BumpTex", m_BumpTex);
+				mat.SetTextureScale ("_BumpTex", new Vector2 (m_BumpTexScale, m_BumpTexScale));
+			}
+			else
+			{
+				mat.DisableKeyword ("RPR_BUMP_REFLECTION");
+			}
+			if (m_EnableHeightSharp)
+				mat.EnableKeyword ("RPR_HEIGHT_ATTEN");
+			else
+				mat.DisableKeyword ("RPR_HEIGHT_ATTEN");
+			if (m_UseLightMap)
+				mat.EnableKeyword ("LIGHTMAP_ON");
+			else
+				mat.DisableKeyword ("LIGHTMAP_ON");
+			mat.SetTexture ("_MaskTex", m_MaskTex);
+			mat.SetTexture ("_ReflectionTex", m_RTReflectionColor);
+			mat.SetTexture ("_SharpReflectionTex", m_RTOriginalReflectionColor);
+			mat.SetTexture ("_HeightAttenTex", m_RTHeightAtten);
+			mat.SetFloat ("_ReflectionStrength", 1f - m_ReflectionStrength);
+			mat.SetColor ("_ReflectionTint", m_ReflectionTint);
+		}
+		s_InsideRendering = false;
+	}
+	void OnDisable ()
+	{
+		if (m_RTReflectionColor) 
+		{
+			DestroyImmediate (m_RTReflectionColor);
+			m_RTReflectionColor = null;
+			DestroyImmediate (m_RTHeightAtten);
+			m_RTHeightAtten = null;
+			DestroyImmediate (m_RTOriginalReflectionColor);
+			m_RTOriginalReflectionColor = null;
+			DestroyImmediate (m_ReflectionCamera.gameObject);
+			m_ReflectionCamera = null;
+		}
+	}
+	void UpdateCameraModes (Camera src, Camera dest)
+	{
+		if (dest == null)
+			return;
+
+		dest.clearFlags = src.clearFlags;
+		dest.backgroundColor = src.backgroundColor;        
+		if (src.clearFlags == CameraClearFlags.Skybox)
+		{
+			Skybox sky = src.GetComponent<Skybox> ();
+			Skybox mysky = dest.GetComponent<Skybox> ();
+			if (!sky || !sky.material)
+			{
+				mysky.enabled = false;
+			}
+			else
+			{
+				mysky.enabled = true;
+				mysky.material = sky.material;
+			}
+		}
+		dest.farClipPlane = src.farClipPlane;
+		dest.nearClipPlane = src.nearClipPlane;
+		dest.orthographic = src.orthographic;
+		dest.fieldOfView = src.fieldOfView;
+		dest.aspect = src.aspect;
+		dest.orthographicSize = src.orthographicSize;
+	}
+	void CreateMirrorObjects ()
+	{
+		// camera for reflection
+		if (m_ReflectionCamera == null)
+		{
+			GameObject go = new GameObject ("RPR_Camera_" + GetInstanceID (), typeof (Camera), typeof (Skybox));
+			m_ReflectionCamera = go.GetComponent<Camera> ();
+			m_ReflectionCamera.enabled = false;
+			m_ReflectionCamera.transform.position = transform.position;
+			m_ReflectionCamera.transform.rotation = transform.rotation;
+			go.hideFlags = HideFlags.DontSave;
+		}
+		// reflection render texture
+		if (null == m_RTReflectionColor || m_OldReflectionTextureSize != m_TextureSize)
+		{
+			if (m_RTReflectionColor)
+				DestroyImmediate (m_RTReflectionColor);
+			m_RTReflectionColor = new RenderTexture (m_TextureSize, m_TextureSize, 16);
+			m_RTReflectionColor.name = "RPR_RTColor_" + GetInstanceID();
+			m_RTReflectionColor.isPowerOfTwo = true;
+			m_RTReflectionColor.hideFlags = HideFlags.DontSave;
+			m_OldReflectionTextureSize = m_TextureSize;
+			
+			if (m_RTHeightAtten)
+				DestroyImmediate (m_RTHeightAtten);
+			m_RTHeightAtten = new RenderTexture (m_TextureSize, m_TextureSize, 16);
+			m_RTHeightAtten.name = "RPR_RTAtten_" + GetInstanceID();
+			m_RTHeightAtten.isPowerOfTwo = true;
+			m_RTHeightAtten.hideFlags = HideFlags.DontSave;
+			
+			if (m_RTOriginalReflectionColor)
+				DestroyImmediate (m_RTOriginalReflectionColor);
+			m_RTOriginalReflectionColor = new RenderTexture (m_TextureSize, m_TextureSize, 16);
+			m_RTOriginalReflectionColor.name = "RPR_RTOrigColor_" + GetInstanceID();
+			m_RTOriginalReflectionColor.isPowerOfTwo = true;
+			m_RTOriginalReflectionColor.hideFlags = HideFlags.DontSave;
+		}
+	}    
+	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	Vector4 CameraSpacePlane (Camera cam, Vector3 pos, Vector3 normal, float sideSign)
+	{
+		Vector3 offsetPos = pos + normal * m_ClipPlaneOffset;
+		Matrix4x4 m = cam.worldToCameraMatrix;
+		Vector3 cpos = m.MultiplyPoint (offsetPos);
+		Vector3 cnormal = m.MultiplyVector (normal).normalized * sideSign;
+		return new Vector4 (cnormal.x, cnormal.y, cnormal.z, -Vector3.Dot (cpos,cnormal));
+	}
+	static float sgn (float a)
+	{
+		if (a > 0f) return 1f;
+		if (a < 0f) return -1f;
+		return 0f;
+	}
+	static void CalculateObliqueMatrix (ref Matrix4x4 projection, Vector4 clipPlane)
+	{
+		Vector4 q = projection.inverse * new Vector4 (sgn (clipPlane.x), sgn (clipPlane.y), 1f, 1f);
+		Vector4 c = clipPlane * (2f / (Vector4.Dot (clipPlane, q)));
+		projection[2] = c.x - projection[3];
+		projection[6] = c.y - projection[7];
+		projection[10] = c.z - projection[11];
+		projection[14] = c.w - projection[15];
+	}
+	static void CalculateReflectionMatrix (ref Matrix4x4 reflectionMat, Vector4 plane)
+	{
+		reflectionMat.m00 = (1f - 2f * plane[0] * plane[0]);
+		reflectionMat.m01 = (   - 2f * plane[0] * plane[1]);
+		reflectionMat.m02 = (   - 2f * plane[0] * plane[2]);
+		reflectionMat.m03 = (   - 2f * plane[3] * plane[0]);
+
+		reflectionMat.m10 = (   - 2f * plane[1] * plane[0]);
+		reflectionMat.m11 = (1f - 2f * plane[1] * plane[1]);
+		reflectionMat.m12 = (   - 2f * plane[1] * plane[2]);
+		reflectionMat.m13 = (   - 2f * plane[3] * plane[1]);
+
+		reflectionMat.m20 = (   - 2f * plane[2] * plane[0]);
+		reflectionMat.m21 = (   - 2f * plane[2] * plane[1]);
+		reflectionMat.m22 = (1f - 2f * plane[2] * plane[2]);
+		reflectionMat.m23 = (   - 2f * plane[3] * plane[2]);
+
+		reflectionMat.m30 = 0f;
+		reflectionMat.m31 = 0f;
+		reflectionMat.m32 = 0f;
+		reflectionMat.m33 = 1f;
+	}
+}

+ 8 - 0
ActionTowerDefense/Assets/Realtime Planar Reflections/Script/PlanarReflection.cs.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 2ba913026a462b24f8ee61d406c04e62
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 

+ 8 - 0
ActionTowerDefense/Assets/Realtime Planar Reflections/Shader.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: fa050a61b31343f40bc32c4f1e6724b7
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 94 - 0
ActionTowerDefense/Assets/Realtime Planar Reflections/Shader/Blur.shader

@@ -0,0 +1,94 @@
+// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
+
+Shader "Realtime Planar Reflections/Blur" {
+	Properties {
+		_MainTex ("", 2D) = "white" {}
+	}
+	CGINCLUDE
+	#include "UnityCG.cginc"
+	
+	sampler2D _MainTex;
+	float4 _MainTex_ST;
+	float2 _MainTex_TexelSize;    
+	float _Radius;
+	struct v2f
+	{
+		float4 vertex : SV_POSITION;
+		float2 uv : TEXCOORD0;
+		float4 bluruv[3] : TEXCOORD1;
+	};
+	v2f vertHorizontal (appdata_base v)
+	{
+		v2f o;
+		o.vertex = UnityObjectToClipPos(v.vertex);
+
+		float2 offset1 = float2(_MainTex_TexelSize.x * _Radius * 1.41176470, 0.0); 
+		float2 offset2 = float2(_MainTex_TexelSize.x * _Radius * 3.29411764, 0.0);
+		float2 offset3 = float2(_MainTex_TexelSize.x * _Radius * 5.17647058, 0.0);
+
+#if UNITY_VERSION >= 540
+		float2 uv = UnityStereoScreenSpaceUVAdjust(v.texcoord, _MainTex_ST);
+#else
+		float2 uv = v.texcoord;
+#endif
+		o.uv = uv;
+		o.bluruv[0].xy = uv + offset1;
+		o.bluruv[0].zw = uv - offset1;
+		o.bluruv[1].xy = uv + offset2;
+		o.bluruv[1].zw = uv - offset2;
+		o.bluruv[2].xy = uv + offset3;
+		o.bluruv[2].zw = uv - offset3;
+		return o;
+	}
+	v2f vertVertical (appdata_base v)
+	{
+		v2f o;
+		o.vertex = UnityObjectToClipPos(v.vertex);
+
+		float2 offset1 = float2(0.0, _MainTex_TexelSize.y * _Radius * 1.41176470); 
+		float2 offset2 = float2(0.0, _MainTex_TexelSize.y * _Radius * 3.29411764);
+		float2 offset3 = float2(0.0, _MainTex_TexelSize.y * _Radius * 5.17647058);
+
+#if UNITY_VERSION >= 540
+		float2 uv = UnityStereoScreenSpaceUVAdjust(v.texcoord, _MainTex_ST);
+#else
+		float2 uv = v.texcoord;
+#endif
+		o.uv = uv;
+		o.bluruv[0].xy = uv + offset1;
+		o.bluruv[0].zw = uv - offset1;
+		o.bluruv[1].xy = uv + offset2;
+		o.bluruv[1].zw = uv - offset2;
+		o.bluruv[2].xy = uv + offset3;
+		o.bluruv[2].zw = uv - offset3;
+		return o;
+	}
+	fixed4 frag13Blur (v2f i) : SV_Target
+	{
+		fixed3 sum = tex2D(_MainTex, i.uv).xyz * 0.19648255;
+		sum += tex2D(_MainTex, i.bluruv[0].xy).xyz * 0.29690696;
+		sum += tex2D(_MainTex, i.bluruv[0].zw).xyz * 0.29690696;
+		sum += tex2D(_MainTex, i.bluruv[1].xy).xyz * 0.09447039;
+		sum += tex2D(_MainTex, i.bluruv[1].zw).xyz * 0.09447039;
+		sum += tex2D(_MainTex, i.bluruv[2].xy).xyz * 0.01038136;
+		sum += tex2D(_MainTex, i.bluruv[2].zw).xyz * 0.01038136;
+		return fixed4(sum, 1.0);
+	}
+	ENDCG
+	SubShader {
+		ZTest Always Cull Off ZWrite Off
+		Pass {
+			CGPROGRAM
+			#pragma vertex vertHorizontal
+			#pragma fragment frag13Blur
+			ENDCG
+		}
+		Pass {
+			CGPROGRAM
+			#pragma vertex vertVertical
+			#pragma fragment frag13Blur
+			ENDCG
+		}
+	}
+	FallBack "Diffuse"
+}

+ 5 - 0
ActionTowerDefense/Assets/Realtime Planar Reflections/Shader/Blur.shader.meta

@@ -0,0 +1,5 @@
+fileFormatVersion: 2
+guid: fe5a36b059df2574ba867fba17c2aa28
+ShaderImporter:
+  defaultTextures: []
+  userData: 

+ 32 - 0
ActionTowerDefense/Assets/Realtime Planar Reflections/Shader/Height Atten.shader

@@ -0,0 +1,32 @@
+Shader "Realtime Planar Reflections/Height Atten" {
+	Properties {
+//		_HaStart ("Height Atten Start", Float) = 0
+//		_HaLen  ("Height Atten Length", Float) = 5
+	}
+	SubShader {
+		Tags { "RenderType" = "Opaque" }
+		Cull Off
+
+		CGPROGRAM
+		#pragma surface surf Unlit
+//		half _HaStart, _HaLen;
+		struct Input
+		{
+			float3 worldPos;
+		};
+		void surf (Input IN, inout SurfaceOutput o)
+		{
+			float h = IN.worldPos.y;
+//			float r = abs(h - _HaStart) / _HaLen;
+			float r = 1 - (abs(h - 0) / 0.7);   // bad, I can't pass parameters if I use "RenderWithShader"...
+			o.Albedo = fixed3(r, r, r);
+			o.Alpha = 1;
+		}
+		fixed4 LightingUnlit (SurfaceOutput s, half3 lightDir, half atten)
+		{
+			return fixed4(s.Albedo, s.Alpha);
+		}
+		ENDCG
+	}
+	FallBack "Diffuse"
+}

+ 9 - 0
ActionTowerDefense/Assets/Realtime Planar Reflections/Shader/Height Atten.shader.meta

@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 4068497e26fe40b498b5f21fc6fba60a
+timeCreated: 1507347064
+licenseType: Store
+ShaderImporter:
+  defaultTextures: []
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 103 - 0
ActionTowerDefense/Assets/Realtime Planar Reflections/Shader/Reflection.shader

@@ -0,0 +1,103 @@
+// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
+
+Shader "Realtime Planar Reflections/Reflection" {
+	Properties {
+		_MainTex            ("Albedo", 2D) = "white" {}
+		_ReflectionTex      ("Reflection", 2D) = "black" {}
+		_ReflectionTint     ("Reflection Tint", Color) = (1, 1, 1, 1)
+		_ReflectionStrength ("Reflection Strength", Range(0,1)) = 1
+		_BumpTex            ("Bump", 2D) = "bump" {}
+		_BumpStrength       ("Bump Strength", Float) = 0.5
+		_MaskTex            ("Mask", 2D) = "black" {}
+		_HeightAttenTex     ("Height Atten", 2D) = "black" {}
+		_SharpReflectionTex ("Sharp Reflection", 2D) = "black" {}
+	}
+	SubShader {
+		Tags { "RenderType" = "Opaque" "LightMode" = "ForwardBase" }
+		Pass {
+			CGPROGRAM
+			#pragma vertex vert
+			#pragma fragment frag
+			#pragma multi_compile _ RPR_BUMP_REFLECTION
+			#pragma multi_compile _ RPR_HEIGHT_ATTEN
+			#pragma multi_compile _ LIGHTMAP_ON
+			#pragma multi_compile_fwdbase
+			#include "UnityCG.cginc"
+			#include "Lighting.cginc"
+			#include "AutoLight.cginc"
+			struct v2f
+			{
+				float4 pos : POSITION;
+				float4 posscr : TEXCOORD0;
+				float2 uvMain : TEXCOORD1;
+				float4 uvMaskBump : TEXCOORD2;
+				float3 nor : TEXCOORD3;
+				float3 lit : TEXCOORD4;
+#ifdef LIGHTMAP_ON
+				half2 uvlm : TEXCOORD5;
+#endif
+				LIGHTING_COORDS(6, 7)
+			};
+			sampler2D _MainTex, _ReflectionTex, _MaskTex, _BumpTex, _HeightAttenTex, _SharpReflectionTex;
+			float4 _MainTex_ST, _MaskTex_ST, _BumpTex_ST;
+			fixed4 _ReflectionTint;
+			fixed _BumpStrength, _ReflectionStrength;
+			v2f vert (appdata_full v)
+			{
+				TANGENT_SPACE_ROTATION;
+				v2f o;
+				o.pos = UnityObjectToClipPos(v.vertex);
+				o.posscr = ComputeScreenPos(o.pos);
+				o.uvMain = TRANSFORM_TEX(v.texcoord, _MainTex);
+				o.uvMaskBump.xy = TRANSFORM_TEX(v.texcoord, _MaskTex);
+				o.uvMaskBump.zw = TRANSFORM_TEX(v.texcoord, _BumpTex);
+				o.nor = mul(rotation, SCALED_NORMAL);
+				o.lit = mul(rotation, ObjSpaceLightDir(v.vertex));
+#ifdef LIGHTMAP_ON
+				o.uvlm = v.texcoord1.xy * unity_LightmapST.xy + unity_LightmapST.zw;
+#endif
+				TRANSFER_VERTEX_TO_FRAGMENT(o);
+				return o;
+			}
+			fixed4 frag (v2f i) : COLOR
+			{
+				// lighting
+				fixed4 albedo = tex2D(_MainTex, i.uvMain);
+				float3 N = normalize(i.nor);
+				float3 L = normalize(i.lit);
+				albedo.rgb *= (0.5 * dot(N, L) + 0.5);
+				
+				// mask out which part of surface has reflection
+				fixed4 mask = tex2D(_MaskTex, i.uvMaskBump.xy);
+				float4 scrpos = i.posscr;
+				
+				// bumped
+#ifdef RPR_BUMP_REFLECTION
+				float3 bump = UnpackNormal(tex2D(_BumpTex, i.uvMaskBump.zw)).xyz * _BumpStrength;
+				scrpos.xyz += bump.xyz;
+#endif
+
+				// the reflection color from reflection map
+				half4 refl = tex2Dproj(_ReflectionTex, UNITY_PROJ_COORD(scrpos)) * _ReflectionTint;
+				
+				// height based atten, need bilateral blur filter I guess. Now it suffers halo problem
+#ifdef RPR_HEIGHT_ATTEN
+				half maskHeightAtten = tex2Dproj(_HeightAttenTex, UNITY_PROJ_COORD(scrpos)).r;
+				half4 sharpRefl = tex2Dproj(_SharpReflectionTex, UNITY_PROJ_COORD(scrpos)) * _ReflectionTint;
+				refl.rgb = lerp(refl.rgb, sharpRefl.rgb, maskHeightAtten);
+#endif
+				
+				// compose reflection color and original surface color
+				albedo.rgb = lerp(refl.rgb, albedo.rgb, _ReflectionStrength);
+				fixed3 c = lerp(albedo.rgb, refl.rgb, mask.r) * _LightColor0 * LIGHT_ATTENUATION(i);
+#ifdef LIGHTMAP_ON
+				fixed3 lm = DecodeLightmap (UNITY_SAMPLE_TEX2D(unity_Lightmap, i.uvlm));
+				c *= lm;
+#endif
+				return fixed4(c, 1);
+			}
+			ENDCG
+		}
+	}
+	FallBack "Diffuse"
+}

+ 9 - 0
ActionTowerDefense/Assets/Realtime Planar Reflections/Shader/Reflection.shader.meta

@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 40d463ea0857bae45a8c74d9333d45a9
+timeCreated: 1507304798
+licenseType: Store
+ShaderImporter:
+  defaultTextures: []
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
ActionTowerDefense/Assets/Realtime Planar Reflections/Texture.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: c974a81cb34e84e42b6ef0a0d299965c
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

BIN
ActionTowerDefense/Assets/Realtime Planar Reflections/Texture/Bump.png


+ 47 - 0
ActionTowerDefense/Assets/Realtime Planar Reflections/Texture/Bump.png.meta

@@ -0,0 +1,47 @@
+fileFormatVersion: 2
+guid: c69013a659832c649b56a9b1fb39911a
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 1
+    linearTexture: 1
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 1
+    heightScale: .25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  seamlessCubemap: 0
+  textureFormat: -1
+  maxTextureSize: 1024
+  textureSettings:
+    filterMode: -1
+    aniso: 6
+    mipBias: -1
+    wrapMode: -1
+  nPOTScale: 1
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: .5, y: .5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 0
+  textureType: 1
+  buildTargetSettings: []
+  spriteSheet:
+    sprites: []
+  spritePackingTag: 
+  userData: 

BIN
ActionTowerDefense/Assets/Realtime Planar Reflections/Texture/Ground.jpg


+ 47 - 0
ActionTowerDefense/Assets/Realtime Planar Reflections/Texture/Ground.jpg.meta

@@ -0,0 +1,47 @@
+fileFormatVersion: 2
+guid: d8415a46bfbd3334fb1a5d6a2f28116e
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 1
+    linearTexture: 0
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: .25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  seamlessCubemap: 0
+  textureFormat: -1
+  maxTextureSize: 1024
+  textureSettings:
+    filterMode: -1
+    aniso: -1
+    mipBias: -1
+    wrapMode: -1
+  nPOTScale: 1
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: .5, y: .5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 0
+  textureType: -1
+  buildTargetSettings: []
+  spriteSheet:
+    sprites: []
+  spritePackingTag: 
+  userData: 

BIN
ActionTowerDefense/Assets/Realtime Planar Reflections/Texture/Mask.png


+ 47 - 0
ActionTowerDefense/Assets/Realtime Planar Reflections/Texture/Mask.png.meta

@@ -0,0 +1,47 @@
+fileFormatVersion: 2
+guid: ef1dcffc7ec50cf4b87ffee59961fc9e
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 1
+    linearTexture: 0
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: .25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  seamlessCubemap: 0
+  textureFormat: -1
+  maxTextureSize: 1024
+  textureSettings:
+    filterMode: -1
+    aniso: -1
+    mipBias: -1
+    wrapMode: -1
+  nPOTScale: 1
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: .5, y: .5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 0
+  textureType: -1
+  buildTargetSettings: []
+  spriteSheet:
+    sprites: []
+  spritePackingTag: 
+  userData: 

BIN
ActionTowerDefense/Assets/Realtime Planar Reflections/Texture/Player.png


+ 47 - 0
ActionTowerDefense/Assets/Realtime Planar Reflections/Texture/Player.png.meta

@@ -0,0 +1,47 @@
+fileFormatVersion: 2
+guid: dc1e87e09a32b194eb08420abdfb7f93
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 1
+    linearTexture: 0
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: .25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  seamlessCubemap: 0
+  textureFormat: -1
+  maxTextureSize: 1024
+  textureSettings:
+    filterMode: -1
+    aniso: -1
+    mipBias: -1
+    wrapMode: -1
+  nPOTScale: 1
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: .5, y: .5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 0
+  textureType: -1
+  buildTargetSettings: []
+  spriteSheet:
+    sprites: []
+  spritePackingTag: 
+  userData: 

BIN
ActionTowerDefense/Assets/Realtime Planar Reflections/Texture/PlayerGun.png


+ 55 - 0
ActionTowerDefense/Assets/Realtime Planar Reflections/Texture/PlayerGun.png.meta

@@ -0,0 +1,55 @@
+fileFormatVersion: 2
+guid: 6fef107f23622bb4a929fc0cc0b23bc2
+timeCreated: 1507304107
+licenseType: Store
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 1
+    linearTexture: 0
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: .25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 8
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -1
+  maxTextureSize: 2048
+  textureSettings:
+    filterMode: -1
+    aniso: -1
+    mipBias: -1
+    wrapMode: -1
+  nPOTScale: 1
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: .5, y: .5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 0
+  textureType: -1
+  buildTargetSettings: []
+  spriteSheet:
+    sprites: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 427 - 0
ActionTowerDefense/Assets/Resources/Prefab/ScenceInteraction/Ripples.prefab

@@ -0,0 +1,427 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &2357445618346152450
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 8601748613137185865}
+  m_Layer: 0
+  m_Name: Ripples
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &8601748613137185865
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2357445618346152450}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: -0.64047277, y: 0.29, z: -0.49526358}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 2914313074865240834}
+  - {fileID: 2914313075566831113}
+  - {fileID: 2914313076799717884}
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &2914313074865240861
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 2914313074865240834}
+  - component: {fileID: 2914313074865240833}
+  - component: {fileID: 2914313074865240832}
+  - component: {fileID: 2914313074865240863}
+  - component: {fileID: 2914313074865240862}
+  m_Layer: 0
+  m_Name: Plane
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &2914313074865240834
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2914313074865240861}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0.64047277, y: -0.29, z: 0.49526358}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 8601748613137185865}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!33 &2914313074865240833
+MeshFilter:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2914313074865240861}
+  m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!23 &2914313074865240832
+MeshRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2914313074865240861}
+  m_Enabled: 1
+  m_CastShadows: 1
+  m_ReceiveShadows: 1
+  m_DynamicOccludee: 1
+  m_StaticShadowCaster: 0
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RayTracingMode: 2
+  m_RayTraceProcedural: 0
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 2100000, guid: b06fc2f6bf30647428abcb7b86c745e7, type: 2}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_ReceiveGI: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 1
+  m_SelectedEditorRenderState: 3
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: 0
+  m_SortingLayer: 0
+  m_SortingOrder: 0
+  m_AdditionalVertexStreams: {fileID: 0}
+--- !u!64 &2914313074865240863
+MeshCollider:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2914313074865240861}
+  m_Material: {fileID: 0}
+  m_IsTrigger: 0
+  m_Enabled: 1
+  serializedVersion: 4
+  m_Convex: 0
+  m_CookingOptions: 30
+  m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!114 &2914313074865240862
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2914313074865240861}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 33fde0d4c55944a4c98346f2c7a1969d, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  mainCamera: {fileID: 0}
+  InteractiveRT: {fileID: 8400000, guid: ce2b9740fa507bc4cb580bb478ca7a05, type: 2}
+  PrevRT: {fileID: 0}
+  CurrentRT: {fileID: 0}
+  TempRT: {fileID: 0}
+  DrawShader: {fileID: 4800000, guid: fdd54acc182a5fc49a4b8682f8054d80, type: 3}
+  RippleShader: {fileID: 4800000, guid: 73f654a849bf69143a9aee4ec9d82ed2, type: 3}
+  AddShader: {fileID: 4800000, guid: 86b2a6bf564f51146a1bcc3ab06df515, type: 3}
+  DrawRadius: 0.2
+  TextureSize: 512
+--- !u!1 &2914313074972610580
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 2914313074972610581}
+  - component: {fileID: 2914313074972610585}
+  - component: {fileID: 2914313074972610584}
+  - component: {fileID: 2914313074972610583}
+  - component: {fileID: 2914313074972610582}
+  m_Layer: 8
+  m_Name: Cube (2)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &2914313074972610581
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2914313074972610580}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 2914313076799717884}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!33 &2914313074972610585
+MeshFilter:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2914313074972610580}
+  m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!23 &2914313074972610584
+MeshRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2914313074972610580}
+  m_Enabled: 1
+  m_CastShadows: 1
+  m_ReceiveShadows: 1
+  m_DynamicOccludee: 1
+  m_StaticShadowCaster: 0
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RayTracingMode: 2
+  m_RayTraceProcedural: 0
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 2100000, guid: d50a0765bd41c544785e9d4048947812, type: 2}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_ReceiveGI: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 1
+  m_SelectedEditorRenderState: 3
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: 0
+  m_SortingLayer: 0
+  m_SortingOrder: 0
+  m_AdditionalVertexStreams: {fileID: 0}
+--- !u!65 &2914313074972610583
+BoxCollider:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2914313074972610580}
+  m_Material: {fileID: 0}
+  m_IsTrigger: 0
+  m_Enabled: 1
+  serializedVersion: 2
+  m_Size: {x: 1, y: 1, z: 1}
+  m_Center: {x: 0, y: 0, z: 0}
+--- !u!114 &2914313074972610582
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2914313074972610580}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 6b3ab4ea9aafaf246bae0e1ade7c3b69, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  lastPos: {x: 0, y: 0, z: 0}
+--- !u!1 &2914313075566831110
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 2914313075566831113}
+  - component: {fileID: 2914313075566831112}
+  m_Layer: 0
+  m_Name: Camera
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &2914313075566831113
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2914313075566831110}
+  m_LocalRotation: {x: -0, y: 0.7071068, z: -0.7071068, w: 0}
+  m_LocalPosition: {x: 0.64047277, y: 2.74, z: 0.49526358}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 8601748613137185865}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 90, y: 180, z: 0}
+--- !u!20 &2914313075566831112
+Camera:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2914313075566831110}
+  m_Enabled: 1
+  serializedVersion: 2
+  m_ClearFlags: 2
+  m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0}
+  m_projectionMatrixMode: 1
+  m_GateFitMode: 2
+  m_FOVAxisMode: 0
+  m_SensorSize: {x: 36, y: 24}
+  m_LensShift: {x: 0, y: 0}
+  m_FocalLength: 50
+  m_NormalizedViewPortRect:
+    serializedVersion: 2
+    x: 0
+    y: 0
+    width: 1
+    height: 1
+  near clip plane: 0.3
+  far clip plane: 1000
+  field of view: 60
+  orthographic: 1
+  orthographic size: 5
+  m_Depth: 0
+  m_CullingMask:
+    serializedVersion: 2
+    m_Bits: 256
+  m_RenderingPath: -1
+  m_TargetTexture: {fileID: 8400000, guid: ce2b9740fa507bc4cb580bb478ca7a05, type: 2}
+  m_TargetDisplay: 0
+  m_TargetEye: 3
+  m_HDR: 1
+  m_AllowMSAA: 1
+  m_AllowDynamicResolution: 0
+  m_ForceIntoRT: 0
+  m_OcclusionCulling: 1
+  m_StereoConvergence: 10
+  m_StereoSeparation: 0.022
+--- !u!1 &2914313076799717881
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 2914313076799717884}
+  - component: {fileID: 2914313076799717883}
+  - component: {fileID: 2914313076799717882}
+  m_Layer: 0
+  m_Name: Cube (1)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &2914313076799717884
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2914313076799717881}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 2914313074972610581}
+  m_Father: {fileID: 8601748613137185865}
+  m_RootOrder: 2
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!33 &2914313076799717883
+MeshFilter:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2914313076799717881}
+  m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!23 &2914313076799717882
+MeshRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2914313076799717881}
+  m_Enabled: 1
+  m_CastShadows: 1
+  m_ReceiveShadows: 1
+  m_DynamicOccludee: 1
+  m_StaticShadowCaster: 0
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RayTracingMode: 2
+  m_RayTraceProcedural: 0
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_ReceiveGI: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 1
+  m_SelectedEditorRenderState: 3
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: 0
+  m_SortingLayer: 0
+  m_SortingOrder: 0
+  m_AdditionalVertexStreams: {fileID: 0}

+ 7 - 0
ActionTowerDefense/Assets/Resources/Prefab/ScenceInteraction/Ripples.prefab.meta

@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 3c912480ea53d5e4d933a1649d3f65d2
+PrefabImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
ActionTowerDefense/Assets/Ripple.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 4993788b276b4ca43af0c752e606ef03
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 137 - 0
ActionTowerDefense/Assets/Ripple/AddShader.shader

@@ -0,0 +1,137 @@
+// Made with Amplify Shader Editor
+// Available at the Unity Asset Store - http://u3d.as/y3X 
+Shader "AddShader"
+{
+	Properties
+	{
+		_Tex1("_Tex1", 2D) = "white" {}
+		_Tex2("_Tex2", 2D) = "white" {}
+		[HideInInspector] _texcoord( "", 2D ) = "white" {}
+
+	}
+	
+	SubShader
+	{
+		
+		
+		Tags { "RenderType"="Opaque" }
+	LOD 100
+
+		CGINCLUDE
+		#pragma target 3.0
+		ENDCG
+		Blend Off
+		Cull Back
+		ColorMask RGBA
+		ZWrite On
+		ZTest LEqual
+		Offset 0 , 0
+		
+		
+		
+		Pass
+		{
+			Name "Unlit"
+			Tags { "LightMode"="ForwardBase" }
+			CGPROGRAM
+
+			
+
+			#ifndef UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX
+			//only defining to not throw compilation error over Unity 5.5
+			#define UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input)
+			#endif
+			#pragma vertex vert
+			#pragma fragment frag
+			#pragma multi_compile_instancing
+			#include "UnityCG.cginc"
+			
+
+			struct appdata
+			{
+				float4 vertex : POSITION;
+				float4 color : COLOR;
+				UNITY_VERTEX_INPUT_INSTANCE_ID
+				float4 ase_texcoord : TEXCOORD0;
+			};
+			
+			struct v2f
+			{
+				float4 vertex : SV_POSITION;
+#ifdef ASE_NEEDS_FRAG_WORLD_POSITION
+				float3 worldPos : TEXCOORD0;
+#endif
+				UNITY_VERTEX_INPUT_INSTANCE_ID
+				UNITY_VERTEX_OUTPUT_STEREO
+				float4 ase_texcoord1 : TEXCOORD1;
+			};
+
+			uniform sampler2D _Tex1;
+			uniform float4 _Tex1_ST;
+			uniform sampler2D _Tex2;
+			uniform float4 _Tex2_ST;
+
+			
+			v2f vert ( appdata v )
+			{
+				v2f o;
+				UNITY_SETUP_INSTANCE_ID(v);
+				UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
+				UNITY_TRANSFER_INSTANCE_ID(v, o);
+
+				o.ase_texcoord1.xy = v.ase_texcoord.xy;
+				
+				//setting value to unused interpolator channels and avoid initialization warnings
+				o.ase_texcoord1.zw = 0;
+				float3 vertexValue = float3(0, 0, 0);
+				#if ASE_ABSOLUTE_VERTEX_POS
+				vertexValue = v.vertex.xyz;
+				#endif
+				vertexValue = vertexValue;
+				#if ASE_ABSOLUTE_VERTEX_POS
+				v.vertex.xyz = vertexValue;
+				#else
+				v.vertex.xyz += vertexValue;
+				#endif
+				o.vertex = UnityObjectToClipPos(v.vertex);
+
+#ifdef ASE_NEEDS_FRAG_WORLD_POSITION
+				o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;
+#endif
+				return o;
+			}
+			
+			fixed4 frag (v2f i ) : SV_Target
+			{
+				UNITY_SETUP_INSTANCE_ID(i);
+				UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);
+				fixed4 finalColor;
+#ifdef ASE_NEEDS_FRAG_WORLD_POSITION
+				float3 WorldPosition = i.worldPos;
+#endif
+				float2 uv_Tex1 = i.ase_texcoord1.xy * _Tex1_ST.xy + _Tex1_ST.zw;
+				float2 uv_Tex2 = i.ase_texcoord1.xy * _Tex2_ST.xy + _Tex2_ST.zw;
+				
+				
+				finalColor = ( tex2D( _Tex1, uv_Tex1 ) + tex2D( _Tex2, uv_Tex2 ) );
+				return finalColor;
+			}
+			ENDCG
+		}
+	}
+	CustomEditor "ASEMaterialInspector"
+	
+	
+}
+/*ASEBEGIN
+Version=18100
+12.8;21.6;1523;780;863.5;277;1;True;True
+Node;AmplifyShaderEditor.SamplerNode;1;-518.5,-64;Inherit;True;Property;_Tex1;_Tex1;0;0;Create;True;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;6;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.SamplerNode;2;-490.5,174;Inherit;True;Property;_Tex2;_Tex2;1;0;Create;True;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;6;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.SimpleAddOpNode;3;-105.5,51;Inherit;False;2;2;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;1;COLOR;0
+Node;AmplifyShaderEditor.TemplateMultiPassMasterNode;0;71,50;Float;False;True;-1;2;ASEMaterialInspector;100;1;AddShader;0770190933193b94aaa3065e307002fa;True;Unlit;0;0;Unlit;2;True;0;1;False;-1;0;False;-1;0;1;False;-1;0;False;-1;True;0;False;-1;0;False;-1;True;False;True;0;False;-1;True;True;True;True;True;0;False;-1;True;False;255;False;-1;255;False;-1;255;False;-1;7;False;-1;1;False;-1;1;False;-1;1;False;-1;7;False;-1;1;False;-1;1;False;-1;1;False;-1;True;1;False;-1;True;3;False;-1;True;True;0;False;-1;0;False;-1;True;1;RenderType=Opaque=RenderType;True;2;0;False;False;False;False;False;False;False;False;False;True;1;LightMode=ForwardBase;False;0;;0;0;Standard;1;Vertex Position,InvertActionOnDeselection;1;0;1;True;False;;0
+WireConnection;3;0;1;0
+WireConnection;3;1;2;0
+WireConnection;0;0;3;0
+ASEEND*/
+//CHKSM=074BAE6240145E0F98D1AE8DB8DE1428737C647F

+ 9 - 0
ActionTowerDefense/Assets/Ripple/AddShader.shader.meta

@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 86b2a6bf564f51146a1bcc3ab06df515
+ShaderImporter:
+  externalObjects: {}
+  defaultTextures: []
+  nonModifiableTextures: []
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 49 - 0
ActionTowerDefense/Assets/Ripple/DrawShader.shader

@@ -0,0 +1,49 @@
+Shader "Unlit/DrawShader"
+{
+    Properties
+    {
+    }
+    SubShader
+    {
+        Tags { "RenderType"="Opaque" }
+        LOD 100
+
+        Pass
+        {
+            CGPROGRAM
+            #pragma vertex vert
+            #pragma fragment frag
+            #include "UnityCG.cginc"
+
+            struct appdata
+            {
+                float4 vertex : POSITION;
+                float2 uv : TEXCOORD0;
+            };
+
+            sampler2D _SourceTex;
+            float4 _Pos;
+
+            struct v2f
+            {
+                float2 uv : TEXCOORD0;
+                float4 vertex : SV_POSITION;
+            };
+            v2f vert (appdata v)
+            {
+                v2f o;
+                o.vertex = UnityObjectToClipPos(v.vertex);
+                o.uv = v.uv;
+                return o;
+            }
+
+            fixed4 frag(v2f i) : SV_Target
+            {
+                float2 uv = i.uv;
+
+                return max(_Pos.z - length(uv-_Pos.xy)/_Pos.z,0) + tex2D(_SourceTex,uv);
+            }
+            ENDCG
+        }
+    }
+}

+ 9 - 0
ActionTowerDefense/Assets/Ripple/DrawShader.shader.meta

@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: fdd54acc182a5fc49a4b8682f8054d80
+ShaderImporter:
+  externalObjects: {}
+  defaultTextures: []
+  nonModifiableTextures: []
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 48 - 0
ActionTowerDefense/Assets/Ripple/HeightToNormal.asset

@@ -0,0 +1,48 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 78b2425a2284af743826c689403a4924, type: 3}
+  m_Name: HeightToNormal
+  m_EditorClassIdentifier: 
+  m_functionInfo: "// Made with Amplify Shader Editor\n// Available at the Unity Asset
+    Store - http://u3d.as/y3X \n/*ASEBEGIN\nVersion=18100\n6.4;5.6;1524;798;-221.7177;-1072.8;1;True;False\nNode;AmplifyShaderEditor.FunctionInput;28;969.7405,210.838;Inherit;False;HeightTex;9;1;False;1;0;SAMPLER2D;0;False;1;SAMPLER2D;0\nNode;AmplifyShaderEditor.FunctionInput;51;1848.327,892.0568;Inherit;False;Depth;1;0;False;1;0;FLOAT;0.1;False;1;FLOAT;0\nNode;AmplifyShaderEditor.SimpleMultiplyOpNode;52;2194.055,1039.727;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0\nNode;AmplifyShaderEditor.Vector2Node;32;924.9241,729.0902;Inherit;False;Constant;_Vector0;Vector
+    0;0;0;Create;True;0;0;False;0;False;0.001,0;0,0;0;3;FLOAT2;0;FLOAT;1;FLOAT;2\nNode;AmplifyShaderEditor.FunctionInput;29;962.6248,559.5063;Inherit;False;UV;2;2;False;1;0;FLOAT2;0,0;False;1;FLOAT2;0\nNode;AmplifyShaderEditor.SamplerNode;30;1564.612,357.421;Inherit;True;Property;_TextureSample0;Texture
+    Sample 0;0;0;Create;True;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;6;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4\nNode;AmplifyShaderEditor.SimpleAddOpNode;31;1255.791,562.3529;Inherit;False;2;2;0;FLOAT2;0,0;False;1;FLOAT2;0,0;False;1;FLOAT2;0\nNode;AmplifyShaderEditor.SamplerNode;33;1589.279,642.0482;Inherit;True;Property;_TextureSample1;Texture
+    Sample 0;0;0;Create;True;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;6;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4\nNode;AmplifyShaderEditor.SimpleAddOpNode;34;1280.458,846.9803;Inherit;False;2;2;0;FLOAT2;0,0;False;1;FLOAT2;0,0;False;1;FLOAT2;0\nNode;AmplifyShaderEditor.SimpleSubtractOpNode;36;2025.708,583.6998;Inherit;False;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0\nNode;AmplifyShaderEditor.SamplerNode;37;1585.349,994.986;Inherit;True;Property;_TextureSample2;Texture
+    Sample 0;0;0;Create;True;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;6;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4\nNode;AmplifyShaderEditor.SimpleAddOpNode;38;1276.528,1199.918;Inherit;False;2;2;0;FLOAT2;0,0;False;1;FLOAT2;0,0;False;1;FLOAT2;0\nNode;AmplifyShaderEditor.SimpleAddOpNode;41;1301.195,1484.546;Inherit;False;2;2;0;FLOAT2;0,0;False;1;FLOAT2;0,0;False;1;FLOAT2;0\nNode;AmplifyShaderEditor.Vector2Node;42;984.1127,1608.204;Inherit;False;Constant;_Vector3;Vector
+    0;0;0;Create;True;0;0;False;0;False;0,-0.001;0,0;0;3;FLOAT2;0;FLOAT;1;FLOAT;2\nNode;AmplifyShaderEditor.DynamicAppendNode;44;2383.161,761.5687;Inherit;False;FLOAT3;4;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;1;FLOAT3;0\nNode;AmplifyShaderEditor.DynamicAppendNode;46;2379.713,958.8679;Inherit;False;FLOAT3;4;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;1;FLOAT3;0\nNode;AmplifyShaderEditor.CrossProductOpNode;48;2631.292,856.3414;Inherit;False;2;0;FLOAT3;0,0,0;False;1;FLOAT3;0,0,0;False;1;FLOAT3;0\nNode;AmplifyShaderEditor.NormalizeNode;49;2857.023,851.1719;Inherit;False;1;0;FLOAT3;0,0,0;False;1;FLOAT3;0\nNode;AmplifyShaderEditor.SimpleSubtractOpNode;43;2046.445,1221.265;Inherit;False;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0\nNode;AmplifyShaderEditor.RangedFloatNode;45;2156.516,875.4233;Inherit;False;Constant;_Float0;Float
+    0;0;0;Create;True;0;0;False;0;False;0.01;0;0;0;0;1;FLOAT;0\nNode;AmplifyShaderEditor.SimpleMultiplyOpNode;50;2147.95,735.4768;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0\nNode;AmplifyShaderEditor.Vector2Node;39;971.5078,1314.961;Inherit;False;Constant;_Vector2;Vector
+    0;0;0;Create;True;0;0;False;0;False;0,0.001;0,0;0;3;FLOAT2;0;FLOAT;1;FLOAT;2\nNode;AmplifyShaderEditor.SamplerNode;40;1610.016,1279.613;Inherit;True;Property;_TextureSample3;Texture
+    Sample 0;0;0;Create;True;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;6;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4\nNode;AmplifyShaderEditor.Vector2Node;35;939.2526,989.5937;Inherit;False;Constant;_Vector1;Vector
+    0;0;0;Create;True;0;0;False;0;False;-0.001,0;0,0;0;3;FLOAT2;0;FLOAT;1;FLOAT;2\nNode;AmplifyShaderEditor.FunctionOutput;0;3068.874,843.4515;Inherit;False;True;-1;Output;0;False;1;0;FLOAT3;0,0,0;False;1;FLOAT3;0\nWireConnection;52;0;51;0\nWireConnection;52;1;43;0\nWireConnection;30;0;28;0\nWireConnection;30;1;31;0\nWireConnection;31;0;29;0\nWireConnection;31;1;32;0\nWireConnection;33;0;28;0\nWireConnection;33;1;34;0\nWireConnection;34;0;29;0\nWireConnection;34;1;35;0\nWireConnection;36;0;30;1\nWireConnection;36;1;33;1\nWireConnection;37;0;28;0\nWireConnection;37;1;38;0\nWireConnection;38;0;29;0\nWireConnection;38;1;39;0\nWireConnection;41;0;29;0\nWireConnection;41;1;42;0\nWireConnection;44;0;45;0\nWireConnection;44;2;50;0\nWireConnection;46;1;45;0\nWireConnection;46;2;52;0\nWireConnection;48;0;44;0\nWireConnection;48;1;46;0\nWireConnection;49;0;48;0\nWireConnection;43;0;37;1\nWireConnection;43;1;40;1\nWireConnection;50;0;36;0\nWireConnection;50;1;51;0\nWireConnection;40;0;28;0\nWireConnection;40;1;41;0\nWireConnection;0;0;49;0\nASEEND*/\n//CHKSM=5E7A9B5748FA8D904AB8C71FCE3C2BEE4DB2E029"
+  m_functionName: 
+  m_description: 
+  m_additionalIncludes:
+    m_additionalIncludes: []
+    m_outsideIncludes: []
+  m_additionalPragmas:
+    m_additionalPragmas: []
+    m_outsidePragmas: []
+  m_additionalDirectives:
+    m_validData: 0
+    m_isDirty: 0
+    m_moduleName: ' Additional Directives'
+    m_independentModule: 1
+    m_additionalDirectives: []
+    m_shaderFunctionDirectives: []
+    m_nativeDirectives: []
+    m_nativeDirectivesIndex: -1
+    m_nativeDirectivesFoldout: 0
+    m_directivesSaveItems: []
+  m_nodeCategory: 3
+  m_customNodeCategory: 
+  m_previewPosition: 0
+  m_hidden: 0

+ 8 - 0
ActionTowerDefense/Assets/Ripple/HeightToNormal.asset.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 9fdd62e7b97f39749804da6db28191cd
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 80 - 0
ActionTowerDefense/Assets/Ripple/Interactive.mat

@@ -0,0 +1,80 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+  serializedVersion: 8
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: Interactive
+  m_Shader: {fileID: 10755, guid: 0000000000000000f000000000000000, type: 0}
+  m_ValidKeywords: []
+  m_InvalidKeywords: []
+  m_LightmapFlags: 4
+  m_EnableInstancingVariants: 0
+  m_DoubleSidedGI: 0
+  m_CustomRenderQueue: -1
+  stringTagMap: {}
+  disabledShaderPasses: []
+  m_SavedProperties:
+    serializedVersion: 3
+    m_TexEnvs:
+    - _BumpMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _DetailAlbedoMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _DetailMask:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _DetailNormalMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _EmissionMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _MainTex:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _MetallicGlossMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _OcclusionMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _ParallaxMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    m_Ints: []
+    m_Floats:
+    - _BumpScale: 1
+    - _Cutoff: 0.5
+    - _DetailNormalMapScale: 1
+    - _DstBlend: 0
+    - _GlossMapScale: 1
+    - _Glossiness: 0.5
+    - _GlossyReflections: 1
+    - _Metallic: 0
+    - _Mode: 0
+    - _OcclusionStrength: 1
+    - _Parallax: 0.02
+    - _SmoothnessTextureChannel: 0
+    - _SpecularHighlights: 1
+    - _SrcBlend: 1
+    - _UVSec: 0
+    - _ZWrite: 1
+    m_Colors:
+    - _Color: {r: 1, g: 1, b: 1, a: 1}
+    - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
+  m_BuildTextureStacks: []

+ 8 - 0
ActionTowerDefense/Assets/Ripple/Interactive.mat.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: d50a0765bd41c544785e9d4048947812
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 2100000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 33 - 0
ActionTowerDefense/Assets/Ripple/InteractiveObj.cs

@@ -0,0 +1,33 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class InteractiveObj : MonoBehaviour
+{
+    public Vector3 lastPos;
+
+    private Renderer mRenderer;
+    // Start is called before the first frame update
+    void Start()
+    {
+        //保存之前位置
+        lastPos = transform.position;
+
+        mRenderer = GetComponent<Renderer>();
+    }
+
+    // Update is called once per frame
+    void Update()
+    {
+        if (mRenderer.enabled)
+        {
+            mRenderer.enabled = false;
+        }
+        if ((transform.position - lastPos).sqrMagnitude > 0.01f)
+        {
+            lastPos = transform.position;
+            //TODO:显示物体渲染
+            mRenderer.enabled = true;
+        }
+    }
+}

+ 11 - 0
ActionTowerDefense/Assets/Ripple/InteractiveObj.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 6b3ab4ea9aafaf246bae0e1ade7c3b69
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 39 - 0
ActionTowerDefense/Assets/Ripple/InteractiveRT.renderTexture

@@ -0,0 +1,39 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!84 &8400000
+RenderTexture:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: InteractiveRT
+  m_ImageContentsHash:
+    serializedVersion: 2
+    Hash: 00000000000000000000000000000000
+  m_ForcedFallbackFormat: 4
+  m_DownscaleFallback: 0
+  m_IsAlphaChannelOptional: 0
+  serializedVersion: 5
+  m_Width: 256
+  m_Height: 256
+  m_AntiAliasing: 1
+  m_MipCount: -1
+  m_DepthStencilFormat: 92
+  m_ColorFormat: 8
+  m_MipMap: 0
+  m_GenerateMips: 1
+  m_SRGB: 0
+  m_UseDynamicScale: 0
+  m_BindMS: 0
+  m_EnableCompatibleFormat: 1
+  m_TextureSettings:
+    serializedVersion: 2
+    m_FilterMode: 1
+    m_Aniso: 0
+    m_MipBias: 0
+    m_WrapU: 1
+    m_WrapV: 1
+    m_WrapW: 1
+  m_Dimension: 2
+  m_VolumeDepth: 1
+  m_ShadowSamplingMode: 2

+ 8 - 0
ActionTowerDefense/Assets/Ripple/InteractiveRT.renderTexture.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: ce2b9740fa507bc4cb580bb478ca7a05
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 8400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
ActionTowerDefense/Assets/Ripple/Materials.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 466ce23278c17db438aa35df81241891
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 33 - 0
ActionTowerDefense/Assets/Ripple/Materials/sunset.mat

@@ -0,0 +1,33 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+  serializedVersion: 8
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: sunset
+  m_Shader: {fileID: 103, guid: 0000000000000000f000000000000000, type: 0}
+  m_ValidKeywords: []
+  m_InvalidKeywords: []
+  m_LightmapFlags: 4
+  m_EnableInstancingVariants: 0
+  m_DoubleSidedGI: 0
+  m_CustomRenderQueue: -1
+  stringTagMap: {}
+  disabledShaderPasses: []
+  m_SavedProperties:
+    serializedVersion: 3
+    m_TexEnvs:
+    - _Tex:
+        m_Texture: {fileID: 8900000, guid: ab69f097b9ea5994c9c8e87d3212d81f, type: 3}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    m_Ints: []
+    m_Floats:
+    - _Exposure: 1
+    - _Rotation: 0
+    m_Colors:
+    - _Tint: {r: 0.5, g: 0.5, b: 0.5, a: 0.5}
+  m_BuildTextureStacks: []

+ 8 - 0
ActionTowerDefense/Assets/Ripple/Materials/sunset.mat.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 7410c7593fd196a4b8effeff26d93dd6
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 2100000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 77 - 0
ActionTowerDefense/Assets/Ripple/New Material 2.mat

@@ -0,0 +1,77 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+  serializedVersion: 6
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: New Material 2
+  m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
+  m_ShaderKeywords: 
+  m_LightmapFlags: 4
+  m_EnableInstancingVariants: 0
+  m_DoubleSidedGI: 0
+  m_CustomRenderQueue: -1
+  stringTagMap: {}
+  disabledShaderPasses: []
+  m_SavedProperties:
+    serializedVersion: 3
+    m_TexEnvs:
+    - _BumpMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _DetailAlbedoMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _DetailMask:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _DetailNormalMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _EmissionMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 10, y: 10}
+        m_Offset: {x: 0, y: 0}
+    - _MainTex:
+        m_Texture: {fileID: 10309, guid: 0000000000000000f000000000000000, type: 0}
+        m_Scale: {x: 10, y: 10}
+        m_Offset: {x: 0, y: 0}
+    - _MetallicGlossMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _OcclusionMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _ParallaxMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    m_Floats:
+    - _BumpScale: 1
+    - _Cutoff: 0.5
+    - _DetailNormalMapScale: 1
+    - _DstBlend: 0
+    - _GlossMapScale: 0
+    - _Glossiness: 0.442
+    - _GlossyReflections: 1
+    - _Metallic: 0
+    - _Mode: 0
+    - _OcclusionStrength: 1
+    - _Parallax: 0.02
+    - _SmoothnessTextureChannel: 0
+    - _SpecularHighlights: 1
+    - _SrcBlend: 1
+    - _UVSec: 0
+    - _ZWrite: 1
+    m_Colors:
+    - _Color: {r: 1, g: 1, b: 1, a: 1}
+    - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}

+ 8 - 0
ActionTowerDefense/Assets/Ripple/New Material 2.mat.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: f96febf6311d9ac4da4a1346a9bf9fa0
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 2100000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 107 - 0
ActionTowerDefense/Assets/Ripple/Ripple.cs

@@ -0,0 +1,107 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class Ripple : MonoBehaviour
+{
+
+    public Camera mainCamera;
+    public RenderTexture InteractiveRT;//交互RT
+    public RenderTexture PrevRT; //上一幀
+    public RenderTexture CurrentRT;//當前幀
+    public RenderTexture TempRT; //臨時RT
+    public Shader DrawShader; //繪製Shader
+    public Shader RippleShader;//漣漪計算Shader
+    public Shader AddShader;
+    private Material RippleMat;
+    private Material DrawMat;
+    private Material AddMat;
+    [Range(0, 1.0f)]
+    public float DrawRadius = 0.2f;
+    public int TextureSize = 512;
+    // Start is called before the first frame update
+    void Start()
+    {
+        //TODO獲取相機
+        mainCamera = Camera.main.GetComponent<Camera>();
+
+        CurrentRT = CreateRT();
+        PrevRT = CreateRT();
+        TempRT = CreateRT();
+
+        DrawMat = new Material(DrawShader);
+        RippleMat = new Material(RippleShader);
+        //AddMat = new Material(AddShader);
+
+        GetComponent<Renderer>().material.mainTexture = CurrentRT;
+
+        Application.targetFrameRate = 120;
+    }
+
+    public RenderTexture CreateRT()
+    {
+        RenderTexture rt = new RenderTexture(TextureSize, TextureSize, 0, RenderTextureFormat.RFloat);
+        //rt.Create();
+        return rt;
+    }
+    /// <summary>
+    /// 繪製
+    /// </summary>
+    /// <param name="x"></param>
+    /// <param name="y"></param>
+    /// <param name="radius">半徑</param>
+    private void DrawAt(float x, float y, float radius)
+    {
+        //原來的貼圖
+        DrawMat.SetTexture("_SourceTex", CurrentRT);
+        //繪製的位置和大小
+        DrawMat.SetVector("_Pos", new Vector4(x, y, radius));
+        //提交
+        Graphics.Blit(null, TempRT, DrawMat);
+
+        //進行交換
+        RenderTexture rt = TempRT;
+        TempRT = CurrentRT;
+        CurrentRT = rt;
+    }
+    private Vector3 lastPos;
+    // Update is called once per frame
+    void Update()
+    {
+        //TODO鼠標左鍵按下時射綫檢測
+        if (Input.GetMouseButton(0))
+        {
+            Ray ray = mainCamera.ScreenPointToRay(Input.mousePosition);
+            RaycastHit hit;//射綫碰撞信息
+            if (Physics.Raycast(ray, out hit))
+            {
+                if ((hit.point - lastPos).sqrMagnitude > 0.1f)
+                {
+                    lastPos = hit.point;
+                    //TODO:繪製圖案
+                    DrawAt(hit.textureCoord.x, hit.textureCoord.y, DrawRadius);
+                }
+            }
+        }
+
+        ////TODO:添加物体交互
+        //AddMat.SetTexture("_Tex1", InteractiveRT);
+        //AddMat.SetTexture("_Tex2", CurrentRT);
+        //Graphics.Blit(null, TempRT, AddMat);
+        ////把结果交换到CurrentRT
+        //RenderTexture rt0 = TempRT;
+        //TempRT = CurrentRT;
+        //CurrentRT = rt0;
+
+        //TODO:計算漣漪
+        RippleMat.SetTexture("_PrevRT", PrevRT);
+        RippleMat.SetTexture("_CurrentRT", CurrentRT);
+        Graphics.Blit(null, TempRT, RippleMat);
+        //TODO 交換到 CurrentRT上
+        Graphics.Blit(TempRT, PrevRT);
+        //交換
+        RenderTexture rt = PrevRT;
+        PrevRT = CurrentRT;
+        CurrentRT = rt;
+    }
+}

+ 11 - 0
ActionTowerDefense/Assets/Ripple/Ripple.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 33fde0d4c55944a4c98346f2c7a1969d
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 60 - 0
ActionTowerDefense/Assets/Ripple/RippleShader.shader

@@ -0,0 +1,60 @@
+Shader "Unlit/RippleShader"
+{
+    Properties
+    {
+ 
+    }
+    SubShader
+    {
+        Tags { "RenderType"="Opaque" }
+        LOD 100
+
+        Pass
+        {
+            CGPROGRAM
+            #pragma vertex vert
+            #pragma fragment frag
+            #include "UnityCG.cginc"
+
+            struct appdata
+            {
+                float4 vertex : POSITION;
+                float2 uv : TEXCOORD0;
+            };
+
+            struct v2f
+            {
+                float2 uv : TEXCOORD0;
+                float4 vertex : SV_POSITION;
+            };
+            sampler2D _PrevRT; //上一幀
+            sampler2D _CurrentRT;//當前幀
+            float4 _CurrentRT_TexelSize;//貼圖大小信息
+            v2f vert (appdata v)
+            {
+                v2f o;
+                o.vertex = UnityObjectToClipPos(v.vertex);
+                o.uv = v.uv;
+                return o;
+            }
+
+            fixed4 frag(v2f i) : SV_Target
+            {
+                //最小偏移單位
+                float3 e = float3(_CurrentRT_TexelSize.xy,0);
+                float2 uv = i.uv;
+                //獲取當前幀的上下左右值
+                float p10 = tex2D(_CurrentRT, uv - e.zy).x; //下
+                float p01 = tex2D(_CurrentRT, uv - e.xz).x; //左
+                float p21 = tex2D(_CurrentRT, uv + e.xz).x; //右
+                float p12 = tex2D(_CurrentRT, uv + e.zy).x; //上
+                //上一幀的中心
+                float p11 = tex2D(_PrevRT, uv).x;
+                float d = (p10 + p01 + p21 + p12)*0.5 - p11;
+                d *= 0.99;
+                return d;
+            }
+            ENDCG
+        }
+    }
+}

+ 9 - 0
ActionTowerDefense/Assets/Ripple/RippleShader.shader.meta

@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 73f654a849bf69143a9aee4ec9d82ed2
+ShaderImporter:
+  externalObjects: {}
+  defaultTextures: []
+  nonModifiableTextures: []
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 91 - 0
ActionTowerDefense/Assets/Ripple/Sky.mat

@@ -0,0 +1,91 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+  serializedVersion: 6
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: Sky
+  m_Shader: {fileID: 4800000, guid: 923b9cf3e9954edd82dcc80b12aeb17a, type: 3}
+  m_ShaderKeywords: 
+  m_LightmapFlags: 0
+  m_EnableInstancingVariants: 0
+  m_DoubleSidedGI: 0
+  m_CustomRenderQueue: -1
+  stringTagMap: {}
+  disabledShaderPasses: []
+  m_SavedProperties:
+    serializedVersion: 3
+    m_TexEnvs:
+    - _BumpMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _DetailAlbedoMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _DetailMask:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _DetailNormalMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _EmissionMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _MainTex:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _MetallicGlossMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _OcclusionMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _ParallaxMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _Tex:
+        m_Texture: {fileID: 8900000, guid: ab69f097b9ea5994c9c8e87d3212d81f, type: 3}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    m_Floats:
+    - _BumpScale: 1
+    - _Cutoff: 0.5
+    - _DetailNormalMapScale: 1
+    - _DstBlend: 0
+    - _EnableFog: 0
+    - _EnableRotation: 0
+    - _Exposure: 1
+    - _FogFill: 0.5
+    - _FogHeight: 1
+    - _FogSmoothness: 0.01
+    - _GlossMapScale: 1
+    - _Glossiness: 0.5
+    - _GlossyReflections: 1
+    - _Metallic: 0
+    - _Mode: 0
+    - _OcclusionStrength: 1
+    - _Parallax: 0.02
+    - _Rotation: 0
+    - _RotationSpeed: 1
+    - _SmoothnessTextureChannel: 0
+    - _SpecularHighlights: 1
+    - _SrcBlend: 1
+    - _UVSec: 0
+    - _ZWrite: 1
+    - __dirty: 0
+    m_Colors:
+    - _Color: {r: 1, g: 1, b: 1, a: 1}
+    - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
+    - _TintColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}

+ 8 - 0
ActionTowerDefense/Assets/Ripple/Sky.mat.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 23e2063436a45704087c79668db804cc
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 92 - 0
ActionTowerDefense/Assets/Ripple/Water.mat

@@ -0,0 +1,92 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+  serializedVersion: 8
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: Water
+  m_Shader: {fileID: 4800000, guid: 9303875b011804d468cd33290692c7ce, type: 3}
+  m_ValidKeywords: []
+  m_InvalidKeywords: []
+  m_LightmapFlags: 4
+  m_EnableInstancingVariants: 0
+  m_DoubleSidedGI: 0
+  m_CustomRenderQueue: -1
+  stringTagMap: {}
+  disabledShaderPasses: []
+  m_SavedProperties:
+    serializedVersion: 3
+    m_TexEnvs:
+    - _BumpMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _DetailAlbedoMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _DetailMask:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _DetailNormalMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _EmissionMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _MainTex:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _MetallicGlossMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _OcclusionMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _ParallaxMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _texcoord:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    m_Ints: []
+    m_Floats:
+    - _BumpScale: 1
+    - _ChromaticAberration: 0.1
+    - _Cutoff: 0.5
+    - _DetailNormalMapScale: 1
+    - _DstBlend: 0
+    - _EdgeLength: 15
+    - _GlossMapScale: 1
+    - _Glossiness: 0.5
+    - _GlossyReflections: 1
+    - _Metallic: 0
+    - _Mode: 0
+    - _OcclusionStrength: 1
+    - _Opacity: 0
+    - _Parallax: 0.02
+    - _Refraction: 1
+    - _Smoothness: 1.05
+    - _SmoothnessTextureChannel: 0
+    - _SpecularHighlights: 1
+    - _SrcBlend: 1
+    - _TessPhongStrength: 0.5
+    - _UVSec: 0
+    - _ZWrite: 1
+    - __dirty: 0
+    m_Colors:
+    - _Color: {r: 1, g: 1, b: 1, a: 1}
+    - _Color0: {r: 0, g: 0, b: 0, a: 0}
+    - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
+  m_BuildTextureStacks: []

+ 8 - 0
ActionTowerDefense/Assets/Ripple/Water.mat.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: b06fc2f6bf30647428abcb7b86c745e7
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 2100000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 223 - 0
ActionTowerDefense/Assets/Ripple/Water.shader

@@ -0,0 +1,223 @@
+// Made with Amplify Shader Editor
+// Available at the Unity Asset Store - http://u3d.as/y3X 
+Shader "Water"
+{
+	Properties
+	{
+		_EdgeLength ( "Edge length", Range( 2, 50 ) ) = 15
+		_Refraction("Refraction", Float) = 1
+		_Smoothness("Smoothness", Float) = 1.05
+		_Color0("Color 0", Color) = (0,0,0,0)
+		[Header(Refraction)]
+		_ChromaticAberration("Chromatic Aberration", Range( 0 , 0.3)) = 0.1
+		_MainTex("MainTex", 2D) = "white" {}
+		_Opacity("Opacity", Float) = 0
+		[HideInInspector] _texcoord( "", 2D ) = "white" {}
+		[HideInInspector] __dirty( "", Int ) = 1
+	}
+
+	SubShader
+	{
+		Tags{ "RenderType" = "Transparent"  "Queue" = "Transparent+0" "IgnoreProjector" = "True" }
+		Cull Back
+		GrabPass{ }
+		CGINCLUDE
+		#include "Tessellation.cginc"
+		#include "UnityPBSLighting.cginc"
+		#include "Lighting.cginc"
+		#pragma target 4.6
+		#pragma multi_compile _ALPHAPREMULTIPLY_ON
+		struct Input
+		{
+			float2 uv_texcoord;
+			float4 screenPos;
+			float3 worldPos;
+		};
+
+		uniform sampler2D _MainTex;
+		uniform float4 _Color0;
+		uniform float _Smoothness;
+		uniform float _Opacity;
+		uniform sampler2D _GrabTexture;
+		uniform float _ChromaticAberration;
+		uniform float _Refraction;
+		uniform float _EdgeLength;
+
+		float4 tessFunction( appdata_full v0, appdata_full v1, appdata_full v2 )
+		{
+			return UnityEdgeLengthBasedTess (v0.vertex, v1.vertex, v2.vertex, _EdgeLength);
+		}
+
+		void vertexDataFunc( inout appdata_full v )
+		{
+			float3 ase_vertexNormal = v.normal.xyz;
+			v.vertex.xyz += ( tex2Dlod( _MainTex, float4( v.texcoord.xy, 0, 0.0) ).r * ase_vertexNormal * 0.2 );
+		}
+
+		inline float4 Refraction( Input i, SurfaceOutputStandard o, float indexOfRefraction, float chomaticAberration ) {
+			float3 worldNormal = o.Normal;
+			float4 screenPos = i.screenPos;
+			#if UNITY_UV_STARTS_AT_TOP
+				float scale = -1.0;
+			#else
+				float scale = 1.0;
+			#endif
+			float halfPosW = screenPos.w * 0.5;
+			screenPos.y = ( screenPos.y - halfPosW ) * _ProjectionParams.x * scale + halfPosW;
+			#if SHADER_API_D3D9 || SHADER_API_D3D11
+				screenPos.w += 0.00000000001;
+			#endif
+			float2 projScreenPos = ( screenPos / screenPos.w ).xy;
+			float3 worldViewDir = normalize( UnityWorldSpaceViewDir( i.worldPos ) );
+			float3 refractionOffset = ( indexOfRefraction - 1.0 ) * mul( UNITY_MATRIX_V, float4( worldNormal, 0.0 ) ) * ( 1.0 - dot( worldNormal, worldViewDir ) );
+			float2 cameraRefraction = float2( refractionOffset.x, refractionOffset.y );
+			float4 redAlpha = tex2D( _GrabTexture, ( projScreenPos + cameraRefraction ) );
+			float green = tex2D( _GrabTexture, ( projScreenPos + ( cameraRefraction * ( 1.0 - chomaticAberration ) ) ) ).g;
+			float blue = tex2D( _GrabTexture, ( projScreenPos + ( cameraRefraction * ( 1.0 + chomaticAberration ) ) ) ).b;
+			return float4( redAlpha.r, green, blue, redAlpha.a );
+		}
+
+		void RefractionF( Input i, SurfaceOutputStandard o, inout half4 color )
+		{
+			#ifdef UNITY_PASS_FORWARDBASE
+			color.rgb = color.rgb + Refraction( i, o, _Refraction, _ChromaticAberration ) * ( 1 - color.a );
+			color.a = 1;
+			#endif
+		}
+
+		void surf( Input i , inout SurfaceOutputStandard o )
+		{
+			o.Normal = float3(0,0,1);
+			float2 temp_output_29_0_g1 = i.uv_texcoord;
+			float temp_output_51_0_g1 = 0.1;
+			float3 appendResult44_g1 = (float3(0.01 , 0.0 , ( ( tex2D( _MainTex, ( temp_output_29_0_g1 + float2( 0.001,0 ) ) ).r - tex2D( _MainTex, ( temp_output_29_0_g1 + float2( -0.001,0 ) ) ).r ) * temp_output_51_0_g1 )));
+			float3 appendResult46_g1 = (float3(0.0 , 0.01 , ( temp_output_51_0_g1 * ( tex2D( _MainTex, ( temp_output_29_0_g1 + float2( 0,0.001 ) ) ).r - tex2D( _MainTex, ( temp_output_29_0_g1 + float2( 0,-0.001 ) ) ).r ) )));
+			float3 normalizeResult49_g1 = normalize( cross( appendResult44_g1 , appendResult46_g1 ) );
+			o.Normal = normalizeResult49_g1;
+			o.Albedo = _Color0.rgb;
+			o.Smoothness = _Smoothness;
+			o.Alpha = _Opacity;
+			o.Normal = o.Normal + 0.00001 * i.screenPos * i.worldPos;
+		}
+
+		ENDCG
+		CGPROGRAM
+		#pragma surface surf Standard alpha:fade keepalpha finalcolor:RefractionF fullforwardshadows exclude_path:deferred vertex:vertexDataFunc tessellate:tessFunction 
+
+		ENDCG
+		Pass
+		{
+			Name "ShadowCaster"
+			Tags{ "LightMode" = "ShadowCaster" }
+			ZWrite On
+			CGPROGRAM
+			#pragma vertex vert
+			#pragma fragment frag
+			#pragma target 4.6
+			#pragma multi_compile_shadowcaster
+			#pragma multi_compile UNITY_PASS_SHADOWCASTER
+			#pragma skip_variants FOG_LINEAR FOG_EXP FOG_EXP2
+			#include "HLSLSupport.cginc"
+			#if ( SHADER_API_D3D11 || SHADER_API_GLCORE || SHADER_API_GLES || SHADER_API_GLES3 || SHADER_API_METAL || SHADER_API_VULKAN )
+				#define CAN_SKIP_VPOS
+			#endif
+			#include "UnityCG.cginc"
+			#include "Lighting.cginc"
+			#include "UnityPBSLighting.cginc"
+			sampler3D _DitherMaskLOD;
+			struct v2f
+			{
+				V2F_SHADOW_CASTER;
+				float2 customPack1 : TEXCOORD1;
+				float3 worldPos : TEXCOORD2;
+				float4 screenPos : TEXCOORD3;
+				float4 tSpace0 : TEXCOORD4;
+				float4 tSpace1 : TEXCOORD5;
+				float4 tSpace2 : TEXCOORD6;
+				UNITY_VERTEX_INPUT_INSTANCE_ID
+				UNITY_VERTEX_OUTPUT_STEREO
+			};
+			v2f vert( appdata_full v )
+			{
+				v2f o;
+				UNITY_SETUP_INSTANCE_ID( v );
+				UNITY_INITIALIZE_OUTPUT( v2f, o );
+				UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO( o );
+				UNITY_TRANSFER_INSTANCE_ID( v, o );
+				Input customInputData;
+				vertexDataFunc( v );
+				float3 worldPos = mul( unity_ObjectToWorld, v.vertex ).xyz;
+				half3 worldNormal = UnityObjectToWorldNormal( v.normal );
+				half3 worldTangent = UnityObjectToWorldDir( v.tangent.xyz );
+				half tangentSign = v.tangent.w * unity_WorldTransformParams.w;
+				half3 worldBinormal = cross( worldNormal, worldTangent ) * tangentSign;
+				o.tSpace0 = float4( worldTangent.x, worldBinormal.x, worldNormal.x, worldPos.x );
+				o.tSpace1 = float4( worldTangent.y, worldBinormal.y, worldNormal.y, worldPos.y );
+				o.tSpace2 = float4( worldTangent.z, worldBinormal.z, worldNormal.z, worldPos.z );
+				o.customPack1.xy = customInputData.uv_texcoord;
+				o.customPack1.xy = v.texcoord;
+				o.worldPos = worldPos;
+				TRANSFER_SHADOW_CASTER_NORMALOFFSET( o )
+				o.screenPos = ComputeScreenPos( o.pos );
+				return o;
+			}
+			half4 frag( v2f IN
+			#if !defined( CAN_SKIP_VPOS )
+			, UNITY_VPOS_TYPE vpos : VPOS
+			#endif
+			) : SV_Target
+			{
+				UNITY_SETUP_INSTANCE_ID( IN );
+				Input surfIN;
+				UNITY_INITIALIZE_OUTPUT( Input, surfIN );
+				surfIN.uv_texcoord = IN.customPack1.xy;
+				float3 worldPos = IN.worldPos;
+				half3 worldViewDir = normalize( UnityWorldSpaceViewDir( worldPos ) );
+				surfIN.worldPos = worldPos;
+				surfIN.screenPos = IN.screenPos;
+				SurfaceOutputStandard o;
+				UNITY_INITIALIZE_OUTPUT( SurfaceOutputStandard, o )
+				surf( surfIN, o );
+				#if defined( CAN_SKIP_VPOS )
+				float2 vpos = IN.pos;
+				#endif
+				half alphaRef = tex3D( _DitherMaskLOD, float3( vpos.xy * 0.25, o.Alpha * 0.9375 ) ).a;
+				clip( alphaRef - 0.01 );
+				SHADOW_CASTER_FRAGMENT( IN )
+			}
+			ENDCG
+		}
+	}
+	Fallback "Diffuse"
+	CustomEditor "ASEMaterialInspector"
+}
+/*ASEBEGIN
+Version=18100
+12.8;21.6;1523;780;1598.82;72.11757;1.891048;True;True
+Node;AmplifyShaderEditor.TexCoordVertexDataNode;3;-622.5759,268.7247;Inherit;False;0;2;0;5;FLOAT2;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.TexturePropertyNode;1;-963.9528,205.0947;Inherit;True;Property;_MainTex;MainTex;10;0;Create;True;0;0;False;0;False;None;None;False;white;Auto;Texture2D;-1;0;1;SAMPLER2D;0
+Node;AmplifyShaderEditor.SamplerNode;8;-265.3264,452.2683;Inherit;True;Property;_TextureSample4;Texture Sample 4;8;0;Create;True;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;6;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.NormalVertexDataNode;9;-150.4052,697.1199;Inherit;False;0;5;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.RangedFloatNode;11;-57.11911,915.3727;Inherit;False;Constant;_Float1;Float 1;8;0;Create;True;0;0;False;0;False;0.2;0;0;0;0;1;FLOAT;0
+Node;AmplifyShaderEditor.FunctionNode;2;-162.5,81;Inherit;False;HeightToNormal;-1;;1;9fdd62e7b97f39749804da6db28191cd;0;3;51;FLOAT;0.1;False;28;SAMPLER2D;0;False;29;FLOAT2;0,0;False;1;FLOAT3;0
+Node;AmplifyShaderEditor.RangedFloatNode;4;-78.5,277;Inherit;False;Property;_Refraction;Refraction;5;0;Create;True;0;0;False;0;False;1.05;1.05;0;0;0;1;FLOAT;0
+Node;AmplifyShaderEditor.RangedFloatNode;5;-82.5,203;Inherit;False;Property;_Smoothness;Smoothness;6;0;Create;True;0;0;False;0;False;1.05;1.05;0;0;0;1;FLOAT;0
+Node;AmplifyShaderEditor.RangedFloatNode;6;-77.5,352;Inherit;False;Property;_Opacity;Opacity;11;0;Create;True;0;0;False;0;False;0;0;0;0;0;1;FLOAT;0
+Node;AmplifyShaderEditor.ColorNode;7;-458.9,-118.4;Inherit;False;Property;_Color0;Color 0;7;0;Create;True;0;0;False;0;False;0,0,0,0;0,0,0,0;True;0;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.SimpleMultiplyOpNode;10;154.0928,512.3093;Inherit;False;3;3;0;FLOAT;0;False;1;FLOAT3;0,0,0;False;2;FLOAT;0;False;1;FLOAT3;0
+Node;AmplifyShaderEditor.StandardSurfaceOutputNode;0;399.3739,64.08083;Float;False;True;-1;6;ASEMaterialInspector;0;0;Standard;Water;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;False;False;False;False;False;False;Back;0;False;-1;0;False;-1;False;0;False;-1;0;False;-1;False;0;Transparent;0.5;True;True;0;True;Transparent;;Transparent;ForwardOnly;14;all;True;True;True;True;0;False;-1;False;0;False;-1;255;False;-1;255;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;-1;True;2;15;10;25;False;0.5;True;2;5;False;-1;10;False;-1;0;0;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;0;0,0,0,0;VertexOffset;True;False;Cylindrical;False;Relative;0;;12;-1;8;0;0;False;0;0;False;-1;-1;0;False;-1;0;0;0;False;0.1;False;-1;0;False;-1;16;0;FLOAT3;0,0,0;False;1;FLOAT3;0,0,0;False;2;FLOAT3;0,0,0;False;3;FLOAT;0;False;4;FLOAT;0;False;5;FLOAT;0;False;6;FLOAT3;0,0,0;False;7;FLOAT3;0,0,0;False;8;FLOAT;0;False;9;FLOAT;0;False;10;FLOAT;0;False;13;FLOAT3;0,0,0;False;11;FLOAT3;0,0,0;False;12;FLOAT3;0,0,0;False;14;FLOAT4;0,0,0,0;False;15;FLOAT3;0,0,0;False;0
+WireConnection;8;0;1;0
+WireConnection;8;1;3;0
+WireConnection;2;28;1;0
+WireConnection;2;29;3;0
+WireConnection;10;0;8;1
+WireConnection;10;1;9;0
+WireConnection;10;2;11;0
+WireConnection;0;0;7;0
+WireConnection;0;1;2;0
+WireConnection;0;4;5;0
+WireConnection;0;8;4;0
+WireConnection;0;9;6;0
+WireConnection;0;11;10;0
+ASEEND*/
+//CHKSM=416629C59C9CC8EDA8DA1EA3445CA055344B7891

+ 9 - 0
ActionTowerDefense/Assets/Ripple/Water.shader.meta

@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 9303875b011804d468cd33290692c7ce
+ShaderImporter:
+  externalObjects: {}
+  defaultTextures: []
+  nonModifiableTextures: []
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

BIN
ActionTowerDefense/Assets/Ripple/brick.png


+ 92 - 0
ActionTowerDefense/Assets/Ripple/brick.png.meta

@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: dd0895f9519179e4c9fc5ecb0950b6ca
+TextureImporter:
+  internalIDToNameTable: []
+  externalObjects: {}
+  serializedVersion: 11
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 1
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: -1
+    wrapV: -1
+    wrapW: -1
+  nPOTScale: 1
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 0
+  spriteTessellationDetail: -1
+  textureType: 0
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  applyGammaDecoding: 0
+  platformSettings:
+  - serializedVersion: 3
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 
+    internalID: 0
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+    secondaryTextures: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

BIN
ActionTowerDefense/Assets/Ripple/brickn.png


+ 116 - 0
ActionTowerDefense/Assets/Ripple/brickn.png.meta

@@ -0,0 +1,116 @@
+fileFormatVersion: 2
+guid: b4741c9ed9d5acd44a275535c5c7497e
+TextureImporter:
+  internalIDToNameTable: []
+  externalObjects: {}
+  serializedVersion: 11
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 1
+    sRGBTexture: 0
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: -1
+    wrapV: -1
+    wrapW: -1
+  nPOTScale: 1
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 0
+  spriteTessellationDetail: -1
+  textureType: 1
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  applyGammaDecoding: 0
+  platformSettings:
+  - serializedVersion: 3
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Standalone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Android
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 
+    internalID: 0
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+    secondaryTextures: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

BIN
ActionTowerDefense/Assets/Ripple/sunset.hdr


+ 104 - 0
ActionTowerDefense/Assets/Ripple/sunset.hdr.meta

@@ -0,0 +1,104 @@
+fileFormatVersion: 2
+guid: ab69f097b9ea5994c9c8e87d3212d81f
+TextureImporter:
+  internalIDToNameTable: []
+  externalObjects: {}
+  serializedVersion: 11
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 1
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: -1
+    wrapV: -1
+    wrapW: -1
+  nPOTScale: 1
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 0
+  spriteTessellationDetail: -1
+  textureType: 0
+  textureShape: 2
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  applyGammaDecoding: 0
+  platformSettings:
+  - serializedVersion: 3
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Standalone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 
+    internalID: 0
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+    secondaryTextures: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 1169 - 0
ActionTowerDefense/Assets/Scenes/Water.unity

@@ -0,0 +1,1169 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!29 &1
+OcclusionCullingSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_OcclusionBakeSettings:
+    smallestOccluder: 5
+    smallestHole: 0.25
+    backfaceThreshold: 100
+  m_SceneGUID: 00000000000000000000000000000000
+  m_OcclusionCullingData: {fileID: 0}
+--- !u!104 &2
+RenderSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 9
+  m_Fog: 0
+  m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
+  m_FogMode: 3
+  m_FogDensity: 0.01
+  m_LinearFogStart: 0
+  m_LinearFogEnd: 300
+  m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
+  m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
+  m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
+  m_AmbientIntensity: 1
+  m_AmbientMode: 0
+  m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
+  m_SkyboxMaterial: {fileID: 2100000, guid: 7410c7593fd196a4b8effeff26d93dd6, type: 2}
+  m_HaloStrength: 0.5
+  m_FlareStrength: 1
+  m_FlareFadeSpeed: 3
+  m_HaloTexture: {fileID: 0}
+  m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
+  m_DefaultReflectionMode: 0
+  m_DefaultReflectionResolution: 128
+  m_ReflectionBounces: 1
+  m_ReflectionIntensity: 1
+  m_CustomReflection: {fileID: 0}
+  m_Sun: {fileID: 1144204151}
+  m_IndirectSpecularColor: {r: 0.5444019, g: 0.50700164, b: 0.5242697, a: 1}
+  m_UseRadianceAmbientProbe: 0
+--- !u!157 &4
+LightmapSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 12
+  m_GIWorkflowMode: 0
+  m_GISettings:
+    serializedVersion: 2
+    m_BounceScale: 1
+    m_IndirectOutputScale: 1
+    m_AlbedoBoost: 1
+    m_EnvironmentLightingMode: 0
+    m_EnableBakedLightmaps: 1
+    m_EnableRealtimeLightmaps: 1
+  m_LightmapEditorSettings:
+    serializedVersion: 12
+    m_Resolution: 2
+    m_BakeResolution: 40
+    m_AtlasSize: 1024
+    m_AO: 0
+    m_AOMaxDistance: 1
+    m_CompAOExponent: 0
+    m_CompAOExponentDirect: 0
+    m_ExtractAmbientOcclusion: 0
+    m_Padding: 2
+    m_LightmapParameters: {fileID: 0}
+    m_LightmapsBakeMode: 1
+    m_TextureCompression: 1
+    m_FinalGather: 0
+    m_FinalGatherFiltering: 1
+    m_FinalGatherRayCount: 1024
+    m_ReflectionCompression: 2
+    m_MixedBakeMode: 1
+    m_BakeBackend: 0
+    m_PVRSampling: 1
+    m_PVRDirectSampleCount: 32
+    m_PVRSampleCount: 512
+    m_PVRBounces: 2
+    m_PVREnvironmentSampleCount: 512
+    m_PVREnvironmentReferencePointCount: 2048
+    m_PVRFilteringMode: 0
+    m_PVRDenoiserTypeDirect: 0
+    m_PVRDenoiserTypeIndirect: 0
+    m_PVRDenoiserTypeAO: 0
+    m_PVRFilterTypeDirect: 0
+    m_PVRFilterTypeIndirect: 0
+    m_PVRFilterTypeAO: 0
+    m_PVREnvironmentMIS: 0
+    m_PVRCulling: 1
+    m_PVRFilteringGaussRadiusDirect: 1
+    m_PVRFilteringGaussRadiusIndirect: 5
+    m_PVRFilteringGaussRadiusAO: 2
+    m_PVRFilteringAtrousPositionSigmaDirect: 0.5
+    m_PVRFilteringAtrousPositionSigmaIndirect: 2
+    m_PVRFilteringAtrousPositionSigmaAO: 1
+    m_ExportTrainingData: 0
+    m_TrainingDataDestination: TrainingData
+    m_LightProbeSampleCountMultiplier: 4
+  m_LightingDataAsset: {fileID: 0}
+  m_LightingSettings: {fileID: 974704717}
+--- !u!196 &5
+NavMeshSettings:
+  serializedVersion: 2
+  m_ObjectHideFlags: 0
+  m_BuildSettings:
+    serializedVersion: 2
+    agentTypeID: 0
+    agentRadius: 0.5
+    agentHeight: 2
+    agentSlope: 45
+    agentClimb: 0.4
+    ledgeDropHeight: 0
+    maxJumpAcrossDistance: 0
+    minRegionArea: 2
+    manualCellSize: 0
+    cellSize: 0.16666667
+    manualTileSize: 0
+    tileSize: 256
+    accuratePlacement: 0
+    maxJobWorkers: 0
+    preserveTilesOutsideBounds: 0
+    debug:
+      m_Flags: 0
+  m_NavMeshData: {fileID: 0}
+--- !u!1 &11679374
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 11679375}
+  - component: {fileID: 11679378}
+  - component: {fileID: 11679377}
+  - component: {fileID: 11679376}
+  m_Layer: 0
+  m_Name: Plane
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &11679375
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 11679374}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 787679944}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &11679376
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 11679374}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 2ba913026a462b24f8ee61d406c04e62, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Camera: {fileID: 1562051869}
+  m_TextureSize: 512
+  m_ClipPlaneOffset: 0.07
+  m_ReflectionStrength: 0.2
+  m_ReflectionTint: {r: 1, g: 1, b: 1, a: 1}
+  m_UseLightMap: 0
+  m_ReflectLayers:
+    serializedVersion: 2
+    m_Bits: 4294967295
+  m_Iterations: 2
+  m_Interpolation: 1
+  m_BlurMat: {fileID: 2100000, guid: c4a04261945118f4a85111aa652686ed, type: 2}
+  m_BumpTex: {fileID: 0}
+  m_BumpStrength: 0.5
+  m_BumpTexScale: 3
+  m_MaskTex: {fileID: 2800000, guid: ef1dcffc7ec50cf4b87ffee59961fc9e, type: 3}
+  m_EnableHeightSharp: 0
+  m_RTReflectionColor: {fileID: 0}
+  m_RTOriginalReflectionColor: {fileID: 0}
+  m_RTHeightAtten: {fileID: 0}
+  m_SdrHeightAtten: {fileID: 4800000, guid: 4068497e26fe40b498b5f21fc6fba60a, type: 3}
+--- !u!23 &11679377
+MeshRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 11679374}
+  m_Enabled: 1
+  m_CastShadows: 1
+  m_ReceiveShadows: 1
+  m_DynamicOccludee: 1
+  m_StaticShadowCaster: 0
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RayTracingMode: 2
+  m_RayTraceProcedural: 0
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 2100000, guid: 95594790b7b8e2848a86e8c0aafecba5, type: 2}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_ReceiveGI: 1
+  m_PreserveUVs: 1
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 1
+  m_SelectedEditorRenderState: 3
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: 0
+  m_SortingLayer: 0
+  m_SortingOrder: 0
+  m_AdditionalVertexStreams: {fileID: 0}
+--- !u!33 &11679378
+MeshFilter:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 11679374}
+  m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!1001 &30003354
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 787679944}
+    m_Modifications:
+    - target: {fileID: 100078, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+      propertyPath: m_IsActive
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 400044, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+      propertyPath: m_LocalRotation.w
+      value: .0670855045
+      objectReference: {fileID: 0}
+    - target: {fileID: 400044, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+      propertyPath: m_LocalRotation.x
+      value: -.0839476362
+      objectReference: {fileID: 0}
+    - target: {fileID: 400044, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+      propertyPath: m_LocalRotation.y
+      value: -.604888856
+      objectReference: {fileID: 0}
+    - target: {fileID: 400044, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+      propertyPath: m_LocalRotation.z
+      value: .789025962
+      objectReference: {fileID: 0}
+    - target: {fileID: 400080, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+      propertyPath: m_RootOrder
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 400080, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 400080, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 400080, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 400080, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+      propertyPath: m_LocalRotation.w
+      value: -1.62920685e-07
+      objectReference: {fileID: 0}
+    - target: {fileID: 400080, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 400080, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+      propertyPath: m_LocalRotation.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 400080, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 13700000, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 0c78792007d4aef45a3beeb967b75a49, type: 2}
+    - target: {fileID: 13700002, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 3bf26de3de116544099d80c42bc9e053, type: 2}
+    m_RemovedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+--- !u!4 &30003355 stripped
+Transform:
+  m_CorrespondingSourceObject: {fileID: 400080, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+  m_PrefabInstance: {fileID: 30003354}
+  m_PrefabAsset: {fileID: 0}
+--- !u!1 &734758437
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 734758440}
+  - component: {fileID: 734758439}
+  - component: {fileID: 734758438}
+  m_Layer: 0
+  m_Name: Camera
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!81 &734758438
+AudioListener:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 734758437}
+  m_Enabled: 1
+--- !u!20 &734758439
+Camera:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 734758437}
+  m_Enabled: 1
+  serializedVersion: 2
+  m_ClearFlags: 2
+  m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0}
+  m_projectionMatrixMode: 1
+  m_GateFitMode: 2
+  m_FOVAxisMode: 0
+  m_SensorSize: {x: 36, y: 24}
+  m_LensShift: {x: 0, y: 0}
+  m_FocalLength: 50
+  m_NormalizedViewPortRect:
+    serializedVersion: 2
+    x: 0
+    y: 0
+    width: 1
+    height: 1
+  near clip plane: 0.3
+  far clip plane: 1000
+  field of view: 60
+  orthographic: 1
+  orthographic size: 5
+  m_Depth: 0
+  m_CullingMask:
+    serializedVersion: 2
+    m_Bits: 256
+  m_RenderingPath: -1
+  m_TargetTexture: {fileID: 8400000, guid: ce2b9740fa507bc4cb580bb478ca7a05, type: 2}
+  m_TargetDisplay: 0
+  m_TargetEye: 3
+  m_HDR: 1
+  m_AllowMSAA: 1
+  m_AllowDynamicResolution: 0
+  m_ForceIntoRT: 0
+  m_OcclusionCulling: 1
+  m_StereoConvergence: 10
+  m_StereoSeparation: 0.022
+--- !u!4 &734758440
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 734758437}
+  m_LocalRotation: {x: 0, y: 0.7071068, z: -0.7071068, w: 0}
+  m_LocalPosition: {x: 0, y: 3.03, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 4
+  m_LocalEulerAnglesHint: {x: 90, y: 180, z: 0}
+--- !u!1 &787679943
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 787679944}
+  m_Layer: 0
+  m_Name: Scene
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &787679944
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 787679943}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 11679375}
+  - {fileID: 30003355}
+  - {fileID: 1784382211}
+  - {fileID: 1793013227}
+  m_Father: {fileID: 0}
+  m_RootOrder: 2
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!850595691 &974704717
+LightingSettings:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: Settings.lighting
+  serializedVersion: 4
+  m_GIWorkflowMode: 0
+  m_EnableBakedLightmaps: 1
+  m_EnableRealtimeLightmaps: 1
+  m_RealtimeEnvironmentLighting: 1
+  m_BounceScale: 1
+  m_AlbedoBoost: 1
+  m_IndirectOutputScale: 1
+  m_UsingShadowmask: 0
+  m_BakeBackend: 0
+  m_LightmapMaxSize: 1024
+  m_BakeResolution: 40
+  m_Padding: 2
+  m_LightmapCompression: 3
+  m_AO: 0
+  m_AOMaxDistance: 1
+  m_CompAOExponent: 0
+  m_CompAOExponentDirect: 0
+  m_ExtractAO: 0
+  m_MixedBakeMode: 1
+  m_LightmapsBakeMode: 1
+  m_FilterMode: 1
+  m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0}
+  m_ExportTrainingData: 0
+  m_TrainingDataDestination: TrainingData
+  m_RealtimeResolution: 2
+  m_ForceWhiteAlbedo: 0
+  m_ForceUpdates: 0
+  m_FinalGather: 0
+  m_FinalGatherRayCount: 1024
+  m_FinalGatherFiltering: 1
+  m_PVRCulling: 1
+  m_PVRSampling: 1
+  m_PVRDirectSampleCount: 32
+  m_PVRSampleCount: 512
+  m_PVREnvironmentSampleCount: 512
+  m_PVREnvironmentReferencePointCount: 2048
+  m_LightProbeSampleCountMultiplier: 4
+  m_PVRBounces: 2
+  m_PVRMinBounces: 2
+  m_PVREnvironmentMIS: 0
+  m_PVRFilteringMode: 0
+  m_PVRDenoiserTypeDirect: 0
+  m_PVRDenoiserTypeIndirect: 0
+  m_PVRDenoiserTypeAO: 0
+  m_PVRFilterTypeDirect: 0
+  m_PVRFilterTypeIndirect: 0
+  m_PVRFilterTypeAO: 0
+  m_PVRFilteringGaussRadiusDirect: 1
+  m_PVRFilteringGaussRadiusIndirect: 5
+  m_PVRFilteringGaussRadiusAO: 2
+  m_PVRFilteringAtrousPositionSigmaDirect: 0.5
+  m_PVRFilteringAtrousPositionSigmaIndirect: 2
+  m_PVRFilteringAtrousPositionSigmaAO: 1
+  m_PVRTiledBaking: 0
+--- !u!1 &1119733399
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1119733404}
+  - component: {fileID: 1119733403}
+  - component: {fileID: 1119733402}
+  - component: {fileID: 1119733401}
+  - component: {fileID: 1119733400}
+  m_Layer: 0
+  m_Name: Plane
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!114 &1119733400
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1119733399}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 33fde0d4c55944a4c98346f2c7a1969d, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  mainCamera: {fileID: 0}
+  InteractiveRT: {fileID: 8400000, guid: ce2b9740fa507bc4cb580bb478ca7a05, type: 2}
+  PrevRT: {fileID: 0}
+  CurrentRT: {fileID: 0}
+  TempRT: {fileID: 0}
+  DrawShader: {fileID: 4800000, guid: fdd54acc182a5fc49a4b8682f8054d80, type: 3}
+  RippleShader: {fileID: 4800000, guid: 73f654a849bf69143a9aee4ec9d82ed2, type: 3}
+  AddShader: {fileID: 4800000, guid: 86b2a6bf564f51146a1bcc3ab06df515, type: 3}
+  DrawRadius: 0.1
+  TextureSize: 512
+--- !u!64 &1119733401
+MeshCollider:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1119733399}
+  m_Material: {fileID: 0}
+  m_IsTrigger: 0
+  m_Enabled: 1
+  serializedVersion: 4
+  m_Convex: 0
+  m_CookingOptions: -1
+  m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!23 &1119733402
+MeshRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1119733399}
+  m_Enabled: 1
+  m_CastShadows: 1
+  m_ReceiveShadows: 1
+  m_DynamicOccludee: 1
+  m_StaticShadowCaster: 0
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RayTracingMode: 2
+  m_RayTraceProcedural: 0
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 2100000, guid: b06fc2f6bf30647428abcb7b86c745e7, type: 2}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_ReceiveGI: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 1
+  m_SelectedEditorRenderState: 3
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: 0
+  m_SortingLayer: 0
+  m_SortingOrder: 0
+  m_AdditionalVertexStreams: {fileID: 0}
+--- !u!33 &1119733403
+MeshFilter:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1119733399}
+  m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!4 &1119733404
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1119733399}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0.1, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 3
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1144204150
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1144204152}
+  - component: {fileID: 1144204151}
+  m_Layer: 0
+  m_Name: Directional Light
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!108 &1144204151
+Light:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1144204150}
+  m_Enabled: 1
+  serializedVersion: 10
+  m_Type: 1
+  m_Shape: 0
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Intensity: 1
+  m_Range: 10
+  m_SpotAngle: 30
+  m_InnerSpotAngle: 21.80208
+  m_CookieSize: 10
+  m_Shadows:
+    m_Type: 2
+    m_Resolution: 2
+    m_CustomResolution: -1
+    m_Strength: 0.3
+    m_Bias: 0.05
+    m_NormalBias: 0.4
+    m_NearPlane: 0.2
+    m_CullingMatrixOverride:
+      e00: 1
+      e01: 0
+      e02: 0
+      e03: 0
+      e10: 0
+      e11: 1
+      e12: 0
+      e13: 0
+      e20: 0
+      e21: 0
+      e22: 1
+      e23: 0
+      e30: 0
+      e31: 0
+      e32: 0
+      e33: 1
+    m_UseCullingMatrixOverride: 0
+  m_Cookie: {fileID: 0}
+  m_DrawHalo: 0
+  m_Flare: {fileID: 0}
+  m_RenderMode: 0
+  m_CullingMask:
+    serializedVersion: 2
+    m_Bits: 4294967295
+  m_RenderingLayerMask: 1
+  m_Lightmapping: 4
+  m_LightShadowCasterMode: 0
+  m_AreaSize: {x: 1, y: 1}
+  m_BounceIntensity: 1
+  m_ColorTemperature: 6570
+  m_UseColorTemperature: 0
+  m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0}
+  m_UseBoundingSphereOverride: 0
+  m_UseViewFrustumForShadowCasterCull: 1
+  m_ShadowRadius: 0
+  m_ShadowAngle: 0
+--- !u!4 &1144204152
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1144204150}
+  m_LocalRotation: {x: 0.40821794, y: -0.23456973, z: 0.109381676, w: 0.87542605}
+  m_LocalPosition: {x: 0, y: 3, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1562051864
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1562051870}
+  - component: {fileID: 1562051869}
+  - component: {fileID: 1562051867}
+  - component: {fileID: 1562051866}
+  - component: {fileID: 1562051865}
+  m_Layer: 0
+  m_Name: Main Camera
+  m_TagString: MainCamera
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!114 &1562051865
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1562051864}
+  m_Enabled: 0
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: e5811b6eee91fdd4388579fa48a23797, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+--- !u!81 &1562051866
+AudioListener:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1562051864}
+  m_Enabled: 1
+--- !u!124 &1562051867
+Behaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1562051864}
+  m_Enabled: 1
+--- !u!20 &1562051869
+Camera:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1562051864}
+  m_Enabled: 1
+  serializedVersion: 2
+  m_ClearFlags: 1
+  m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0}
+  m_projectionMatrixMode: 1
+  m_GateFitMode: 2
+  m_FOVAxisMode: 0
+  m_SensorSize: {x: 36, y: 24}
+  m_LensShift: {x: 0, y: 0}
+  m_FocalLength: 50
+  m_NormalizedViewPortRect:
+    serializedVersion: 2
+    x: 0
+    y: 0
+    width: 1
+    height: 1
+  near clip plane: 0.3
+  far clip plane: 1000
+  field of view: 60
+  orthographic: 0
+  orthographic size: 5
+  m_Depth: -1
+  m_CullingMask:
+    serializedVersion: 2
+    m_Bits: 4294967295
+  m_RenderingPath: -1
+  m_TargetTexture: {fileID: 0}
+  m_TargetDisplay: 0
+  m_TargetEye: 3
+  m_HDR: 0
+  m_AllowMSAA: 1
+  m_AllowDynamicResolution: 0
+  m_ForceIntoRT: 0
+  m_OcclusionCulling: 1
+  m_StereoConvergence: 10
+  m_StereoSeparation: 0.022
+--- !u!4 &1562051870
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1562051864}
+  m_LocalRotation: {x: 0.20765558, y: 0, z: 0, w: 0.978202}
+  m_LocalPosition: {x: 0, y: 2.06, z: -6.6}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 23.97, y: 0, z: 0}
+--- !u!1 &1583080052
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1583080053}
+  - component: {fileID: 1583080057}
+  - component: {fileID: 1583080056}
+  - component: {fileID: 1583080055}
+  - component: {fileID: 1583080054}
+  m_Layer: 8
+  m_Name: Cube (2)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &1583080053
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1583080052}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 1828679924}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &1583080054
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1583080052}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 6b3ab4ea9aafaf246bae0e1ade7c3b69, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  lastPos: {x: 0, y: 0, z: 0}
+--- !u!65 &1583080055
+BoxCollider:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1583080052}
+  m_Material: {fileID: 0}
+  m_IsTrigger: 0
+  m_Enabled: 1
+  serializedVersion: 2
+  m_Size: {x: 1, y: 1, z: 1}
+  m_Center: {x: 0, y: 0, z: 0}
+--- !u!23 &1583080056
+MeshRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1583080052}
+  m_Enabled: 1
+  m_CastShadows: 1
+  m_ReceiveShadows: 1
+  m_DynamicOccludee: 1
+  m_StaticShadowCaster: 0
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RayTracingMode: 2
+  m_RayTraceProcedural: 0
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 2100000, guid: d50a0765bd41c544785e9d4048947812, type: 2}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_ReceiveGI: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 1
+  m_SelectedEditorRenderState: 3
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: 0
+  m_SortingLayer: 0
+  m_SortingOrder: 0
+  m_AdditionalVertexStreams: {fileID: 0}
+--- !u!33 &1583080057
+MeshFilter:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1583080052}
+  m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!1001 &1784382210
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 787679944}
+    m_Modifications:
+    - target: {fileID: 100078, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+      propertyPath: m_Name
+      value: Player
+      objectReference: {fileID: 0}
+    - target: {fileID: 100078, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+      propertyPath: m_IsActive
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 400044, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+      propertyPath: m_LocalRotation.w
+      value: .0670855045
+      objectReference: {fileID: 0}
+    - target: {fileID: 400044, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+      propertyPath: m_LocalRotation.x
+      value: -.0839476362
+      objectReference: {fileID: 0}
+    - target: {fileID: 400044, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+      propertyPath: m_LocalRotation.y
+      value: -.604888856
+      objectReference: {fileID: 0}
+    - target: {fileID: 400044, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+      propertyPath: m_LocalRotation.z
+      value: .789025962
+      objectReference: {fileID: 0}
+    - target: {fileID: 400080, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+      propertyPath: m_RootOrder
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 400080, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 2.31999993
+      objectReference: {fileID: 0}
+    - target: {fileID: 400080, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 400080, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+      propertyPath: m_LocalPosition.z
+      value: -2.55999994
+      objectReference: {fileID: 0}
+    - target: {fileID: 400080, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+      propertyPath: m_LocalRotation.w
+      value: -1.62920685e-07
+      objectReference: {fileID: 0}
+    - target: {fileID: 400080, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 400080, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+      propertyPath: m_LocalRotation.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 400080, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 13700000, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 0c78792007d4aef45a3beeb967b75a49, type: 2}
+    - target: {fileID: 13700002, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 3bf26de3de116544099d80c42bc9e053, type: 2}
+    m_RemovedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+--- !u!4 &1784382211 stripped
+Transform:
+  m_CorrespondingSourceObject: {fileID: 400080, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+  m_PrefabInstance: {fileID: 1784382210}
+  m_PrefabAsset: {fileID: 0}
+--- !u!1001 &1793013226
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 787679944}
+    m_Modifications:
+    - target: {fileID: 100078, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+      propertyPath: m_Name
+      value: Player
+      objectReference: {fileID: 0}
+    - target: {fileID: 100078, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+      propertyPath: m_IsActive
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 400044, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+      propertyPath: m_LocalRotation.w
+      value: .0670854971
+      objectReference: {fileID: 0}
+    - target: {fileID: 400044, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+      propertyPath: m_LocalRotation.x
+      value: -.0839476287
+      objectReference: {fileID: 0}
+    - target: {fileID: 400044, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+      propertyPath: m_LocalRotation.y
+      value: -.604888797
+      objectReference: {fileID: 0}
+    - target: {fileID: 400044, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+      propertyPath: m_LocalRotation.z
+      value: .789025843
+      objectReference: {fileID: 0}
+    - target: {fileID: 400080, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+      propertyPath: m_RootOrder
+      value: 3
+      objectReference: {fileID: 0}
+    - target: {fileID: 400080, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+      propertyPath: m_LocalPosition.x
+      value: -1.38999999
+      objectReference: {fileID: 0}
+    - target: {fileID: 400080, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 400080, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+      propertyPath: m_LocalPosition.z
+      value: -2.55999994
+      objectReference: {fileID: 0}
+    - target: {fileID: 400080, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+      propertyPath: m_LocalRotation.w
+      value: -1.62920685e-07
+      objectReference: {fileID: 0}
+    - target: {fileID: 400080, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 400080, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+      propertyPath: m_LocalRotation.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 400080, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 13700000, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 0c78792007d4aef45a3beeb967b75a49, type: 2}
+    - target: {fileID: 13700002, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 3bf26de3de116544099d80c42bc9e053, type: 2}
+    m_RemovedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+--- !u!4 &1793013227 stripped
+Transform:
+  m_CorrespondingSourceObject: {fileID: 400080, guid: d5bf700fbdd87b34486cab99c350a766, type: 3}
+  m_PrefabInstance: {fileID: 1793013226}
+  m_PrefabAsset: {fileID: 0}
+--- !u!1 &1828679921
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1828679924}
+  - component: {fileID: 1828679923}
+  - component: {fileID: 1828679922}
+  m_Layer: 0
+  m_Name: Cube (1)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!23 &1828679922
+MeshRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1828679921}
+  m_Enabled: 1
+  m_CastShadows: 1
+  m_ReceiveShadows: 1
+  m_DynamicOccludee: 1
+  m_StaticShadowCaster: 0
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RayTracingMode: 2
+  m_RayTraceProcedural: 0
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_ReceiveGI: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 1
+  m_SelectedEditorRenderState: 3
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: 0
+  m_SortingLayer: 0
+  m_SortingOrder: 0
+  m_AdditionalVertexStreams: {fileID: 0}
+--- !u!33 &1828679923
+MeshFilter:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1828679921}
+  m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!4 &1828679924
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1828679921}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 2.24, y: 0.57, z: -1.37}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 1583080053}
+  m_Father: {fileID: 0}
+  m_RootOrder: 5
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}

+ 11 - 0
ActionTowerDefense/Assets/Scenes/Water.unity.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d866171a6907cc64597e904f724e620a
+labels:
+- glass
+- metal
+- reflect
+- reflection
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: