Unityでキャラクターの移動速度を上げダッシュを実装する
操作しているキャラクターの移動速度を上げる方法を実装してみます。
横向きアクションゲームや見下ろし型RPG等でもよく使われてるダッシュ的な処理です。
色々やり方はあると思いますが今回は移動中にスペースキーを押したら早く動くみたいな感じで作ります。
ちなみに私は以前Unityでサイドビューのゲームを作る時にこちらの講座を参考に勉強しました。
初心者にも解りやすく、ジャンプの処理、タイルマップの使い方、リトライの処理、など内容もかなり充実しているので大変おすすめの講座です。
unityの新規2Dプロジェクトを作成し作業に入ります。
今回は見下ろしではなく横向きのゲームを想定して作ってみます。
画面サイズは960*540です。
ゲームの画面を作る
早速ゲームに必要なものを用意します。
まずPlayerが必要なので横向きのプレイヤー画像を用意しHierarchyに配置します。
今回はアニメーションも設定しました。
InspectorからPlayerに下記コンポーネントを追加していきます
- Box Collider 2D
- 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と比べて最初だけ徐々に早くなっていく感じになります。
以上超簡単ですがプレイヤーのダッシュの実装でした。
他にもプレイヤーの移動方法やダッシュの方法はあると思いますので機会があれば書いてみようかと思います。
関連記事
TextMeshProでリンクを作成する方法とそのバグの解消法
今回はTMPのリンクを生成するLinkタグについて紹介したいと思います。
ちょっとしたハマりポイントもあるのでそちらについても触れていきたいと思います。
UnityでCSVを活用したメッセージウィンドウの作り方
メッセージの内容を変更したい時や、新しいメッセージを追加したい時にCSVファイルを使えば、メッセージの編集や追加が簡単になり、開発がスムーズになります。
Unity2D ドット絵の簡単なアニメーションを作ってみる
Unity2Dで簡単なドット絵のアニメーションを作成します。スプライトを切り替えることでプレイヤーが歩いているように見えるアニメーションを作成してみます。
この方法を応用することでキャラクターに色んな動きや表示を付け加えることができると思います。
ChatGPTの指示通りUnityゲームを作ってみる
最近ではChatGPTを始め様々な大規模言語モデルの対話型AIが公開されていますね。
そこで今回はChatGPTの指示に従ってゲームを作ってみる実験をしてみます。
Unityで9-sliceテクニックを使った効果的なUI作成方法
UI作成時に非常に便利なテクニック9-sliceをやってみます。
とても簡単に使える技です。
Transform.RotateとQuaternion.Eulerでオブジェクト回転
Unity2Dで簡単なゲームオブジェクトの回転を実装してみたいとおもいます。
Transform.RotateとQuaternion.Eulerの二種類の回転方法を実験します。
ルーレットとか、方位をコンパス。またはプレイヤーがやられた時に回転させるなどに使えそうです。
最後までご覧頂いてありがとうございました。