TrailRenderer.AddPositions
Declaration
public void AddPositions(Vector3[] positions);public void AddPositions(out NativeArray<Vector3> positions);public void AddPositions(out NativeSlice<Vector3> positions);Параметры
| Параметр | Описание |
|---|---|
| должностей | Позиции, которые нужно добавить в след. |
Описание
Добавить массив позиций в след.
Все точки внутри TrailRenderer хранят метку времени, когда они рождаются. Это, вместе со свойством TrailRenderer.time, используется для определения того, когда они будут удалены. Для того, чтобы следы исчезали плавно, каждая позиция должна иметь уникальную, возрастающую метку времени. Когда позиции предоставляются из скрипта и текущее время идентично для нескольких точек, метки времени позиций корректируются для плавной интерполяции между меткой времени самой новой существующей точки в следе и текущим временем.
using UnityEngine; using System.Collections; using System.Collections.Generic;
[RequireComponent(typeof(TrailRenderer))] public class ExampleClass : MonoBehaviour { public int numExtraPositions = 0; public float speed = 20.0f; public float radius = 4.0f;
private TrailRenderer tr;
void Start() { tr = GetComponent<TrailRenderer>(); tr.material = new Material(Shader.Find("Sprites/Default")); tr.time = 0.2f; tr.widthMultiplier = 0.3f; }
void Update() { float time = Time.time; tr.transform.position = CalculatePosition(time);
if (numExtraPositions > 0) { float prevTime = time - Time.deltaTime; List<Vector3> extraPositions = new List<Vector3>(numExtraPositions);
for (int i = 0; i < numExtraPositions; i++) { float percentage = (float)(i + 1) / (numExtraPositions + 1); float blendedTime = Mathf.LerpUnclamped(prevTime, time, percentage); extraPositions.Add(CalculatePosition(blendedTime)); }
tr.AddPositions(extraPositions.ToArray()); } }
void OnGUI() { GUI.Label(new Rect(25, 20, 200, 30), "Extra Positions"); numExtraPositions = (int)GUI.HorizontalSlider(new Rect(165, 25, 200, 30), (float)numExtraPositions, 0, 5); }
private Vector3 CalculatePosition(float time) { return new Vector3(Mathf.Sin(time * speed) * radius, Mathf.Cos(time * speed) * radius, 0.0f); } }