tolerance | 此值用于计算应从线中删除的点。值越高,生成的线越简单(点越少)。接近于零的正值会生成几乎没什么缩减的线。零或更小的值不起作用。 |
通过删除处于指定公差内的点来生成原始线的简化版本。
使用 LineUtility.Simplify 可执行线简化。
此示例说明如何简化现有线:
using UnityEngine;
// This example shows how to apply line simplification to a line that already contains points. [RequireComponent(typeof(LineRenderer))] public class SimpleExampleLineRenderer : MonoBehaviour { public float tolerance = 1; void Start() { var lineRenderer = GetComponent<LineRenderer>(); int pointsBefore = lineRenderer.positionCount; lineRenderer.Simplify(tolerance); Debug.Log("Line reduced from " + pointsBefore + " to " + lineRenderer.positionCount); } }
**此示例生成正弦波形的线,并提供一个 GUI 用于自定义线生成和简化参数。**
using System.Collections.Generic; using UnityEngine;
// This example creates a sine wave and then simplifies it using LineRenderer.Simplify. // The parameters can be adjusted through an in game GUI to allow for experimentation. [RequireComponent(typeof(LineRenderer))] public class LineRendererExample : MonoBehaviour { public int numberOfPoints = 1000; public float length = 50; public float waveHeight = 10; public float tolerance = 0.1f;
private LineRenderer lineRenderer; private List<Vector3> points = new List<Vector3>(); // Generated points before Simplify is used.
public void Start() { lineRenderer = GetComponent<LineRenderer>(); GeneratePoints(); }
// Generates the sine wave points. public void GeneratePoints() { points.Clear(); float halfWaveHeight = waveHeight * 0.5f; float step = length / numberOfPoints; for (int i = 0; i < numberOfPoints; ++i) { points.Add(new Vector3(i * step, Mathf.Sin(i * step) * halfWaveHeight, 0)); } lineRenderer.SetPositions(points.ToArray()); }
// Draw a simple GUI slider with a label. private static float GUISlider(string label, float value, float min, float max) { GUILayout.BeginHorizontal(GUILayout.Width(Screen.width / 2.0f)); GUILayout.Label(label + "(" + value + ") :", GUILayout.Width(150)); var val = GUILayout.HorizontalSlider(value, min, max); GUILayout.EndHorizontal(); return val; }
public void OnGUI() { GUILayout.Label("LineRenderer.Simplify", GUI.skin.box);
// We use GUI.changed to detect if a value was changed via the GUI, if it has we can then re-generate the points and simplify the line again. GUI.changed = false;
numberOfPoints = (int)GUISlider("Number of Points", numberOfPoints, 0, 1000); length = GUISlider("Length", length, 0, 100); waveHeight = GUISlider("Wave Height", waveHeight, 0, 100); if (GUI.changed) GeneratePoints();
tolerance = GUISlider("Simplify Tolerance", tolerance, 0, 2); if (GUI.changed) lineRenderer.Simplify(tolerance);
float percentRemoved = 100.0f - ((float)lineRenderer.positionCount / numberOfPoints) * 100.0f; if (tolerance > 0.0f) GUILayout.Label("Points after simplification: " + lineRenderer.positionCount + "(Removed " + percentRemoved.ToString("##.##") + "%)"); } }
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.