因為移動的起點和終點都是不確定,所以這里用代碼進行實現(xiàn)而不是動畫(試過動畫,但是發(fā)現(xiàn)無法成功添加clip)
物體移動常用的有兩個方法,一個是Mathf.MoveTowards,一個是Mathf.Lerp,他們都用于值的平滑過渡
- Mathf.MoveTowards?
MoveTowards(float current, float target, float maxDelta);
????????current:起點位置
????????target:目標位置
????????maxDelta:每一幀變化的量
????????Mathf.MoveTowards:這個函數以固定的步長從當前值逐漸移向目標值。它提供了每幀最大的變化量,確保過渡是平滑的,但速度是固定的
- Mathf.Lerp
Lerp(float a, float b, float t);
????????a:起點位置
? ? ? ? b:目標位置
? ? ? ? t:插值參數,取值范圍為0到1,表示要從a過渡到b的進度。
????????Mathf.Lerp:這個函數通過根據插值系數在兩個值之間進行線性插值來實現(xiàn)平滑過渡。它接受一個范圍在0到1之間的插值參數,可以通過調整該參數來控制過渡速度和效果
- MoveToward和Lerp的區(qū)別
????????Mathf.MoveTowards:適用于需要按照固定速度進行平滑移動的場景,例如物體的平移、旋轉或縮放等。
????????Mathf.Lerp:適用于需要根據插值系數進行平滑過渡的場景,例如顏色的漸變、淡入淡出效果、相機的平滑跟隨等。
注意:不論是MoveToward還是Lerp,每次運行只會讓值變化一次,要讓物體實現(xiàn)平滑移動,需要將MoveToward和Lerp方法放進while循環(huán)語句中
while (elapsedTime < moveDuration)
{
// 使用插值方法計算當前位置
float t = elapsedTime / moveDuration;
Vector3 newPosition = Vector3.Lerp(initialPosition, targetPosition, t);
// 更新物體的位置
transform.position = newPosition;
// 等待一幀
yield return null;
// 更新已經經過的時間
elapsedTime += Time.deltaTime;
}
這里是用時間條件來限制,在持續(xù)時間內移動物體,速度會隨著路程的變長而加快,因為Lerp的插值參數是移動百分比,這樣物體就能平滑的移動了
- 擴展
????????在unity中可以用Vector3.MoveTowards和Vector3.Lerp來實現(xiàn)物體的位移,這比用Mathf更加的方便,他是一個三維坐標的點對點移動,同時包含了xyz坐標的信息,如果是二維情況下可以用Vector2來代替
由于本人需要物體實現(xiàn)「這種轉向一次的移動,所以需要添加中間點,這里如果是用Mathf的方法,代碼就要復雜多了文章來源:http://www.zghlxwxcb.cn/news/detail-729477.html
Vector3 targetPosition1 = new Vector3(targetPosition2.x, startPosition.y, 0);
while (obj.transform.position != targetPosition1)//當前位置等于目標位置是跳出循環(huán)
{
float t = elapsedTime / moveDuration;
Vector3 newPosition = Vector3.Lerp(startPosition, targetPosition1, t);
obj.transform.position = newPosition;//新的位置要賦值給物體
// 等待一幀
yield return null;
elapsedTime += Time.deltaTime;
if(elapsedTime > 5f)
{
Debug.Log("移動物體進入死循環(huán)");
break;
}
}
這里還用了協(xié)程實現(xiàn)了每次移動后等待一幀的操作,最后的if語句是為了防止進入死循環(huán),至此,一個讓物體移動的功能就實現(xiàn)了文章來源地址http://www.zghlxwxcb.cn/news/detail-729477.html
到了這里,關于Unity之用代碼移動物體(平滑移動)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!