unity中讓一個(gè)對(duì)象沿著一個(gè)軸來(lái)回移動(dòng)
用 Transform.Translate
和 Mathf.Lerp
就能實(shí)現(xiàn)一個(gè)對(duì)象來(lái)回上下擺動(dòng)。首先,要確定移動(dòng)的方向和距離,可以通過(guò)設(shè)定一個(gè) Vector2 向量來(lái)實(shí)現(xiàn)。然后,通過(guò)插值計(jì)算當(dāng)前位置和目標(biāo)位置之間的距離,得到一個(gè)平滑的移動(dòng)效果。最后,用 Transform.Translate
函數(shù)就能實(shí)現(xiàn)移動(dòng)。
這種方法的好處是能夠?qū)崿F(xiàn)平滑的移動(dòng)效果,而且也可以通過(guò)調(diào)整目標(biāo)位置和插值計(jì)算的速度來(lái)控制移動(dòng)的速度。如果需要在移動(dòng)過(guò)程中進(jìn)行一些特殊的處理,比如旋轉(zhuǎn)或縮放,也可以很容易地實(shí)現(xiàn)。
下面是一個(gè)實(shí)現(xiàn)的例子,其中對(duì)象會(huì)來(lái)回在 X 軸上擺動(dòng)。你可以根據(jù)自己的需要進(jìn)行修改和擴(kuò)展。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MoveSelf : MonoBehaviour {
? ?[Header("移動(dòng)速度")]
? ?public float MoveSpeed = 0.25f;
? ?[Header("移動(dòng)距離")]
? ?public Vector3 MoveDistance = new Vector3(2f, 0f, 0f);
? ?private Vector3 startPos;
? ?private Vector3 targetPos;
? ?void Start() {
? ? ? ?startPos = transform.position;
? ? ? ?targetPos = startPos + MoveDistance;
? ?}
? ?void FixedUpdate() {
? ? ? ?transform.position = Vector3.Lerp(startPos, targetPos, Mathf.PingPong(Time.time * MoveSpeed, 1));
? ?}
}
在這個(gè)例子里,我們需要讓一個(gè)東西來(lái)回晃動(dòng)。首先,我們算出起始位置和目標(biāo)位置。然后,在Update函數(shù)里,我們用Mathf.PingPong和Vector2.Lerp函數(shù)來(lái)實(shí)現(xiàn)沿著x和y軸來(lái)回晃動(dòng)。當(dāng)東西到達(dá)目標(biāo)位置時(shí),我們交換起始位置和目標(biāo)位置,這樣?xùn)|西就可以往相反的方向晃動(dòng)。
除此之外,我們還可以添加一些額外的功能,比如讓東西晃動(dòng)時(shí)發(fā)出聲音,或者讓它在不同位置上顯示不同顏色。我們還可以在東西到達(dá)特定位置時(shí)觸發(fā)其他事件,比如播放動(dòng)畫(huà)或音效。而且,我們可以通過(guò)調(diào)整晃動(dòng)的速度和距離來(lái)使東西晃動(dòng)得更順暢或更卡。
總之,雖然我們已經(jīng)實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的東西晃動(dòng)的功能,但是我們可以通過(guò)添加更多功能來(lái)讓它更復(fù)雜和有趣。