You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1.6 KiB
51 lines
1.6 KiB
using System; |
|
using UnityEngine; |
|
|
|
namespace UnityStandardAssets.Utility |
|
{ |
|
public class DynamicShadowSettings : MonoBehaviour |
|
{ |
|
public Light sunLight; |
|
public float minHeight = 10; |
|
public float minShadowDistance = 80; |
|
public float minShadowBias = 1; |
|
public float maxHeight = 1000; |
|
public float maxShadowDistance = 10000; |
|
public float maxShadowBias = 0.1f; |
|
public float adaptTime = 1; |
|
|
|
private float m_SmoothHeight; |
|
private float m_ChangeSpeed; |
|
private float m_OriginalStrength = 1; |
|
|
|
|
|
private void Start() |
|
{ |
|
m_OriginalStrength = sunLight.shadowStrength; |
|
} |
|
|
|
|
|
// Update is called once per frame |
|
private void Update() |
|
{ |
|
Ray ray = new Ray(Camera.main.transform.position, -Vector3.up); |
|
RaycastHit hit; |
|
float height = transform.position.y; |
|
if (Physics.Raycast(ray, out hit)) |
|
{ |
|
height = hit.distance; |
|
} |
|
|
|
if (Mathf.Abs(height - m_SmoothHeight) > 1) |
|
{ |
|
m_SmoothHeight = Mathf.SmoothDamp(m_SmoothHeight, height, ref m_ChangeSpeed, adaptTime); |
|
} |
|
|
|
float i = Mathf.InverseLerp(minHeight, maxHeight, m_SmoothHeight); |
|
|
|
QualitySettings.shadowDistance = Mathf.Lerp(minShadowDistance, maxShadowDistance, i); |
|
sunLight.shadowBias = Mathf.Lerp(minShadowBias, maxShadowBias, 1 - ((1 - i)*(1 - i))); |
|
sunLight.shadowStrength = Mathf.Lerp(m_OriginalStrength, 0, i); |
|
} |
|
} |
|
}
|
|
|