D. 弾を発射するステートを追加しよう。
続いて弾を発射するステートを追加します。「地上発射」「移動発射」と「空中発射」の2つのステートが必要なのはもちろんですが、「空中発射」には工夫が必要そうです。
「地上発射」や「移動発射」からはそれぞれ「待機」、「移動」に遷移でもどれば良いのですが、「空中発射」を「ジャンプ」に遷移で戻してしまうと、再びジャンプしてしまうため、発射する度にジャンプで登ってしまいます。
そのため、ジャンプ以外の空中ステートが必要になります。今回は「ジャンプ」ステートを、「ジャンプ」と「空中」の2つに分けるようにしましょう。「ジャンプ」からは即座に「空中」に遷移し、「空中」中に「タイルに触れたら」「待機」に遷移するようにすればよさそうです。
そして、「空中発射」からは「空中」に戻るようにすれば問題が起きないでしょう。
では早速作っていきます。
「地上発射」「移動発射」ステートを作ろう
1. 「待機」の左方あたりに新しいステートをつくりましょう。
2. 作成した「ステート001」を「地上発射」にリネームします。
3. アニメーションカテゴリ名で「地上発射」アニメーションセットを指定します。
4. 「+実行アクションの追加」をクリックします。
5. 実行アクションとして、「弾を発射」を選択します。
6. 弾データで先程作成した「弾」を指定します。
7. 接続点の「割り当て」ボタンをクリックします。
8. 「ノードを選択」ウィンドウが出るので、先程作成したConnectorを指定します。
9. 弾データ「弾」接続点「Connector」が正しく指定されていることを確認したら「追加」しましょう。
10. 続いては「移動発射」ですが、「移動発射」はアニメーション以外「地上発射」と全く同じステートです、コピーして再利用しましょう。「地上発射」ステートを右クリックして「コピー」します。
11. 「移動」ステートの右側あたりを右クリックして、「ステートをペースト」を選択します。
12. 「地上発射(1)」というステートができるのでインスペクターで「移動発射」にリネームします。
13. 「遷移前のアニメーションを維持」のチェックボックスを有効にしましょう。「移動射撃」のアニメーションは、遷移元である「移動」と全く同一のものなので変更をする必要がありません、こういったケースではこのオプションが利用できます。
「待機」と「地上発射」、「移動」と「移動発射」ステートをつなごう
「待機」「移動」から「攻撃」ボタンが押されたら「地上発射」「移動発射」に遷移し、「待機」「移動」に戻るようにすれば動作しそうです。連射しすぎてしまうのも問題なので、「0.3秒」経過すれば戻る、とすれば程よく動作できるでしょう。
1. 「待機」ステートを右クリックしてリンクを作成し、「地上発射」ステートにつなぎます。
2. プロパティで「以下の入力がされた」のチェックをオンにしましょう。
3. 入力操作リストの右欄「Array[InputCondition…]をクリックして展開します。
4. 「+入力を追加」をクリックして入力欄を追加します。
5. <空>をクリックして「新規 入力に関する条件」を追加しましょう。
6. 「入力に関する条件」をクリックして展開します。
7. 「入力キー」を「攻撃」に変更しましょう。
8. 作成したリンクを右クリックで「コピー」します。
9. 「移動」ステートを右クリックして「リンクをペースト」しましょう。
10. 「移動発射」ステートにリンクをつなぎます。これで、「待機」、「移動」からのリンクができました、次は戻るリンクです。
11. 「地上発射」ステートを右クリックして「リンクを追加」し、「待機」ステートにつなぎます。
12. インスペクターで「+その他条件の追加」ボタンをクリックします。
13. その他欄にある、「一定時間が経過」条件を選択します。
14. 「数値」項目の秒数を1秒から0.3秒に変更しましょう。
15. 追加が完了したら、リンクを右クリックして「コピー」します。
16. 「移動発射」ステートを右クリックして「リンクをペースト」して「移動」につなぎます。以下のようになっていれば地上での発射ステートは完成です。
正しく弾が地上で発射できるか試してみよう
ここまで「弾」オブジェクトの作成、「BulletSettings」の設定、「地上発射」「移動発射」スクリプトの作成と3段階の設定を行いましたが、ここでようやく弾の発射がテストできるようになりました、一度テストプレイで試してみましょう。
1. エディター右上の「プロジェクトを実行(F5)」ボタンをクリックします。
2. うまく設定できていれば、「待機」「移動」の状態でXキーを押せば弾が発射されるはずですが、設定項目が多かったので設定もれがあるかもしれません。以下のリストで再チェックしてみましょう。
うまくいかないときのチェックリスト
アニメーションが再生されない:各発射ステートの設定を見直してみましょう。問題がない場合はAnimationPlayerのアニメーションも見直してみましょう。
アニメーションが再生されるが、弾がでない:「弾を発射」アクションの設定を見直してみましょう。
弾が出るが動かない、変な方向にいく:「BulletsSettings」を見直してみましょう。
問題がないことを確認できたら閉じるボタンでテストプレイを閉じましょう。
「ジャンプ」ステートを「ジャンプ」と「空中」ステートに分割。
それでは、「ジャンプ」ステートを分割しましょう。
1. 「ジャンプ」の左のあたりに「ステートを追加」します。
2. ステート001から「空中」にリネームしましょう。
3. アニメーションカテゴリ名を「ジャンプ」にして「空中」ステートは完成です。
4. 続けてリンクをつなぎます、「ジャンプ」ステートを右クリックして「リンクを追加」し、「空中」につなぎましょう。
5. インスペクターで「ステートを切り替える条件」を「無条件」にします。「無条件」は、条件なく即座にステートを切り替える条件です。「ジャンプ」の動作は即座に行われますし、「ジャンプ」のアニメもフレームを切り替えるだけなのでこちらの条件で動作します。
6. 続いて、「ジャンプ」から「待機」に戻るリンクを「空中」から「待機」に戻るリンクに付け替えましょう、リンクを選択します。
7. 右クリックして「切り取り」を選択します。
8. 「空中」ステートを右クリックして「リンクをペースト」しましょう。
9. 待機に繋げば完成です。
10. 念の為テストプレイをしてジャンプから着地までの流れが正しく動作するかチェックしておきましょう。
「空中発射」ステートを作って「空中」とつなごう
「空中発射」ステート、およびリンクの条件は先程作った地上発射のものでアニメーションが異なるだけなので再利用しましょう。
1. 「地上発射」ステートを右クリックして「コピー」します。
2. 「空中」の左にペーストします。
3. インスペクターで「地上発射(1)」を「空中発射」にリネームします。
4. 「アニメーションカテゴリ」を「空中発射」に変更します。
5. 「待機」→「地上発射」のリンクをコピーします。
6. 「空中」を右クリックして「リンクをペースト」し、「空中発射」につなぎます。
7. 「地上発射」→「待機」のリンクをコピーします。
8. 「空中発射」を右クリックして「リンクをペースト」し、「空中」につなぎます。
9. これで完成です、再度テストプレイをして動作をチェックしましょう。Zキーを押してジャンプ中にXを押して弾が正常に発射されれば成功です。