About
Contents
STL
Android
Eigen
enchant.js
Firefox OS
OpenGL
OpenGL ES 2.0
pukiwiki
UE4
Unity
Windows Phone
Xamarin
Materials Link
その他
PR
STL
Android
Eigen
enchant.js
Firefox OS
OpenGL
OpenGL ES 2.0
pukiwiki
UE4
Unity
Windows Phone
Xamarin
以前のリビジョンの文書です
rigidbody.AddForceを使って2段ジャンプを実装します。 2段目のジャンプを1段目と同じ挙動にするためにはrigidbody.velocity を初期化します。
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; } } }
操作するPlayerのGameObjectには当たり判定用にBox Collider、物理属性付加のためRigidBodyコンポーネントを追加しています。 地面となるFloorのGameObjectにはBox Collider コンポーネントのみ追加しています。
3Dとの違いは当たり判定や物理属性付加に、2D用のrigidbody2DとBox Collider2Dを使っている点です。 ジャンプに加える力forceも2D用に調整している点に注目して下さい。
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; } } }