【发布时间】:2018-01-03 14:11:18
【问题描述】:
我在 Unity 中编写了一个 C# 脚本,它可以检测所有可见对象。现在我想从左到右输出它们,就像它们在场景中的位置一样。每个对象都有一个数字,但脚本按升序输出对象。
我的想法:
我想到了一个沿着水平视野的for-loop。首先计算水平FOV:
private static float horizontalFOV() {
float radAngle = Camera.main.fieldOfView * Mathf.Deg2Rad;
float radHFOV = 2 * Mathf.Atan(Mathf.Tan(radAngle / 2) * Camera.main.aspect);
float hFOV = Mathf.Rad2Deg * radHFOV;
return hFOV;
}
并通过以下方式创建循环:
public static string OutputVisibleRenderers (List<Renderer> renderers) {
float hFov = horizontalFOV ();
if (null == renderers)
throw new System.ArgumentNullException ("renderers are null");
for (int i = 0; i < hFov; i++) {
foreach (var renderer in renderers) {
if (IsVisible (renderer)) {
myList.Add (renderer.name);
}
}
}
string itemsInOneLine = string.Join ("-", myList.ToArray());
myList.Clear ();
print (itemsInOneLine);
print ("--------------------------------------------------");
return itemsInOneLine;
}
但不幸的是,这不起作用。那么我怎么能从左到右读取所有对象呢?
【问题讨论】:
-
您是否遇到错误或
renderers为空,或者他们没有被添加到列表中? -
更多关于它如何“不起作用”的信息会有所帮助。
-
对不起,我的意思是创建了列表,但所有名称(都是数字)都是按升序添加的。我希望它们按“位置”顺序从左到右添加。
-
你需要对它们进行排序,你可以使用每个对象的
transform.position作为排序的值。 -
@Draco18s 我怎么能意识到?