オブジェクトのジャンプについて、AddForceを使った場合と、velocityを使った場合、それぞれの動きをみてみましょう。
左クリックを連打するとオブジェクトが浮上。
AddForce(グリーン)は、オブジェクトに力を加えるため、ジャンプのような動きには違和感なく使用できます。
velocity(オレンジ)は、移動する速度を指定する処理(リジッドボディの速度ベクトル)です。
関連記事:
【Unity C#】ボタン連打による急激なジャンプを制御
【Unity C#】ダブルジャンプの仕組み
【Unity C#】クリックした方向へジャンプする
【Unity C#】着地していればジャンプ可能
【Unity C#】キャラクターをジャンプさせるしくみ
【Unity C#】ジャンプした距離を表示する
【Unity C#】ジャンプで壁に触れると引っ付く
【Unity C#】斜めにジャンプする
Addforceとvelocityのジャンプを比較
PlaneとCubeを2つ作成。
Cubeにはリジッドボディを追加します。
Cubeの名前をそれぞれ、Cube_AddForceと、Cube_Velocityに変更します。
Cube_AddForceの座標を変更します。
Cube_Velocityの座標を変更します。
2つのCubeには、わかりやすいようにマテリアルカラーを付けました。
ゲームビューではこのように見えています。
AddForceのほうはグリーン、Velocityのほうはオレンジにしました。
AddFoceJump.csを作成し、Cube_AddForceに追加します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class AddFoceJump : MonoBehaviour { Rigidbody rb; private float upForce; void Start() { upForce = 100; rb = GetComponent<Rigidbody>(); } void Update() { if(Input.GetMouseButtonDown(0)) { rb.AddForce(new Vector3(0,upForce,0 )); } } } |
続いて、VelocityJump.csを作成し、Cube_Velocityに追加します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class VelocityJump : MonoBehaviour { Rigidbody rb; private float jumpSpeed; void Start() { jumpSpeed = 2; rb = GetComponent<Rigidbody>(); } void Update() { if(Input.GetMouseButtonDown(0)) { rb.velocity = new Vector3(rb.velocity.x, jumpSpeed, rb.velocity.z); } } } |
ゲームプレイして、クリックを連打してみましょう。
動きの区別がつきにくいですが、Velocity(オレンジ)のほうはクリックするたびに等速で浮上しているようなイメージで、ジャンプとしては少し不自然です。
一方、AddForce(グリーン)のほうは、連打するたびに上に向けて力が加わり、どちからというと自然に近い挙動です。
関連記事:
【Unity C#】ボタン連打による急激なジャンプを制御
【Unity C#】ダブルジャンプの仕組み
【Unity C#】クリックした方向へジャンプする
【Unity C#】着地していればジャンプ可能
【Unity C#】キャラクターをジャンプさせるしくみ
【Unity C#】ジャンプした距離を表示する
【Unity C#】ジャンプで壁に触れると引っ付く
【Unity C#】斜めにジャンプする