Version: 2023.1
public void AddPositions (Vector3[] positions);
public void AddPositions (out NativeArray<Vector3> positions);
public void AddPositions (out NativeSlice<Vector3> positions);

参数

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); } }