Unity lerp消除了差距

时间:2017-08-19 15:28:44

标签: c# unity3d lerp

我目前正在使用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值,可能吗?

非常感谢任何意见或建议。

2 个答案:

答案 0 :(得分:1)

您可以使用阈值。当它的位置非常靠近endPosition时,你可以直接将它夹紧到endposition:

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

答案 1 :(得分:1)

如果您希望对象完全接触而没有间隙,则起始位置和结束位置之间的距离必须是其大小的整数倍。

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

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