簡體   English   中英

刪除軌跡渲染器中的點

[英]Delete point in trail Renderer

我想知道是否有辦法刪除尾跡渲染器的最后幾個位置/索引。 我試圖在子彈碰撞后停止軌跡渲染發射,但軌跡渲染器總是產生過多的索引,我想知道是否有辦法刪除這些索引。

我嘗試將較新索引的位置設置為與舊索引相等,這在一定程度上起作用,但沒有達到我想要的程度。

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

除了位置搞砸的某些情況外,此代碼主要工作。 這就是為什么我認為能夠刪除索引會使這個過程更容易。

對於仍在尋找此內容的任何人。 我遇到了這樣的問題,當我使用Floating Origin時,我的Trail Renderer正在繪制一些工件(即使我關閉了發射,它就像關閉時有延遲一樣)。

經過兩周的嘗試和搜索,我以最荒謬的方式解決了這個問題:

    //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 驗證每個位置要好得多,因為我只有最后一個有問題。 只需根據您的需求進行調整即可:)

使用單個GetPositions調用,操作數組並使用單個AddPositions調用將其完全寫回更為有效。

為了替換數組,您可以查看一個列表,該列表允許更輕松地動態更改元素數量。

首先使用Linq IEnumerable.ToList()將數組轉換為列表

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

然后使用List<T>.RemoveAt(int index)按索引刪除元素

positionsList.RemoveAt(indexToRemove);

或使用List<T>.RemoveRange(int startIndex, int amount)刪除多個順序元素

positionsList.RemoveRange(startIndex, amountToRemove);

最后使用List<T>.ToArray()將其轉換回所需的數組

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM