繁体   English   中英

Unity lerp消除差距

[英]Unity lerp remove gaps

我目前正在使用Vector3.Lerp实例化一些对象。 这是可行的,但是这也在对象之间造成了一定的差距。 如果起点和终点之间的距离不足以插入一个新对象,但这种距离足够大以至于它们可以滑动一点,就会发生这种情况。 他们需要端对端地运行,彼此直接对抗。

代码是:

Vector3 startPosition= blah.transform.position.
Vector3 endPosition = getCurrentMousePosition();
Vector3 size = ObjectToSpawn.GetComponent<Renderer>().bounds.size;
fillCount = Mathf.RoundToInt(Vector3.Distance(startPosition, endPosition) / size.z);

float distance = 1.0f / fillCount;
float lerpValue = 0;

for (int i = 0; i < fillCount; i++)
 {
   lerpValue += distance;
   nextPosition = Vector3.Lerp(startPosition, endPosition, lerpValue);
   Instantiate(ObjectToSpawn, nextPosition, Quaternion.identify);
 }

我的一部分认为,仅根据对象的大小/距离尝试连续实例化对象可能是值得的,但是我似乎也不太正确。 尽管此系统还用于其他用途,并且我不希望重写新的代码,但是可以对其进行一些修改以使其正常工作。 我猜想舍入Lerp值可能是可行的方法?

任何意见或建议将不胜感激。

您可以使用阈值。 当它的位置非常接近endPosition时,您可以像这样直接将其夹紧到最终位置:

if(Vector3.Distance(nextPosition,endPosition)<threshold){
  nextPosition = endPosition;
}else{
  nextPosition = Vector3.Lerp(startPosition, endPosition, lerpValue);
}

如果要使对象准确无间隙地接触,则起点和终点之间的距离必须是其大小的整数倍。

尝试在循环之前添加以下行:

endPosition = Vector3.Lerp(startPosition, endPosition, (fillCount * size.z) / Vector3.Distance(startPosition, endPosition));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM