Unityオブジェクトの移動方法の詳細



Unity Object Moving Method Detailed



1.移動する最も一般的な方法

1.transform.Translate(指定された位置、参照座標系を指定します(デフォルトはSpace.Self))
Transformは厳密には移動とは呼ばれず、オブジェクトの座標を直接変更すると思います。

2.剛体

1.MovePosition()



2.リジッドボディの速度ボリックを指定します
オブジェクトに静摩擦を無視させ、停止状態からすばやくモーション状態に入ります。

3.AddForce()
オブジェクトに方向性のある力を追加します。



3.ロールコントローラー

1.SimpleMove()
重力をシミュレートし、戻り値は現在のキャラクターが着陸しているかどうかを示します。

2.Move()
重力をシミュレートせず、戻り値は周囲のキャラクターの衝突情報を表します。

4.スムージング

1. Lerp()-線形補間(Vector2.Lerp、Vector3.Lerp、Mathf.Lerp、Quaternion.Lerp、Color.Lerp、Material.Lerp)

Mathfでは、Lerp関数はそのようなLerp(float a、float b、float t)です。
aは、tが[0,1]の値であり、tの値がaとbの間の位置を表し、tがaを返し、t = 1がbを返すことです。

Lerpがどのように実装されているかを最初に見てみましょう。

Clamp01関数を使用してtの範囲を制限してから、計算式a +(b-a)* tを使用して到着位置を計算します。



たとえば、次の例:
Time.time = 0の場合、式は2 +(10-2)* 0 = 2です。
Time.time = 0.1の場合、ネストされた式は2 +(10-2)* 0.1 = 2.8です。
Time.time = 0.2の場合、入れ子式は2 +(10-2)* 0.2 = 2です。

2.SmoothDamp()-スムーズダンピング(Vector2.SmoothDamp、Vector3.SmoothDamp、Mathf.SmoothDamp)
Dampは、それが減衰運動であることがわかっているため、抵抗によって減速します。抵抗はますます遅くなります。

Vector3.SmoothDamp(float current、float target、ref float currentVelocity、float SmoothTime、float maxSpeed)
currentは現在の位置、targetはターゲット位置、currentVelocityは現在の速度です(グローバル変数である必要があります)、smoothTimeは目標位置に到達する時間、maxSpeedは最大速度です(デフォルトは無限大です)。

SmoothDampがどのように実装されているかを最初に見てみましょう。
Lerpほど単純ではないため、内部パラメーターが何度も調整されているため、効果がよりスムーズになります。 多くの場合、カメラのフォローアップ操作に使用されます。


パフォーマンスはLerpよりもはるかに優れています。

3.Slerp()-球面補間(Vector3.Slerp、Quaternion.Slerp)

5.スペシャル

1.Mathf.PingPong(float t、float length)-ピンポン
[t、length]の値を返します。 tは変動する値です。
長さが0の場合、NaN(数値ではない)エラーが報告されます。

2.Math.MoveTowards(float from、float to、float maxDelta)
maxDeltaを超えることはありません。

3.3。 Math.Repeat(float t、float length)
[t、長さ)の値を返します。ここで、tは可変値です。