【问题标题】:Delete point in trail Renderer删除轨迹渲染器中的点
【发布时间】:2019-08-13 15:38:48
【问题描述】:

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

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

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

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

【问题讨论】:

  • 你可以减少time属性,它会从尾部移除顶点。

标签: c# unity3d


【解决方案1】:

对于仍在搜索此内容的任何人。 我遇到了这样的问题,当我在其上使用 Floating Origin 时,我的 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);
    }

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

【讨论】:

    【解决方案2】:

    使用单个GetPositions 调用更有效,操作数组并使用单个AddPositions 调用将其完全写回。

    为了交替数组,您可以浏览一个列表,该列表允许更轻松地动态更改元素的数量。

    首先使用Linq IEnumerable.ToList()将数组转换为列表

    var positions = new Vector3[tr.positionCount];
    tr.GetPositions(positions);
    var positionsList = positions.ToList();
    

    然后使用List&lt;T&gt;.RemoveAt(int index)按索引删除元素

    positionsList.RemoveAt(indexToRemove);
    

    或使用List&lt;T&gt;.RemoveRange(int startIndex, int amount)删除多个顺序元素

    positionsList.RemoveRange(startIndex, amountToRemove);
    

    最后使用List&lt;T&gt;.ToArray()将其转换回所需的数组

    tR.Clear();
    tR.AddPositions(positionsList.ToArray());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-16
      • 2014-09-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多