73 lines
1.3 KiB
C#
73 lines
1.3 KiB
C#
using UnityEngine;
|
|||
|
|
using System.Collections;
|
||
|
|
|
||
|
|
/*public class VisibilityZone{
|
||
|
|
|
||
|
|
|
||
|
|
public VisibilityZone(GameObject src, float overlayDepth){
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
}*/
|
||
|
|
|
||
|
|
public class ZoneVisibilityControl : Predicate {
|
||
|
|
#region implemented abstract members of Predicate
|
||
|
|
protected override bool CheckInternal ()
|
||
|
|
{
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
protected override bool CheckInternal (object param)
|
||
|
|
{
|
||
|
|
var z = param as VisibilityZone;
|
||
|
|
if(z == null){
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
return z.IsInside(viewer.transform.position);
|
||
|
|
}
|
||
|
|
#endregion
|
||
|
|
|
||
|
|
private VisibilityZone[] zones;
|
||
|
|
public GameObject viewer;
|
||
|
|
private VisibilityZone currentVisible;
|
||
|
|
public Material hideMaterial;
|
||
|
|
public float hideDepth = -1.0f;
|
||
|
|
|
||
|
|
// Use this for initialization
|
||
|
|
void Start () {
|
||
|
|
zones = FindObjectsOfType<VisibilityZone>();
|
||
|
|
foreach(var zone in zones){
|
||
|
|
zone.Init();
|
||
|
|
zone.Hide(hideMaterial, hideDepth);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
void UpateVisibility(){
|
||
|
|
foreach(var zone in zones){
|
||
|
|
if(zone.IsInside(viewer.transform.position)){
|
||
|
|
if(currentVisible != zone){
|
||
|
|
if(currentVisible != null){
|
||
|
|
currentVisible.Hide (hideMaterial, hideDepth);
|
||
|
|
}
|
||
|
|
|
||
|
|
currentVisible = zone;
|
||
|
|
currentVisible.Show();
|
||
|
|
|
||
|
|
}
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if(currentVisible != null){
|
||
|
|
currentVisible.Hide (hideMaterial, hideDepth);
|
||
|
|
currentVisible = null;
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
// Update is called once per frame
|
||
|
|
void Update () {
|
||
|
|
//UpateVisibility();
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
}
|