オブジェクトのジャンプについて、AddForceを使った場合と、velocityを使った場合、それぞれの動きをみてみましょう。
左クリックを連打するとオブジェクトが浮上。
AddForce(グリーン)は、オブジェクトに力を加えるため、ジャンプのような動きには違和感なく使用できます。
velocity(オレンジ)は、移動する速度を指定する処理(リジッドボディの速度ベクトル)です。
関連記事:
ボタン連打による急激なジャンプを制御
ダブルジャンプの仕組み
クリックした方向へジャンプする
着地していればジャンプ可能
着地していればジャンプ可能(Raycast)
キャラクターをジャンプさせるしくみ
ジャンプした距離を表示する
ジャンプで壁に触れると引っ付く
斜めにジャンプする
キーを押していれば浮上、離せば落下
バウンドの高さをスクリプトから調整
触れている相手に一定間隔で力を加える
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(グリーン)のほうは、連打するたびに上に向けて力が加わり、どちからというと自然に近い挙動です。
関連記事:
ボタン連打による急激なジャンプを制御
ダブルジャンプの仕組み
クリックした方向へジャンプする
着地していればジャンプ可能
キャラクターをジャンプさせるしくみ
ジャンプした距離を表示する
ジャンプで壁に触れると引っ付く
斜めにジャンプする
キーを押していれば浮上、離せば落下
バウンドの高さをスクリプトから調整
触れている相手に一定間隔で力を加える