Unityを使った2Dアクションゲームにおいて、ジャンプアクションは欠かせない要素です。本記事では、ジャンプの基本実装から、長押しでジャンプの高さを変える仕組み、アニメーションの設定方法までを詳しく解説します。初心者でも分かりやすいコード例を交えながら進めていきますので、一緒に挑戦してみましょう!
ジャンプアクションの基本とは
ジャンプアクションは、ゲームの操作感やプレイ体験に大きな影響を与えます。たとえば、マリオのような軽快で気持ちいいジャンプは、単にプレイヤーを上に動かすだけでなく、高さや滞空時間、操作性など複数の要素が絡み合っています。
- ジャンプの基本要素
- ジャンプの高さ
- 重力の適用
- 着地判定
これらを正確に実装することで、プレイヤーに満足感を与えるアクションが完成します。
Unityでジャンプアクションを実装する手順
まずは基本的なジャンプ機能を実装しましょう。
スクリプト:基本的なジャンプ
以下のコードをキャラクターにアタッチします。
using UnityEngine; public class PlayerJump : MonoBehaviour {
public float jumpForce = 5f; private Rigidbody2D rb;
private bool isGrounded; void Start() { rb = GetComponent
- Rigidbody2Dを使って物理演算を処理。
isGrounded
で地面との接触を判定。- スペースキーでジャンプ動作を実行。
気持ちいいジャンプを作るためのポイント
ジャンプの基本ができたら、さらに工夫してゲーム性を高めましょう。
長押しで高さを変える
長押しでジャンプの高さを調整する方法を紹介します。
using UnityEngine;
public class VariableJump : MonoBehaviour { public float jumpForce = 5f;
public float maxHoldTime = 0.5f;
private Rigidbody2D rb;
private bool isJumping;
private float jumpTimer;
void Start() { rb = GetComponent();
}
void Update() { if (Input.GetKeyDown(KeyCode.Space)) { isJumping = true;
jumpTimer = 0;
rb.velocity = new Vector2(rb.velocity.x, jumpForce);
}
if (Input.GetKey(KeyCode.Space) && isJumping) { jumpTimer += Time.deltaTime;
if (jumpTimer < maxHoldTime) { rb.velocity = new Vector2(rb.velocity.x, jumpForce);
}
}
if (Input.GetKeyUp(KeyCode.Space)) { isJumping = false;
}
}
}
ジャンプ中に横移動を可能にすると、より滑らかな動きが実現します。
ジャンプアニメーションの実装と設定
次に、ジャンプアニメーションを設定します。
-
アニメーションの準備
- Animatorで「Idle」「Jump」「Fall」の状態を作成。
- トリガー「isJumping」「isFalling」を設定。
-
スクリプトでアニメーションを切り替え
using UnityEngine;
public class VariableJump : MonoBehaviour {
public float jumpForce = 5f;
public float maxHoldTime = 0.5f;
private Rigidbody2D rb;
private bool isJumping;
private float jumpTimer;
void Start() {
rb = GetComponent();
}
void Update() {
if (Input.GetKeyDown(KeyCode.Space)) {
isJumping = true;
jumpTimer = 0;
rb.velocity = new Vector2(rb.velocity.x, jumpForce);
}
if (Input.GetKey(KeyCode.Space) && isJumping) {
jumpTimer += Time.deltaTime;
if (jumpTimer < maxHoldTime) {
rb.velocity = new Vector2(rb.velocity.x, jumpForce);
}
}
if (Input.GetKeyUp(KeyCode.Space)) {
isJumping = false;
}
}
}
ジャンプが動作しない
- 解決策: Rigidbody2Dの設定やGroundタグを再確認。
空中で何度もジャンプしてしまう
- 解決策:
isGrounded
フラグを正確に管理。
Unity入門の森で学ぶ次のステップ
Unity入門の森の「Unity 2Dアクションの作り方」では、さらに応用的なスキルを学べます。ジャンプアクション以外の実装も詳しく解説されており、あなたのスキルアップに最適です。
まとめ
- マリオ風ジャンプの基本と応用を学びました。
- 長押しやアニメーションの工夫で、操作性の良いジャンプが実現できます。
- 次は、応用スキルを学んで独自のゲームを作りましょう!