我必须在Unity3D项目的地面上绘制一组点。点的2D图类似于此: [1]。
蛮力方法是将游戏对象分配给每个点,但是由于有成千上万个点,所以代价很高。我正在寻找Unity粒子系统的某些可能用法以实现我的目标。实际上,任何可能的方法都可以。
我的最终目标是突出地面上的那些点,以指示玩家遵循的路径。
任何建议将不胜感激。
答案 0 :(得分:1)
看看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);
}
使用线性渲染器,您可以设置各种属性,例如颜色和宽度。您还可以轻松禁用和启用整个对象。
答案 1 :(得分:0)
You might also consider filtering your points. Humans don't need and often can't use the precision that machines can generate. An example filter:
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();
}