Unityに関連する記事です

 前回の手順につづき、ゲームの演出を追加していきます。

<フロート表示を行うタイミングと種類>
 1.プレイヤーのバレットがエネミーにぶつかったとき、エネミーのゲームオブジェクト上に「バレットの攻撃力値」の数字を表示
 2.エネミーや、エネミーのバレットが拠点に侵入したとき、拠点のゲームオブジェクト上に「エネミー、あるいはエネミーのバレットの攻撃力値」の数字を表示
 3.エネミーを倒したとき、UI の TotalExp 表示用のゲームオブジェクト上に「獲得した Exp 値」の数字を表示

 この手順では、上記のタイミングに合わせて FloatingMessageObj ゲームオブジェクトを生成し、数字の表示や色の変更などを制御させます。


<実装動画 1.プレイヤーのバレットがエネミーにぶつかったとき、エネミーのゲームオブジェクト上に「バレットの攻撃力値」の数字を表示>
動画ファイルへのリンク


 以下の内容で順番に実装を進めていきます。

発展16 ーフロート表示の実装ー
32.EnemyController スクリプトを修正して、プレイヤーのバレットとエネミーの接触時に、バレットの攻撃力分のフロート表示を生成する
33.DefenseBase スクリプトを修正して、拠点とエネミーの接触時に、エネミーの攻撃力分のフロート表示を生成する
34.UIManager スクリプトと EnemyGenerator スクリプトを修正して、Exp の値を加算する際に、加算する Exp 分のフロート表示を生成する



 新しい学習内容は、以下の通りです。

 ・1つのゲームオブジェクトを複数の目的に利用する方法
 ・自分でロジックを考えて組み立てる



32.EnemyController スクリプトを修正して、プレイヤーのバレットとエネミーの接触時に、バレットの攻撃力分のフロート表示を生成する

1.設計


 フロート表示用のゲームオブジェクトを作成し、エネミーに関しては、生成する位置の設置も完了しました。
この情報を利用して、プレイヤーのバレッがエネミーに接触した時に、バレットの攻撃力分のフロート表示を生成するロジックを考えてみてください。

 EnemyController スクリプトを修正することを念頭に、どのような変数を用意して、どのような処理を用意し、
その処理をどのようなタイミングで呼び出すことができればいいのか、一連の流れを考えて自分なりのロジックで実装をしてみてください

 1つのロジックが完成すれば、今回実装を行う3つの手順は、利用する情報こそ異なりますが、すべて同じロジックで実装できます。

 FloatingMessage スクリプトに用意してある DisplayFloatingMessage メソッドをよく確認して、
このメソッドにどのような情報が引数で用意できれば、プレイヤーのバレットの攻撃力値を利用することができるのか、
数字の色を変えるためには、どのような FloatingMessageType 型の指定が必要になるのかを考えていくといいと思います。

 この DisplayFloatingMessage メソッドは、残る2つの処理でも同じように呼び出されるメソッドですが、
そのときの引数によって、フロート表示する値の内容を変更したり、色を変えたりすることで転用が可能な設計になっています。
つまり、今回はプレイヤーバレットの攻撃力値を表示させる目的ですが、次の手順では、エネミー側の攻撃力値を表示させる内容になります。
このあたりの理解を深めていくことでロジックを組みやすくなりますので、まずは挑戦してみましょう。


2.EnemyController スクリプトを修正する


 まずは自分でロジックを組んで、実装してみてください。
 
 フロート表示を生成するために必要となる情報や処理は今まで学習してきた内容を復習すれば実装できます。
生成されたフロート表示には何も情報がありませんので、FloatingMessage スクリプトに用意してあるメソッドを呼び出して
フロート表示させたい値や、種類を引数で渡すようにしてみましょう。


EnemyController.cs


 スクリプトを修正したらセーブします。



 Prefabs フォルダ内にある EnemySet ゲームオブジェクトのインスペクターより EnemyController スクリプトを確認し、
新しく SerializeField 属性で宣言した変数が表示されていることを確認します。


EnemySet ゲームオブジェクト インスペクター画像




3.EnemySet ゲームオブジェクトの設定を行う


 EnemySet ゲームオブジェクトのインスペクターの一番上にある Open Prefab ボタンを押してプレファブ編集モードに切り替えます。

 EnemyController スクリプトに SerializeField 属性で宣言している変数が2つ追加されていますので、適切な情報をアサインして登録します。


EnemySet ゲームオブジェクト インスペクター画像



 以上で設定は完了です。



4.ゲームを実行して動作を確認する


 実装が完了したら処理の流れを見直して、ゲームを実行して挙動を確認します。
エネミーにバレットをぶつけてみてください。FloatingMessageTran ゲームオブジェクト上にフロート表示が生成されて、バレットの攻撃力値が赤い色で表示されれば制御成功です。 
何回かバレットをぶつけてみて、生成される位置が毎回少しずつ違うことも確認してください。

 生成されたフロート表示はエネミーの上方向へ向かって移動し、その後破壊されます。ここまで制御できていればすべて実装出来ています。


<実装動画 1.プレイヤーのバレットがエネミーにぶつかったとき、エネミーのゲームオブジェクト上に「バレットの攻撃力値」の数字を表示>
動画ファイルへのリンク


<実装動画 1.プレイヤーのバレットがエネミーにぶつかったとき、エネミーのゲームオブジェクト上に「バレットの攻撃力値」の数字を表示>
動画ファイルへのリンク


 以上でこの手順は完成です。
ボスの場合にはボスのゲームオブジェクトのサイズに合わせて、フロート表示も大きくなっていることが分かります。



33.DefenseBase スクリプトを修正して、拠点とエネミーの接触時に、エネミーの攻撃力分のフロート表示を生成する

1.設計


 前回の手順と同じロジックで実装できます。引数などは適切な情報を利用するようにしてください。
また、エネミーの場合には、EnemySet ゲームオブジェクト内にフロート表示を行うための位置情報を用意してありました。
この手順ではその情報をどのようにするかを考える所から設計してみてください。
フロート表示を行う位置情報を決定できれば、あとはロジックは同じです。どのタイミングで、どのような処理を行うべきか、考えてみてください。


2.DefenseBaseSet ゲームオブジェクトにフロート表示を行う位置を考えて決定する


 DefenseBaseSet ゲームオブジェクトのどの位置にフロート表示用のゲームオブジェクトを生成するか考えます。
既存の情報を利用するのであれば、txtDurability ゲームオブジェクトの位置がよいでしょう。

 あるいは、EnemySet ゲームオブジェクトのように、生成位置専用のゲームオブジェクトを作成し、その位置に生成するようにしてもよいです。
この位置の情報を DefenseBase スクリプトに登録して利用する設計になりますので、ここで決定しておいてください。


3.DefenseBase スクリプトを修正する


 設計と、先ほど修正を行った EnemyController スクリプトを参考にしながらロジックを考えて、
必要な変数の宣言と処理を記述してください。メソッド実行のタイミングなども同じ流れで実装出来ます。

 引数の指定の部分には注意してください。
今回利用する情報はエネミーからのダメージ値と、プレイヤーのダメージ用の列挙子(FloatingMessageType 型)になります。


DefenseBase.cs

 <= クリックすると開きます


 スクリプトを修正したらセーブします。



 DefenseBaseSet ゲームオブジェクトのインスペクターより DefenseBase スクリプトを確認し、
新しく SerializeField 属性で宣言した変数が表示されていることを確認します。


DefenseBaseSet ゲームオブジェクト インスペクター画像




4.DefenseBaseSet ゲームオブジェクトの設定を行う


 DefenseBaseSet ゲームオブジェクトのインスペクターの DefenseBase スクリプトに SerializeField 属性で宣言している変数が2つ追加されていますので、適切な情報をアサインして登録します。


DefenseBaseSet ゲームオブジェクト インスペクター画像



 以上で設定は完了です。


5.ゲームを実行して動作を確認する


 実装が完了したら処理の流れを見直して、ゲームを実行して挙動を確認します。
拠点に対して、エネミーや、エネミーからバレットを侵入させてください。txtDurability ゲームオブジェクト上にフロート表示が生成されて、エネミーからのダメージ値が赤い色で表示されれば制御成功です。 
何回か侵入させてみて、生成される位置が毎回少しずつ違うことも確認してください。

 先ほどの手順と同じ処理の流れになりますので、生成されたフロート表示はエネミーの上方向へ向かって移動し、その後破壊されます。
ここまで制御できていればすべて実装出来ています。


<実装動画 2.エネミーや、エネミーのバレットが拠点に侵入したとき、拠点のゲームオブジェクト上に「エネミー、あるいはエネミーのバレットの攻撃力値」の数字を表示>
動画ファイルへのリンク


 以上で完成です。
最後に、エネミーをたおして Exp を獲得した際にもフロート表示を行うように処理を追加します。


34.UIManager スクリプトと EnemyGenerator スクリプトを修正して、Exp の値を加算する際に、加算する Exp 分のフロート表示を生成する

1.設計


 この処理も、今までに実装してきた2つのロジックと同じロジックで実装できます。
ポイントは、フロート表示の生成と設定を行う処理のメソッドを用意するスクリプト(UIManagaer スクリプト)と、
そのメソッドを実行するスクリプト(EnemyGenerator スクリプト)が異なる部分です。
ロジックとしては同じですので、呼び出すタイミングが同じスクリプト内にない、というだけです。

 この手順も、どの位置にフロート表示を行うか設計を考えてからスクリプトを修正していきましょう。


2.TotalExpSet ゲームオブジェクトにフロート表示を行う位置を考えて決定する


 TotalExpSet ゲームオブジェクトのどの位置にフロート表示用のゲームオブジェクトを生成するか考えます。
既存の情報を利用するのであれば、txtTotalExp ゲームオブジェクトの位置がよいでしょう。

 あるいは、EnemySet ゲームオブジェクトのように、生成位置専用のゲームオブジェクトを作成し、その位置に生成するようにしてもよいです。
この位置の情報を UIManager スクリプトに登録して利用する設計になりますので、ここで決定しておいてください。


3.UIManager スクリプトを修正する


 いままでの実装を参考にして、このスクリプトに必要な情報を設計してロジックを組んで実装してください。


UIManager.cs

<= クリックすると開きます


 スクリプトを修正したらセーブします。



 UIManager ゲームオブジェクトのインスペクターより UIManager スクリプトを確認し、
新しく SerializeField 属性で宣言した変数が表示されていることを確認します。


UIManager ゲームオブジェクト インスペクター画像




4.UIManager ゲームオブジェクトの設定を行う


 UIManager ゲームオブジェクトのインスペクターの UIManager スクリプトに SerializeField 属性で宣言している変数が追加されていますので、適切な情報をアサインして登録します。


UIManager ゲームオブジェクト インスペクター画像



 以上で設定は完了です。


5.EnemyGenerator スクリプトを修正し、UIManager スクリプトに用意したメソッドを呼び出す処理を追加する


 こちらも UIManagaer スクリプトと同じです。自分で考えたロジックを実装してください。
なお、この教材のスクリプトはあくまでも実装の一例です。自分で考えたロジックで動くのであれば、そちらを使い、
その後、教材の処理を見て復習をおこなってください。気づきが1つでもあれば学習が生きてきています。

 TODO 機能がヒントです。


EnemyGenerator.cs

 <= クリックすると開きます。


 スクリプトを修正したらセーブします。


6.ゲームを実行して動作を確認する


 実装が完了したら処理の流れを見直して、ゲームを実行して挙動を確認します。
エネミーにバレットをぶつけて倒してください。txtTotalExp ゲームオブジェクト上にフロート表示が生成されて、獲得した Exp 値が黄色い色で表示されれば制御成功です。 
エネミーを何体か倒して、生成される位置が毎回少しずつ違うことも確認してください。

 生成されたフロート表示は上方向へ向かって移動し、その後破壊されます。ここまで制御できていればすべて実装出来ています。


<実装動画 3.エネミーを倒したとき、UI の TotalExp 表示用のゲームオブジェクト上に「獲得した Exp 値」の数字を表示>
動画ファイルへのリンク


 以上でこの手順は終了です。

 次は 発展17 ーバレット用のボタンの作成ー です。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu



技術/知識(実装例)

2Dおはじきゲーム(発展編)

2D強制横スクロールアクション(発展編)

3Dダイビングアクション(発展編)

2Dタップシューティング(拡張編)

レースゲーム(抜粋)

2D放置ゲーム(発展編)

3Dレールガンシューティング(応用編)

3D脱出ゲーム(抜粋)

2Dリアルタイムストラテジー

2Dトップビューアドベンチャー(宴アセット使用)

3Dタップアクション(NavMeshAgent 使用)

2Dトップビューアクション(カエルの為に〜、ボコスカウォーズ風)

VideoPlayer イベント連動の実装例

VideoPlayer リスト内からムービー再生の実装例(発展)

AR 画像付きオブジェクト生成の実装例

AR リスト内から生成の実装例(発展)

private



このサイト内の作品はユニティちゃんライセンス条項の元に提供されています。

管理人/副管理人のみ編集できます