123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- 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);
- }
- }
- }
|