[英]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.