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