C# 当前LOD级别-LOD组统一

C# 当前LOD级别-LOD组统一,c#,unity3d,unityscript,level-of-detail,C#,Unity3d,Unityscript,Level Of Detail,我在引导LOD组时遇到问题,因为我想知道我在屏幕上看到的当前活动LOD级别。我只能使用 GameObject.GetComponent<LODGroup>().GetLODs()[size].screenRelativeTransitionHeight; GameObject.GetComponent().GetLODs()[size].screenRelativeTransitionHeight; 有人知道怎么解决这个问题吗?提前感谢。在answers.unity3d.com中

我在引导LOD组时遇到问题,因为我想知道我在屏幕上看到的当前活动LOD级别。我只能使用

GameObject.GetComponent<LODGroup>().GetLODs()[size].screenRelativeTransitionHeight;
GameObject.GetComponent().GetLODs()[size].screenRelativeTransitionHeight;

有人知道怎么解决这个问题吗?提前感谢。

在answers.unity3d.com中搜索,我发现:

LODGroup LODGroup=obj.GetComponent();
if(lodGroup!=null)
{
Transform-lodTransform=lodGroup.Transform;
foreach(在lodTransform中变换子对象)
{
var renderer=child.GetComponent();
if(renderer!=null&&renderer.isVisible)
{ 
Log(“使用此级别:“+child.name”);
}
}
}

通过查看当前可见(在屏幕上可见)的子游戏对象渲染器的名称,您可以找到当前处于活动状态的LOD级别。

我也遇到了同样的问题,最终找到了一个真正有效的解决方案。(遗憾的是,renderer.isVisible的更新频率不够高,因此不太可靠,我不想在任何LOD子对象上添加附加组件。)

我在这里上传了解决方案:

这主要是我从这里得到的代码:我只是喜欢不必要的东西,并添加了其他我必须经常使用的实用程序函数


它已被用作编辑器中的实用程序脚本,但获取当前可见LOD级别的数学方法仍然存在。

Nice one@maros。我唯一建议的是存储对渲染器的引用,而不是使用GetComponent。这将使它更具性能。朱利安,谢谢你分享你的LODExtendedUtility脚本!GetVisibleLOD方法对于调试非常有用。
 LODGroup lodGroup = obj.GetComponent<LODGroup>();
 if (lodGroup != null)
 {
     Transform lodTransform = lodGroup.transform;
     foreach (Transform child in lodTransform)
     {
         var renderer = child.GetComponent<Renderer> ();
         if (renderer != null && renderer.isVisible)
         { 
             Debug.Log("This LODlevel is used: " + child.name); 
         }
     }
 }