公開日:2023/07/08  更新日:2023/07/08

Unityでのダッシュの実装

 Unityを使ったゲーム制作でキャラをダッシュさせる方法を紹介する。
 以前の2記事でTPS視点でのプレイヤーの移動とジャンプについてはできるようになり以下にような動作が可能となった。


   今回はこれにダッシュ機能を追加していこうと思う。具体的には左シフトキーを押すとキー入力されている方向に高速移動を行うという機能を実装する。加えて今回はダッシュの時間は0.3秒とし、終了後にはクールタイム1.5秒としその間はダッシュを使えなくする。
 以前の記事を読んでない場合はまずはそちらを確認してほしい。
TPSのキャラ移動
ジャンプ

 詳しく説明するつもりだが、さすがに操作やC#など基礎がわかってない場合は理解が難しいと思うので、以下を確認してほしい。
Unityの基礎まとめ
C#の基礎まとめ

Unityでのダッシュの実装目次

スクリプト記述
目次にもどる

スクリプト記述

 以下のようにスクリプトに記述してPlayerにアタッチすればダッシュが実装される。

 前のスクリプトから記述を追加し移動は以下のようになっている。
 以前のスクリプトではキャラのX軸とZ軸の回転(向き)を0にしてWASDや矢印キーでの移動設定を行った(XやZの軸の回転によって移動方向を変えないため)。
 今回、キャラの回転をtransform.eulerAngles = mukikioku;で元に戻す前にダッシュの記述を追加した。ダッシュについてもXやZの軸の回転によって進行方向を変えたくはないからだ。
 ダッシュの記述ではif (Input.GetButtonDown("Fire3") && dashkyoka == true)としている。デフォルトではInput ManagerのFire3の文字列は左シフトボタンが割り当てられている。よって、左シフトボタンを押しdashkyoka(bool型の変数)がtrueなら中身の処理が行われる。
 中身の処理ではdashhoukou = new Vector3(moveX, 0, moveZ).normalized;として通常のWASD移動と同様に向き計算を行い、normalizedで正規化し、dashhoukouに代入している。WASD移動と異なるのはTime.deltaTimeをかけてない点。この処理の後にzyuuryoku.AddForce(transform.TransformDirection(dashhoukou) * dashSpeed, ForceMode.Impulse);として力を瞬間的に加えるが1度だけの処理なのでTime.deltaTimeは必要ない。

 transform.TransformDirectionでローカル空間→ワールド空間へ変換している。
 今回力をかけるべき方向はキャラの向いている方向は関係なく、キーを押して移動している方向である。よってワールド空間へ変化している。

 続いてdashkyoka = false;としている。よってdashkyokaがtrueに戻るまでは次のダッシュを行うことはできない。

 次の記述はStartCoroutine(Dashowari());である。これはコルーチンと呼ばれる関数を使っており、中断や再開を行うことができる。コルーチンについてよくわからない場合は以下の記事へ。
コルーチンの基礎
 StartCoroutine(Dashowari());と記述することで、ここからコルーチンがはじまり、Dashowariのメソッドを呼び出すことになる。Dashowariのメソッドは後ろの行に記述させており以下のようになっている。
 IEnumerator Dashowari()と記述しており、コルーチンのメソッドのDashowariであることを示す。
 次にyield return new WaitForSeconds(dashtime);と記述しており、dashtimeの時間だけ中断して待つ。dashtimeは最初のほうで0.3を代入しているので0.3秒間待つことになる。
 zyuuryoku.velocity = Vector3.zero;とすることで、Playerにかかる力を0にしてダッシュを終了させる。

 続いてダッシュクールタイムの時間だけ待機する処理へ。
 yield return new WaitForSeconds(dashcool);としており、dashcoolの時間(前のほうの行で1.5を代入しており1.5秒)の間中断して待つ。
 1.5秒後に次の記述であるdashkyoka = true;が処理される。これで再度左シフトボタンを押すとダッシュができるようになる。

 以上のスクリプトをPlayerにアタッチすることで、以下のような動作を行える。

 シフトキーを押すことで現在の移動方向へダッシュが可能。またジャンプからシフトキーでダッシュすることも可能。アクション性がだいぶ高くなってきた。


 続きの記事は以下。
自作キャラ作成
Unityのゲーム制作まとめへ戻る

page top