unity3d 如何将TrailRenderer的空间更改为LocalSpace

jogvjijk  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(165)

如何创建本地空间TrailRenderer

我想让TrailRenderer使用局部空间。因为我在我的玩家的剑效果中使用TrailRenderer就像那个图像一样。

当播放器停在原地时,没有问题。但是当播放器移动时,TrailRender也移动。所以TrailRenderer的形状就像那个Image一样奇怪。

我尝试了TrailRenderer的所有Z位置设置0,但失败了。
如何解决这个问题?

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Trail : MonoBehaviour
{
    [SerializeField]
    private Transform _trailPos;
    TrailRenderer _renderer;

    [SerializeField] 
    private Vector3[] _t;

    private void Start()
    {
        _renderer = GetComponent<TrailRenderer>();
    }

    private void LateUpdate()
    {
        transform.position = _trailPos.position;
        for (int i = 0; i < _renderer.positionCount; ++i)
        {
            Vector3[] v = new Vector3[_renderer.positionCount];
            _renderer.GetPositions(v);
            for (int j = 0; j < v.Length; ++j)
            {
                v[j] = (Vector2)v[j];
            }
            _renderer.SetPositions(v);

        }
        _t = new Vector3[_renderer.positionCount];
        _renderer.GetPositions(_t);
    }
}
lg40wkob

lg40wkob1#

你也许可以试着跟踪你的球员的移动,并将相同的增量应用到踪迹位置。
比如

[SerializeField] private TrailRenderer trailRenderer;
[SerializeField] private Transform player;

private Vector3 lastFramePosition;

private void Start()
{
    lastFramePosition = player.position;
}

private void LateUpdate()
{
    var delta = player.position - lastFramePosition;
    lastFramePosition = player.position;

    var positions = new Vector3[trailRenderer.positionCount];
    trailRenderer.GetPositions(positions);

    for (var i = 0; i < trailRenderer.positionCount; i++)
    {
        positions[i] += delta;
    }

    trailRenderer.SetPositions(positions);
}

相关问题