衝突判定範囲の修正
キャラクターのジャンプを試していると、キャラクターが床に触れていないのにもかかわらず、何かにぶつかっているかのように移動できなくなったり。床が切れているの宙に浮いているようにキャラクターが落下しない現象が確認できます。
これはキャラクターの衝突判定範囲が想定以上に広いために意図しない動きをしてしまっているためです。
衝突判定範囲の確認
キャラクターの衝突判定範囲はHierarchyウィンドウでキャラクター確認した状態でSceneウィンドウで確認できます。
キャラクターの周囲に見える緑色の枠が衝突判定の範囲です。
キャラクターをはみ出てかなり広範囲に設定されているのが分かります。
衝突判定範囲の修正
衝突判定範囲はInspectorウィンドウのBox Collider 2DのSizeを変更することで修正することができます。
SizeのXの値を1に変更します。
Sceneウィンドウの衝突判定範囲(緑色の枠)が以下のように変更されました。
移動速度やジャンプ速度などの調整
ジャンプをした際のキャラクターの動きがフワッと移動してゲームとしてはちょっともっさりした感じがします。
キャラクターがすばやく動くように重力のかかり方やキャラクターの重さを変更することで調整します。
重力の修正
重力やキャラクターの重さを変更するにはInspectorウィンドウのRigidbody 2Dを変更します。
キャラクターが重力の影響を強く受けるようにキャラクターの重さ(Mass)を0.5に、重力の強さ(Gravity Scale)を4に変更します。
キャラクターに加わる力の修正
プログラムを修正してキャラクター操作時に加わる力も調整します。GameManager.csのUpdateメソッドを以下のように修正します。
// 左右の移動にかかる力 private float _horizontalForce = 15f; // ジャンプ時にかかる力 private float _upForce = 800f; // Update is called once per frame void Update () { // 左右のキーで左右に移動 float horizontal = Input.GetAxis("Horizontal"); // キー入力がありジャンプ中でない場合は左右に移動 if (horizontal != 0.0f && this._charactorScript.isJumping == false) { this._moveCharactor(Vector2.right * _horizontalForce * horizontal); } // スペースキーでジャンプ // ジャンプ中はスペースキーが押されてもさらに上昇しない if (Input.GetKeyDown("space") && this._charactorScript.isJumping == false) { this._moveCharactor(Vector2.up * _upForce); } }
今回調整した値はゲームのバランスを調整しながら、好みの値に変更してみてください。