Unityでキャラクターの移動速度を上げダッシュを実装する

操作しているキャラクターの移動速度を上げる方法を実装してみます。
横向きアクションゲームや見下ろし型RPG等でもよく使われてるダッシュ的な処理です。
色々やり方はあると思いますが今回は移動中にスペースキーを押したら早く動くみたいな感じで作ります。

ちなみに私は以前Unityでサイドビューのゲームを作る時にこちらの講座を参考に勉強しました。
初心者にも解りやすく、ジャンプの処理、タイルマップの使い方、リトライの処理、など内容もかなり充実しているので大変おすすめの講座です。

Unityスキルアップ、
始めるなら今

パズル、脱出、RPG...目標のゲームを完成させよう!

人気のUnity講座はこちら

Udemy講座

unityの新規2Dプロジェクトを作成し作業に入ります。
今回は見下ろしではなく横向きのゲームを想定して作ってみます。
画面サイズは960*540です。

ゲームの画面を作る

早速ゲームに必要なものを用意します。
まずPlayerが必要なので横向きのプレイヤー画像を用意しHierarchyに配置します。
今回はアニメーションも設定しました。
InspectorからPlayerに下記コンポーネントを追加していきます

  1. Box Collider 2D
  2. Rigidbody 2D

数値等はそのままにしてあります。

次に地面となるものを用意します。
手抜きして2DObjectからSquareを置いて横長にし、Groundとしました。
こちらにはBox Collider 2Dだけを追加しておきます。
GroundはPlayerよりも下に来るよう、いい塩梅に配置します。

起動するとこんな感じになりました。
プレイヤー横向き
まだこの段階ではプレイヤーは移動しません。

プレイヤーが左右に移動する処理

ここからプレイヤーを動かしていきます。
新たにC#スクリプトを作成しPlayerにアタッチします。
今回はPlayerというスクリプトにしました。
ソースコードはこのような感じにしています。

まず必要となりそうな変数を宣言します。
通常スピードとダッシュスピードはInspectorから変更出来るようにSerializeFieldにします。
今回は通常を1、ダッシュを3としました。
通常とダッシュ時の速度設定

続いてStart時にcurrentSpeedにspeedを代入します。
Update関数内でキー入力を受け取ります。

Input.GetAxisRaw()

今回は横方向にしか移動しませんのでInput.GetAxisRaw(“Horizontal”);で水平方向の入力をfloat型のxという変数に代入します。
Input.GetAxisRaw()は入力された軸によって-1,0,1のいずれかの値を返します。
-1が左、0が何も押して無い、1が右です。
ちなみに似たような関数でInput.GetAxis()というものがあります。
これは入力された軸に補正をかけて徐々に-1や1に近づいて値を返してくれます。

Playerを反転させる

続いてxの値によってPlayerのxのスケールを1か-1にしています。
xが0より小さい場合(左向きの時)はスケールxを-1「transform.localScale = new Vector3(-1, 1, 1);」に
xが0より大きい場合(右向きの時)はスケールxを1「transform.localScale = Vector3.one;」にしています。
他にもやり方はあると思いますが、今回は簡単なこの方法を使っています。

Playerを移動させる

最後にtransformのTranslateメソッドでPlayerを移動させています。
Translateは移動を専門的に行うメソッドです。
第一引数にVector3、第二引数にどの座標を基準にするかを設定できます。
Space.Worldでワールド座標、Space.Selfでローカル座標での移動となり、省略するとSpace.Selfになります。
今回はnew Vector3(x, 0, 0) * currentSpeed * Time.deltaTimeを引数にとっています。
new Vector3(x, 0, 0)だけだと、毎フレーム呼ばれるのでめちゃくちゃ早く動いてしまいます。
それを補正するためにTime.deltaTimeをかけています。
ちなみにcurrentSpeedは通常とダッシュのためにかけています。

実行みるとこんな感じでプレイヤーが左右に移動してくれました。
アニメーションがぎこちないですがこれでよしとします。
プレイヤーが左右に動く

スペースキーを押してダッシュさせる

それでは最後にダッシュ処理を追加します。
Update関数内にこのように記述します。

やってることは簡単でしてスペースキーを押されてる時はスピードを大きくして、それ以外の時は通常に戻すといった処理です。
スピードを大きくするやり方は今回はspeedにdashSpeedをかけていますが、単純にcurrentSpeed = dashSpeedでもいいと思います。

実行するとこのような感じになりました。
スペースキーでダッシュ実装

スペースキーを押してるか押していないかでプレイヤーの移動速度が変わったのがわかると思います。

GetAxis()を使った場合

最後におまけでGetAxisRawをGetAxisに変更してプレイヤーを動かしてみました。
GetAxisで徐々に加速

GetAxisRawと比べて最初だけ徐々に早くなっていく感じになります。

以上超簡単ですがプレイヤーのダッシュの実装でした。
他にもプレイヤーの移動方法やダッシュの方法はあると思いますので機会があれば書いてみようかと思います。

おすすめUnityオンライン学習

一人でゲーム開発が不安な方はオンラインスクールで学習すると効率が良いと思います。
以下に当てはまる人は検討してみると良いかもしれません。

「ゲーム作りけど何から初めればいい?」
「入門書をの次に何をしたらいいの?」
「疑問や問題を一人で解決出来ない。。」
「ゲームを完成させる自信がない。。」
「気軽に質問できる環境が欲しい。。」

自分で学習することに限界を感じたら
オンライン学習しましょう!

Udemy

Udemy
特徴:教材動画買い切り型
レッスン方法:動画教材/Q&Aで質問
習得スキル:教材動画によって異なる
コース概要: ピンポイントで作りたいゲームジャンルの動画を見つけることができるかもしれません。 また頻繁にセールを開催していますのでゲーム開発講座が1500円~で購入することも可能です。
ゲームジャンル別おすすめ講座はこちら Udemy 詳細

テックアカデミー

テックアカデミー
特徴:現役エンジニア伴走型レッスン
レッスン方法:チャット(週2回)/テキストチャット/課題レビュー
習得スキル:オリジナルゲームアプリの作成
コース概要: 途中で挫折しないためにメンター(相談者)が週2回、マンツーマンであなたの質問・相談に答えてくれるので、ゲーム開発・プログラミング未経験の人でも安心してゲーム開発に取り組めます。転職したい人向けのサポートもあります。無料体験もあります。
テックアカデミー 詳細

テックスタジアム

テックスタジアム
特徴:ゲーム開発の為のオンラインスクール
レッスン方法:動画教材,Slackでの質問(24時間)
習得スキル: Unity,UnrealEngine、CG、企画、サーバー、AI、XR等
コース概要: ゲーム業界で必須な技術の習得が可能です。Slack上で待機している先生への24時間、何度でも質問できます。またIT・ゲーム業界への就職サポートが無料で受けられます。
ゲーム開発に特化したオンラインスクールですので、Unityはもとより、他のゲームエンジンやゲーム業界に興味がある方にはオススメです。
テックスタジアム 詳細

デジハリONLINE

デジハリONLINE
特徴:動画カリキュラム型レッスン
レッスン方法:動画講座/Slack/予約制Zoom相談
習得スキル:Unity基礎,実践/ハイクオリティ3Dゲーム
コース概要: デジタルハリウッド大学・大学院などを通じたデジタルコンテンツ業界とのつながりを活かし、最新かつ実践的なカリキュラムを提供しています。【基礎編】【実践編】とカリキュラムが分かれていて、それぞれに課題があり、ご自身の理解度を把握できます。最終的にはハイクオリティの3Dゲームが作れるようになります。
デジハリONLINE 詳細

関連記事

最後までご覧頂いてありがとうございました。

2Dローグライトゲーム

2Dローグライトゲーム開発

Unity ヴァンパイアサバイバーズ風 講座