[英]How to plot a set of points on the ground in Unity3D?
我必须在Unity3D项目中在地面上绘制一组点。 点的2D图类似于此: [1]。
蛮力方法是将gameObjects分配给每个点,但是由于有成千上万的点,因此代价很高。 我正在寻找Unity粒子系统的某些可能用法以实现我的目标。 实际上,任何可能的方法都可以。
我的最终目标是突出地面上的那些点,以指示玩家遵循的路径。
任何建议,将不胜感激。
看一下Unity的LineRenderer组件。 它接受用于绘制线的Vector3数组。 您可以从检查器分配点,或使用代码一次或逐点分配整个阵列。
private LineRenderer lineRenderer;
public void AddPosition(Vector3 position)
{
lineRenderer.positionCount += 1;
lineRenderer.SetPosition(lineRenderer.positionCount - 1, position);
}
public void SetPositions(Vector3[] positionArray)
{
lineRenderer.SetPositions(positionArray);
}
使用线性渲染器,您可以设置各种属性,例如颜色和宽度。 您也可以轻松禁用和启用整个对象。
您可能还考虑过滤点。 人类不需要而且常常不能使用机器可以产生的精度。 过滤器示例:
const float MinDistanceSqr = 0.00001f; // Min Distance of 0.001 (1mm)
const float MaxCosine = 0.999f; // Approx 2.57 degrees
private Vector3[] FilterPoints(Vector3[] source) {
var filtered = new Stack<Vector3>(source.Length);
// Push first point
filtered.Push(source[0]);
for ( var i = 1; i < source.Length; i++ ) {
var step = filtered.Peek() - source[i];
// Check Minimum Distance
if (step.sqrMagnitude < MinDistanceSqr)
continue; // ignore this point
// if not last point
if ( i + 1 < source.Length) {
// Check Minimum Angle to next segment
var nextStep = source[i] - source[i + 1];
if (Vector3.Dot(step, nextStep) > MaxCosine)
continue; // ignore this point
}
// Passed all filters, add to stack
filtered.Push(source[i]);
}
return filtered.ToArray();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.