#pragma strict
var shadowProjector : Projector; // the shadow projector
var shadowDistanceTolerance : float = 0.5; // positive number used to cast shadow on terrains correctly
private var hit : RaycastHit;
private var dist : float;
private var origNearClipPlane : float;
private var origFarClipPlane : float;
private var ray : Ray;
function Start() {
if(!shadowProjector) shadowProjector = transform.GetComponentInChildren.();
origNearClipPlane = shadowProjector.nearClipPlane;
origFarClipPlane = shadowProjector.farClipPlane;
}
function Update() {
ray = new Ray(shadowProjector.transform.position
+ shadowProjector.transform.forward.normalized * origNearClipPlane,
shadowProjector.transform.forward);
if (Physics.Raycast (ray, hit, origFarClipPlane - origNearClipPlane, ~shadowProjector.ignoreLayers))
{
dist = hit.distance + origNearClipPlane;
Debug.Log(dist);
//shadowProjector.nearClipPlane = Mathf.Max(dist - shadowDistanceTolerance, 12);
//dist = 12 for large ball
if(dist >= 12)
shadowProjector.nearClipPlane = 15;//value higher than 12
else
shadowProjector.nearClipPlane = origNearClipPlane;
shadowProjector.farClipPlane = dist + shadowDistanceTolerance;
//Debug.Log("Ray hit at: " + hit.point + ", distance: " + dist);
}
}
↧