Even though this is a very old question I'll post my solution in case anyone in the future has the same problem...
Rather than trying to change the clipping plane of the water reflection (which seems impossible) I created a new layer called Reflection Layer and set the water plane to reflect this layer only. Then game objects can be added or removed from the reflection layer depending on how close the player is. Here is a quick script I wrote for that...
using UnityEngine;
using System.Collections;
public class ChangeLayer : MonoBehaviour {
public Transform character; //add the player game object in inspector
private Transform cachedTransform;
private float dist;
// Use this for initialization
void Start ()
{
cachedTransform = transform; //cache the player position
dist = Vector3.Distance(character.position, cachedTransform.position); //calculate distance between object and player
StartCoroutine(CheckDistance());
}
IEnumerator CheckDistance()
{
while(true)
{
dist = Vector3.Distance(character.position, cachedTransform.position); //calculate distance between object and player
if(dist < 60) //If player is close enough to game object
gameObject.layer = LayerMask.NameToLayer("Reflection Layer"); //Add to reflection layer
else //If not close
gameObject.layer = LayerMask.NameToLayer("Default"); //Add to default layer
yield return new WaitForSeconds(0.3f);
}
}
}
The script has to be added to every game object that you want to be reflected... so if you have hundreds of game objects there may be a better way but this works perfectly for me.
Cheers, Joe
↧