c# - 删除轨迹渲染器中的点
问题描述
我想知道是否有办法删除跟踪渲染器的最后几个位置/索引。我试图在子弹碰撞后停止轨迹渲染发射,但轨迹渲染器总是产生过多的索引,我想知道是否有办法删除这些索引。
我尝试将新索引的位置设置为与旧索引相等,这在某种程度上有效,但没有达到我想要的程度。
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));
}
}
此代码主要工作,除了某些情况下位置搞砸了。这就是为什么我认为能够删除索引会使这个过程更容易。
解决方案
对于任何仍在寻找这个的人。我遇到了这样的问题,当我在其上使用浮动原点时,我的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 来验证每个位置要好得多,因为我只有最后一个位置有问题。只需根据您的需要进行调整:)
推荐阅读
- java - java默认局部对象变量初始化
- angular - @ngrx/data 与 odata 后端服务器
- python - 如何在通过 Selenium 和 Python 自动化时使用 xpath/css 选择器在 drupal 8 网站中单击动态链接
- electron - 使用 Electron 注册 PouchDB/CouchDB/ 的用户
- vue.js - VueCropper 未正确加载
- javascript - 在 javascript 文件中导入 HTML 页面的脚本 src 标签
- c - 文件和字符串
- javascript - PHP表单同页提交信息
- javascript - 在严格模式下用 Object.keys 替换 Object.values
- c++ - 为什么我的编译器无法计算出这种转换,它何时存在?