LOD高亮轮廓
This commit is contained in:
parent
b2af23d2e1
commit
ca784f5b86
File diff suppressed because it is too large
Load Diff
|
|
@ -1,5 +1,7 @@
|
||||||
|
using HighlightPlus;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityEngine.SocialPlatforms;
|
using UnityEngine.SocialPlatforms;
|
||||||
|
|
||||||
|
|
@ -18,6 +20,8 @@ public class SorghumController : PermanentTriggerBase
|
||||||
|
|
||||||
public bool RandomRotate = true;
|
public bool RandomRotate = true;
|
||||||
|
|
||||||
|
|
||||||
|
LODGroup lodGroup = null;
|
||||||
public void Init(SorghumState _state = SorghumState.Healthy, bool _rand = false)
|
public void Init(SorghumState _state = SorghumState.Healthy, bool _rand = false)
|
||||||
{
|
{
|
||||||
State = _state;
|
State = _state;
|
||||||
|
|
@ -43,10 +47,12 @@ public class SorghumController : PermanentTriggerBase
|
||||||
case SorghumState.Diseased:
|
case SorghumState.Diseased:
|
||||||
triggerName = "高粱_病株";
|
triggerName = "高粱_病株";
|
||||||
this.gameObject.name = "高粱_病株";
|
this.gameObject.name = "高粱_病株";
|
||||||
|
lodGroup = DiseasedStrain.GetComponent<LODGroup>();
|
||||||
break;
|
break;
|
||||||
case SorghumState.Healthy:
|
case SorghumState.Healthy:
|
||||||
triggerName = "高粱_正常";
|
triggerName = "高粱_正常";
|
||||||
this.gameObject.name = "高粱_正常";
|
this.gameObject.name = "高粱_正常";
|
||||||
|
lodGroup = HealthyStrain.GetComponent<LODGroup>();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -99,14 +105,50 @@ public class SorghumController : PermanentTriggerBase
|
||||||
base.OnMEnter();
|
base.OnMEnter();
|
||||||
//if (GameManager.RunModelMgr?.ModeType != E_ModeType.Study)
|
//if (GameManager.RunModelMgr?.ModeType != E_ModeType.Study)
|
||||||
//{
|
//{
|
||||||
_highlight.SetHighlighted(true);
|
|
||||||
|
_highlight = GetComponentInChildren<HighlightEffect>();
|
||||||
|
if (_highlight != null)
|
||||||
|
_highlight.SetHighlighted(true);
|
||||||
|
|
||||||
|
//Debug.Log("当前渲染:" + GetLODCurShowLevel(Camera.main, lodGroup));
|
||||||
//}
|
//}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int GetLODCurShowLevel(Camera cam, LODGroup lodGroup)
|
||||||
|
{
|
||||||
|
var inv_SceneViewCamHeight = 1.0f / (cam.pixelHeight - 6.0f);
|
||||||
|
|
||||||
|
var lods = lodGroup.GetLODs();
|
||||||
|
for (int lodIDX = 0; lodIDX < lods.Length; lodIDX++)
|
||||||
|
{
|
||||||
|
var lod = lods[lodIDX];
|
||||||
|
var renderers = lod.renderers;
|
||||||
|
for (int renderIDX = 0; renderIDX < renderers.Length; renderIDX++)
|
||||||
|
{
|
||||||
|
var renderer = renderers[renderIDX];
|
||||||
|
var heightInScreen = cam.WorldToScreenPoint(renderer.bounds.min).y - cam.WorldToScreenPoint(renderer.bounds.max).y;
|
||||||
|
var ratioInScren = Mathf.Abs(heightInScreen * inv_SceneViewCamHeight);
|
||||||
|
if (ratioInScren > lod.screenRelativeTransitionHeight)
|
||||||
|
{
|
||||||
|
return lodIDX;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
private float CalculateScreenRelativeHeight(float objectSize, float distance, float fov)
|
||||||
|
{
|
||||||
|
// 计算物体在屏幕上的高度比例
|
||||||
|
float screenHeight = 2.0f * Mathf.Tan(0.5f * fov * Mathf.Deg2Rad) * distance;
|
||||||
|
return objectSize / screenHeight;
|
||||||
|
}
|
||||||
|
|
||||||
protected override void OnMExit()
|
protected override void OnMExit()
|
||||||
{
|
{
|
||||||
//if (GameManager.RunModelMgr?.ModeType != E_ModeType.Study)
|
if (_highlight != null)
|
||||||
_highlight.SetHighlighted(false);
|
_highlight.SetHighlighted(false);
|
||||||
base.OnMExit();
|
base.OnMExit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -167,16 +167,16 @@ public class SorghumFieldController : MonoBehaviour
|
||||||
|
|
||||||
private void SetRenderersEnabled(bool enabled, GameObject go)
|
private void SetRenderersEnabled(bool enabled, GameObject go)
|
||||||
{
|
{
|
||||||
GameObject obj = go;
|
//GameObject obj = go;
|
||||||
if (obj == null) obj = this.gameObject;
|
//if (obj == null) obj = this.gameObject;
|
||||||
Renderer[] renderers = go.GetComponentsInChildren<Renderer>();
|
//Renderer[] renderers = go.GetComponentsInChildren<Renderer>();
|
||||||
foreach (Renderer r in renderers)
|
//foreach (Renderer r in renderers)
|
||||||
{
|
//{
|
||||||
r.enabled = enabled;
|
// r.enabled = enabled;
|
||||||
}
|
//}
|
||||||
|
|
||||||
LODGroup lg = go.GetComponent<LODGroup>();
|
//LODGroup lg = go.GetComponent<LODGroup>();
|
||||||
Debug.Log("LOD×éÊý£º" + lg.GetLODs().Length);
|
//Debug.Log("LOD×éÊý£º" + lg.GetLODs().Length);
|
||||||
//Renderer[] rd = lg.GetLODs();
|
//Renderer[] rd = lg.GetLODs();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue