Minor - Add Assets And Support Dual Screen

This commit is contained in:
2026-02-03 16:15:50 +01:00
parent 76132c2cbe
commit 7a3d9e54c4
1039 changed files with 149985 additions and 21327 deletions

View File

@@ -0,0 +1,20 @@
namespace Assets.Scripts.Water
{
using UnityEngine;
/// <summary>
/// Area that belongs to some water
/// </summary>
public class WaterArea : MonoBehaviour
{
/// <summary>
/// Water shader properties of the water this area belong
/// </summary>
[SerializeField] private WaterPropertyBlockSetter waterProperties;
public MaterialPropertyBlock WaterPropertyBlock
{
get { return waterProperties.MaterialPropertyBlock; }
}
}
}

View File

@@ -0,0 +1,19 @@
fileFormatVersion: 2
guid: a8224516acd263b45a7aa9170e00b7ff
timeCreated: 1493665152
licenseType: Store
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 89541
packageName: Mobile depth water shader
packageVersion: 1.0
assetPath: Assets/MobileDepthWater/Scripts/Water/WaterArea.cs
uploadId: 179707

View File

@@ -0,0 +1,45 @@
namespace Assets.Scripts.Water
{
using UnityEngine;
/// <summary>
/// This class switchs material of dynamic objects if they enter or exit any water area
/// After switching to water material it pushes water area properties to dynamic object material
/// It allows objects to be under the lake or be in the different water
/// Also switching material to diffuse after exiting the water gives a bit performance
/// </summary>
public class WaterMaterialSwitcher : MonoBehaviour
{
[SerializeField] private Renderer renderer;
[SerializeField] private Material waterMaterial;
[SerializeField] private Material diffuseMaterial;
private MaterialPropertyBlock defaulPropertyBlock;
public void Awake()
{
defaulPropertyBlock = new MaterialPropertyBlock();
renderer.GetPropertyBlock(defaulPropertyBlock);
}
public void OnTriggerEnter(Collider collider)
{
if (collider.tag == "Water")
{
var waterPropertyBlock = collider.GetComponent<WaterArea>().WaterPropertyBlock;
renderer.sharedMaterial = waterMaterial;
renderer.SetPropertyBlock(waterPropertyBlock);
}
}
public void OnTriggerExit(Collider collider)
{
if (collider.tag == "Water")
{
renderer.sharedMaterial = diffuseMaterial;
renderer.SetPropertyBlock(defaulPropertyBlock);
}
}
}
}

View File

@@ -0,0 +1,19 @@
fileFormatVersion: 2
guid: 43f35e80d9e9de94b9032fbd4aa2b5f7
timeCreated: 1493664770
licenseType: Store
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 89541
packageName: Mobile depth water shader
packageVersion: 1.0
assetPath: Assets/MobileDepthWater/Scripts/Water/WaterMaterialSwitcher.cs
uploadId: 179707

View File

@@ -0,0 +1,107 @@
namespace Assets.Scripts.Water
{
using UnityEngine;
/// <summary>
/// This class helps you to set water properties for a lot of materials at the same time.
/// So you don't have to make it for each independently.
/// Put it on the scene, add renderers and set up your water.
/// </summary>
[ExecuteInEditMode]
public class WaterPropertyBlockSetter : MonoBehaviour
{
[SerializeField] private Renderer[] waterRenderers;
[Space]
[SerializeField] private Color waterColor;
[SerializeField] private Texture waterTex;
[SerializeField] private Vector2 waterTile;
[Range(0, 1)][SerializeField] private float textureVisibility;
[Space]
[SerializeField] private Texture distortionTex;
[SerializeField] private Vector2 distortionTile;
[Space]
[SerializeField] private float waterHeight;
[SerializeField] private float waterDeep;
[Range(0, 0.1f)][SerializeField] private float waterDepthParam;
[Range(0, 1)][SerializeField] private float waterMinAlpha;
[Space]
[SerializeField] private Color borderColor;
[Range(0, 1)][SerializeField] private float borderWidth;
[Space]
[SerializeField] private Vector2 moveDirection;
private MaterialPropertyBlock materialPropertyBlock;
public MaterialPropertyBlock MaterialPropertyBlock
{
get { return materialPropertyBlock; }
}
public void Awake()
{
materialPropertyBlock = new MaterialPropertyBlock();
SetUpPropertyBlock(materialPropertyBlock);
if (waterRenderers != null)
{
for (var i = 0; i < waterRenderers.Length; i++)
{
waterRenderers[i].SetPropertyBlock(materialPropertyBlock);
}
}
}
#if UNITY_EDITOR
public void OnEnable()
{
materialPropertyBlock = new MaterialPropertyBlock();
SetUpPropertyBlock(materialPropertyBlock);
}
public void Update()
{
SetUpPropertyBlock(materialPropertyBlock);
if (waterRenderers != null)
{
for (var i = 0; i < waterRenderers.Length; i++)
{
waterRenderers[i].SetPropertyBlock(materialPropertyBlock);
}
}
}
#endif
private void SetUpPropertyBlock(MaterialPropertyBlock propertyBlock)
{
propertyBlock.SetColor("_WaterColor", waterColor);
propertyBlock.SetColor("_BorderColor", borderColor);
propertyBlock.SetVector("_Tiling", waterTile);
propertyBlock.SetVector("_DistTiling", distortionTile);
propertyBlock.SetVector("_MoveDirection", new Vector4(moveDirection.x, 0f, moveDirection.y, 0f));
if (waterTex != null)
{
propertyBlock.SetTexture("_WaterTex", waterTex);
}
if (distortionTex != null)
{
propertyBlock.SetTexture("_DistTex", distortionTex);
}
propertyBlock.SetFloat("_TextureVisibility", textureVisibility);
propertyBlock.SetFloat("_WaterHeight", waterHeight);
propertyBlock.SetFloat("_WaterDeep", waterDeep);
propertyBlock.SetFloat("_WaterDepth", waterDepthParam);
propertyBlock.SetFloat("_WaterMinAlpha", waterMinAlpha);
propertyBlock.SetFloat("_BorderWidth", borderWidth);
}
}
}

View File

@@ -0,0 +1,19 @@
fileFormatVersion: 2
guid: 7b610d095b4e1b044805a720533b3ce8
timeCreated: 1493665152
licenseType: Store
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 89541
packageName: Mobile depth water shader
packageVersion: 1.0
assetPath: Assets/MobileDepthWater/Scripts/Water/WaterPropertyBlockSetter.cs
uploadId: 179707