Unity 物體移動的三種方式

2021-08-21 20:34:45 字數 2074 閱讀 3468

在unity3d中,有多種方式可以改變物體的座標,實現移動的目的,其本質是每幀修改物體的position。

通過transform元件移動物體

transform 元件用於描述物體在空間中的狀態,它包括 位置(position), 旋轉(rotation)和 縮放(scale)。 其實所有的移動都會導致position的改變,這裡所說的通過transform元件來移動物體,指的是直接操作transform來控制物體的位置(position)。

1.1 transform.translate

該方法可以將物體從當前位置,移動到指定位置,並且可以選擇參照的座標系。 當需要進行座標系轉換時,可以考慮使用該方法以省去轉換座標系的步驟。

public function translate(translation: vector3, relativeto: space = space.self): void;
transform.translate(vector3.forward time.deltatime*speed);//speed 代表速度,朝著forward(朝向)以speed的速度移動。*

transform.translate(vector3.up time.deltatime*speed, space.world);

移動被應用相對於變換的自身軸。(當在場景檢視選擇物體時,x、y和z軸顯示)如果相對於space.world 移動被應用相對於世界座標系統。*

文件–-傳送門

1.2 vector3.lerp, vector3.slerp, vector3.movetowards

vector3 既可以表示三維空間中的乙個點,也可以表示乙個向量。這三個方法均為插值方法, lerp為線性插值,slerp為球形插值, movetowards在lerp的基礎上增加了限制最大速度功能。 當需要從指定a點移動到b點時,可以考慮時候這些方法。

1.3 vector3.smoothdamp

該方法是可以平滑的從a逐漸移動到b點,並且可以控制速度,最常見的用法是相機跟隨目標。

1.4 transform.position

有時重新賦值position能更快實現我們的目標。

通過rigidbody元件移動物體

rigidbody元件用於模擬物體的物理狀態,比如物體受重力影響,物體被碰撞後的擊飛等等。 注意:關於rigidbody的呼叫均應放在fixedupdate方法中,該方法會在每一次執行物理模擬前被呼叫。

2.1 rigidbody.velocity

設定剛體速度可以讓物體運動並且忽略靜摩擦力,這會讓物體快速從靜止狀態進入運動狀態。在大多數情況下,你不應該直接修改速度,因為這會導致不真實的行為。不要設定每物件物理步的速度,這將導致不真實的物理模擬。乙個典型的例子,當你在第一人稱射擊遊戲中當跳躍的時候改變速度,因為你想立即改變速度。

2.2 rigidbody.addforce

給剛體新增乙個方向的力,這種方式適合模擬物體在外力的作用下的運動狀態。

2.3 rigidbody.moveposition

剛體受到物理約束的情況下,移動到指定點。

通過charactercontroller元件移動物體

charactercontroller用於控制第一人稱或第三人稱角色的運動,使用這種方式可以模擬人的一些行為,比如限制角色爬坡的最大斜度,步伐的高度等。y 軸上速度被忽略。速度以公尺/秒為單位。重力被自動應用。返回如果角色著地。建議你每幀只呼叫一次move或者******move。

3.1 charactercontroller.******move

用於模擬簡單運動,並且自動應用重力,返回值表示角色當前是否著地。

3.2 charactercontroller.move

模擬更複雜的運動,重力需要通過**實現,返回值表示角色與周圍的碰撞資訊。

unity的三種物體移動方法

1.帶有rigidbody元件的物體移動一般採用 getcomponent velocity 如 float h input.getaxis horizontal float v input.getaxis vertical if input.getbuttondown jump vel jump ...

unity的三種移動方式

第一種移動方式 首先在方法外宣告剛體 private rigidbody body 為了明顯,可定義乙個速度 public float speed void start void update if input.getkey keycode.s if input.getkey keycode.a i...

物體移動 三種方法

api transform.translate 直接對物體座標進行操作 api 3d rigidbody.velocity new vector3 speed.x,speed.y,speed.z 2d rigidbody.velocity new vector2 speed.x,speed.y 對剛...