「Flappy Bird」をUnity Visual Scriptingで作ってみよう(2/5)

プレイヤーの移動とアニメーション

Posted by 51n1 on 03 May, 2021

もくじ

1. Flappy Birdスタイルゲームを作成する
2. プレイヤーの移動とアニメーション
3. テキストの表示と背景のスクロール
4. 障害物の生成とスコアのカウントアップ
5. Script Graphまとめ

Birdにジャンプ処理を追加する

Visual Scripting

チュートリアルビデオでは、C#スクリプトを作成するためにScriptコンポーネントを追加しているが、ここではVisual Scriptingを使いたいので、Script Machineコンポーネントを追加し、Birdという名前でScript Graph Assetを作成する。( 2.1)

Edit Graphボタンをクリックし、Visual Scripting Graphウィンドウを表示させる。Birdゲームオブジェクトのジャンプの動きをC#スクリプトのコードと同じ処理を行うVisual Scriptingのユニットを追加し、フローグラフを組み立てていく。マウスボタンの左クリックによってその場でジャンプする動きをするスクリプトグラフはスクリーンショット画像の通りとなる。

最初にisDeadとupForceという変数をObject Variablesとして追加する。簡単に説明するとUpdate Eventユニットからフローがスタートし、isDead変数をチェックしFalseであれば進み、さらにマウスボタンの左クリックがTrueで先に進む。Birdゲームオブジェクトを上に移動させるためにSet Velocityで一旦加速度をリセットしてから、AddForceユニットでY軸方向にupForce変数で指定した値だけ上に移動させるようにする。( 2.2)

2.1 Script Machine - Bird

2.2 Bird Script Graph - Bird

以下、ここまでの進捗ビデオ①となる。 ( 2.3)

2.3 ここまでの進捗ビデオ①

Birdのグラウンド落下処理

Visual Scripting

先ほどはBirdゲームオブジェクトにジャンプ機能を追加しただけなので、グラウンドに落下してもジャンプができてしまう。グラウンドに落下したらisDeadをTrueに変更しジャンプができないようにしたい。これはOn Collision Enter 2Dユニットで実現する。グラウンドに落下するとisDeadがTrueとなり、それ以降、ジャンプができなくなる。( 2.4, 2.5)

2.4 isDead is False - Bird

2.5 isDead is True - Bird

Birdのアニメーション

Animation Animator

HierarchyウィンドウでBirdゲームオブジェクトを選択してAnimationウィンドウを開く。Createボタンをクリックし、Idleアニメーションを作成する。BirdというAnimator Controllerが自動で作成されAnimatorコンポーネントがBirdゲームオブジェクトにアタッチされる。( 2.6, 2.7)

2.6 Animation - Bird

2.7 Animator - Bird

Birdゲームオブジェクトを選択した状態で、Animationウィンドウ → 「Add Property」ボタン → Sprite Rendererメニューを開く → Spriteの横にある「+」ボタンをクリックする。1.0秒の位置にあるSpriteイメージは削除しておく。( 2.8, 2.9)

2.8 Idle Animation - Bird

2.9 Idle Animation - Bird

さらにAnimation Clipを作成するため、Animationウィンドウで「Create New Clip...」を選択し、Flapという名前で保存する。同様にDieというAnimation Clipを作成し、全部で3つのAnimation Clipを作成する。( 2.10, 2.11)

2.10 Create New Clip... - Animation

2.11 Save - Animation

下記リストの通り各Animation Clipにそれぞれ指定されたSpriteを設定する。

  • Idle : BirdHero_1
  • Flap : BirdHero_0
  • Die : BirdHero_2

ここまででAnimatorウィンドウには3つのステートができているだろう。EntryとAny Stateはデフォルトで設定されるステートである。( 2.12)

AnimatorのParametersパネルウィンドウでFlapとDieという2つのTriggerパラメータを追加する。( 2.13)

2.12 Three States - Animator

2.13 Trigger Parameter - Animator

それぞれのステート間でトランジションを作成・接続し、下記の通り、ConditionsとHas Exit Timeを設定する。( 2.14)

  • Transition : Idle → Die
    • Conditions : Die
    • Has Exit Time : Off
  • Transition : Idle → Flap
    • Conditions : Flap
    • Has Exit Time : Off
  • Transition : Flap → Idle
    • Conditions : 設定しない
    • Has Exit Time : On

2.14 Transition Settings - Animator

Birdのアニメーションをスクリプトで制御する

Visual Scripting

Birdゲームオブジェクトのジャンプ機能を設定したスクリプトグラフのAddForceユニットの後ろにAnimatorのパラメータ「Flap」のTriggerをセットするため、Set Triggerユニットを追加する。( 2.15)

同様にOn Collision Enter 2DイベントのフローにAnimatorのパラメータ「Die」のTriggerを設定する。( 2.16)

2.15 Flap - Set Trigger

2.16 Die - Set Trigger

ここまででBirdゲームオブジェクトに設定したジャンプ処理と落下処理のVisual Scripting Graphとなる。( 2.17)

2.17 Bird Scripting Graph

下記、進捗ビデオではBirdゲームオブジェクトのジャンプ処理、落下処理、アニメーション処理が追加されていることがわかるだろう。( 2.18)

2.18 ここまでの進捗ビデオ②

次は、スコアやゲームオーバーテキストなどのUIの設定を行い、ゲームオーバー時のリスタート処理や背景スクロールを実装していく。