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

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

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

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に変更してプレイヤーを動かしてみました。

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

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

Unityの学習方法

Unityを始めプログラミング全般について皆さんは普段どのようにして勉強してますか?

ネットで検索したり、書籍を読んだり、オンラインスクールなど様々な方法があります。

逆にたくさん方法があり過ぎで、どれをやればいいかわからないという方にオススメの方法をいくつか紹介します。

kindle unlimited

これはAmazonが提供する電子書籍読み放題のサービスです。

月額980円で約200万冊以上が読み放題でとてもお得です。

また30日無料体験もできるのが魅力です。

当然Unityに関する書籍もたくさん揃っています。

またC#関連の書籍や、プログラミングのものも多数あります。

プログラミング関連の書籍は値段が結構しますので、それらが無料で読めるのはかなりお得なサービスです。

30日無料体験もありますので気に入らなければその期間に解約すれば料金は発生しません

オンラインで学習

質問が出来るおすすめのUnity学習方法ページです。

・Unityでゲーム作りたいけど何から初めたら良いかわからない。

・独学でゲームを完成させられるか不安。

・ゲーム開発でわからないことを一人で解消できない。

・入門書を一通りやってみたが次に何していいかわからない。

こんな人におすすめしたい内容になっています。

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

感想・コメントをどうぞ

購読
通知する
guest
0 コメント
Inline Feedbacks
View all comments

関連記事