この文書の現在のバージョンと選択したバージョンの差分を表示します。
次のリビジョン | 前のリビジョン | ||
wiki:unity:tips:069 [2014/11/13 09:02] 127.0.0.1 外部編集 |
wiki:unity:tips:069 [2015/02/23 12:45] (現在) |
||
---|---|---|---|
ライン 1: | ライン 1: | ||
- | ====== 069 2段ジャンプを実装する(AddForceを使った場合) ====== | + | [[http://stepism.sakura.ne.jp/unity/wiki/|Unityはこちらに移動しました。]] |
- | + | ||
- | ===== 概要 ===== | + | |
- | 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> | + | |
- | + |