簡體   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