首页 > 解决方案 > 删除轨迹渲染器中的点

问题描述

我想知道是否有办法删除跟踪渲染器的最后几个位置/索引。我试图在子弹碰撞后停止轨迹渲染发射,但轨迹渲染器总是产生过多的索引,我想知道是否有办法删除这些索引。

我尝试将新索引的位置设置为与旧索引相等,这在某种程度上有效,但没有达到我想要的程度。

tR = GetComponent<TrailRenderer>();
int positions = tR.positionCount;

for (int i = 0; i < vertsToDelete; i++) {
    if (positions - 1 - i - (int)vertsToDelete > 0) {
        tR.SetPosition(positions - 1 - i, tR.GetPosition(positions - 1 - i - (int)vertsToDelete));
    }
}

此代码主要工作,除了某些情况下位置搞砸了。这就是为什么我认为能够删除索引会使这个过程更容易。

标签: c#unity3d

解决方案


对于任何仍在寻找这个的人。我遇到了这样的问题,当我在其上使用浮动原点时,我的Trail Renderer正在绘制一些伪影(即使我关闭了发射,它就像关闭时有延迟一样)。

经过 2 周的尝试和搜索,我以最荒谬的方式解决了这个问题:

    //I have this at the beginning os my class:
    //public TrailRenderer trailRenderer;

    //and this declared at start:
    //trailRenderer = trailRenderer.GetComponent<TrailRenderer>();

    int trailSize = trailRenderer.positionCount;
    float distance = Vector3.Distance(trailRenderer.GetPosition(trailSize - 1), (trailRenderer.GetPosition(trailSize - 2)));
    Debug.Log("Distance: " + distance);

    if (distance > 90f)
    {
        trailRenderer.SetPosition(trailSize - 1, trailRenderer.transform.position);
    }

这会验证错误的 Draw(在我的情况下只是最后一点)并将其返回到我的跟踪渲染器转换,防止我的浮动原点可能导致的任何伪影,如果它导致任何. 这比使用 for 来验证每个位置要好得多,因为我只有最后一个位置有问题。只需根据您的需要进行调整:)


推荐阅读