この文書の現在のバージョンと選択したバージョンの差分を表示します。
| 次のリビジョン | 前のリビジョン | ||
|
wiki:unity:tips:069 [2014/11/13 09:02] 127.0.0.1 外部編集 |
— (現在) | ||
|---|---|---|---|
| ライン 1: | ライン 1: | ||
| - | ====== 069 2段ジャンプを実装する(AddForceを使った場合) ====== | ||
| - | |||
| - | ===== 概要 ===== | ||
| - | rigidbody.AddForceを使って2段ジャンプを実装します。 | ||
| - | 2段目のジャンプを1段目と同じ挙動にするためにはrigidbody.velocity を初期化します。 | ||
| - | |||
| - | ==== 3Dの場合 ==== | ||
| - | <code csharp> | ||
| - | using UnityEngine; | ||
| - | using System.Collections; | ||
| - | |||
| - | public class Player : MonoBehaviour | ||
| - | { | ||
| - | public const int MAX_JUMP_COUNT = 2; // ジャンプできる回数。 | ||
| - | public float force = 5.0f; | ||
| - | |||
| - | private int jumpCount = 0; | ||
| - | private bool isJump = false; | ||
| - | |||
| - | void Update() | ||
| - | { | ||
| - | // クリックでジャンプ。 | ||
| - | if( jumpCount < MAX_JUMP_COUNT && Input.GetMouseButtonDown(0) ) | ||
| - | { | ||
| - | isJump = true; | ||
| - | } | ||
| - | } | ||
| - | |||
| - | void FixedUpdate() | ||
| - | { | ||
| - | if( isJump ) | ||
| - | { | ||
| - | // 速度をクリアして2回目のジャンプも1回目と同じ挙動にする。 | ||
| - | rigidbody.velocity = Vector3.zero; | ||
| - | |||
| - | // ジャンプさせる。 | ||
| - | rigidbody.AddForce( Vector3.up * force, ForceMode.Impulse ); | ||
| - | |||
| - | // ジャンプ回数をカウント。 | ||
| - | jumpCount++; | ||
| - | |||
| - | // ジャンプを許可する。 | ||
| - | isJump = false; | ||
| - | } | ||
| - | } | ||
| - | |||
| - | private void OnCollisionEnter( Collision collision ) | ||
| - | { | ||
| - | // 地面との当たり。 | ||
| - | if (collision.gameObject.name == "Floor") | ||
| - | { | ||
| - | jumpCount = 0; | ||
| - | } | ||
| - | } | ||
| - | } | ||
| - | </code> | ||
| - | |||
| - | |||
| - | 操作するPlayerのGameObjectには当たり判定用にBox Collider、物理属性付加のためRigidBodyコンポーネントを追加しています。 | ||
| - | 地面となるFloorのGameObjectにはBox Collider コンポーネントのみ追加しています。 | ||
| - | |||
| - | ==== 2Dの場合 ==== | ||
| - | 3Dとの違いは当たり判定や物理属性付加に、2D用のrigidbody2DとBox Collider2Dを使っている点です。 | ||
| - | ジャンプに加える力forceも2D用に調整している点に注目して下さい。 | ||
| - | |||
| - | <code csharp> | ||
| - | using UnityEngine; | ||
| - | using System.Collections; | ||
| - | |||
| - | public class Player : MonoBehaviour | ||
| - | { | ||
| - | private const int MAX_JUMP_COUNT = 2; // ジャンプできる回数。 | ||
| - | private float force = 250.0f; | ||
| - | |||
| - | private int jumpCount = 0; | ||
| - | private bool isJump = false; | ||
| - | |||
| - | void Update() | ||
| - | { | ||
| - | // クリックでジャンプ。 | ||
| - | if( jumpCount < MAX_JUMP_COUNT && Input.GetMouseButtonDown(0) ) | ||
| - | { | ||
| - | isJump = true; | ||
| - | } | ||
| - | } | ||
| - | |||
| - | void FixedUpdate() | ||
| - | { | ||
| - | if( isJump ) | ||
| - | { | ||
| - | // 速度をクリアした2回目のジャンプも1回目と同じ挙動にする。 | ||
| - | rigidbody2D.velocity = Vector2.zero; | ||
| - | |||
| - | // ジャンプさせる。 | ||
| - | rigidbody2D.AddForce( Vector2.up * force ); | ||
| - | |||
| - | // ジャンプ回数をカウント。 | ||
| - | jumpCount++; | ||
| - | |||
| - | // ジャンプを許可する。 | ||
| - | isJump = false; | ||
| - | } | ||
| - | } | ||
| - | |||
| - | private void OnCollisionEnter2D( Collision2D collision ) | ||
| - | { | ||
| - | if (collision.gameObject.name == "Floor") | ||
| - | { | ||
| - | jumpCount = 0; | ||
| - | } | ||
| - | } | ||
| - | } | ||
| - | </code> | ||
| - | |||