Unityに関連する記事です

 バレット選択ボタンのオン・オフの切り替えを、ボタンのコストと Exp の現在値とを比べて確認して、切り替えするよう制御を行います。
Exp の現在値がバレット選択ボタンのコストの値を上回ると、そのバレット選択ボタンが押せるように制御します。

 バレット選択ボタンを押すと、その時点でも再度コストと Exp の確認が入り、Exp の値がコストを満たさない、選択していないバレット選択ボタンがある場合には
そのバレット選択ボタンは押せない状態に切り替わるように制御します。


<実装動画 .丱譽奪帆択ボタンを押すと、ボタン上に表示されているコスト分の支払いが発生し、Exp より減算されて、Exp の横にフロート表示が生成される>
動画ファイルへのリンク


<実装動画◆.押璽犬残っているバレットは切り替えてもコストの支払いは発生しない。ゲージがなくなると再度コストの支払いが発生する>
動画ファイルへのリンク


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

発展27 −バレット選択用ボタンのコストの支払い処理とボタンのオン・オフ制御の連動−
54.BulletSelectManager スクリプト、BulletSelectDetail スクリプトを修正し、バレット選択ボタンを押した際にコストとして Exp の値を更新し、バレットのコストを確認し、ボタンが押せるようになるか判定を行い、ボタンの制御を行う



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

 ・if文の条件式に戻り値を持つメソッドを利用する場合の実装例
 ・引数に条件式を利用する方法
 ・プロパティを自作する



54.BulletSelectManager スクリプト、BulletSelectDetail スクリプトを修正し、バレット選択ボタンを押した際にコストとして Exp の値を更新し、バレットのコストを確認し、ボタンが押せるようになるか判定を行い、ボタンの制御を行う

1.設計


 コストと Exp によるボタンのオン・オフ切り替え処理のロジックが実装出来たら、次は、コストの支払い処理と、それに関連する処理を考えていきます。

 押せるようになったバレット選択ボタンの押すことで設定されているコスト分の Exp を減算するようにします。
Exp の値は GameData スクリプトが管理していますので、EnemyController でも利用しているメソッドを活用しましょう。
コストの設定値はマイナスではありませんので、引数でコストを渡す際にはマイナスをつけるか、受け取ったメソッド内でマイナスをつけることを忘れないでください。
誤って両方の処理でマイナスをつけてしまうと加算処理になりますので注意します。

 このとき大切なことは、この処理を各ボタンで実装せずに、BulletSelectManager スクリプトにおいて処理を実装する設計にすることです。

 コストを支払うということは、Exp の現在値がマイナス方向に更新されます。
そのため、今回選択していないバレット選択ボタンのコストの値と Exp の値を再計算しないとなりません。
なぜならば、コストが足りない状態なのにボタンが押せてしまう状態が発生してしまうためです。

 また画面上に表示する Exp の値も更新しなければなりませんので、これらの処理をまとめて
BulletSelectManager スクリプト側に用意しておいて、そちらでコストの支払いと、これらの関連処理を実行してもらうように考えてみてください。
ボタン(BulletSelectDetail スクリプト)側では、その用意したメソッドにコストの値を引数として渡して呼び出すようにする、ということです。

 この処理を実装することで、コストを支払った際に Exp の現在値を元に再度ボタンのオン・オフの切り替えが行われるため、
現時点でコストの値よりも Exp の値が低くなっているバレット選択ボタンについては押せなくなる制御が働きます。
 
 一度コストを支払って発射可能になったバレットはゲージが残っている間は再度ボタンを押して切り替えが可能で、コストを支払うことなくバレットが発射できます
ゲージがなくなり、再度、ボタンが押せるようになった場合には、そこでまたコストの支払いが発生します


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


 今回の処理については、BulletSelectManager スクリプトと BulletSelectDetail スクリプトの両方で
お互いの処理を呼び出す処理を実装するため、両方の実装が終了しないとエラーが出る状態になります。

 if 文の条件式として、戻り値を持つメソッドを実行して取得する実装例を提示しています。



 設計でも説明しましたが、各バレット選択ボタンのコストの支払いや、UI (Exp の現在値)への表示更新
またコスト分のフロート表示なども行ってから、再度各バレット選択ボタンのコストと Exp の現在値を確認する処理を実行します。
今回は引数として受け取ったコストの値を、メソッド内でマイナスにして利用しています。

 必要になる制御はどのような内容になるかを考えてロジックを考えて実装を行いましょう。

 BulletSelectDetail スクリプト側に「コストの支払い状態」を管理する変数を用意しますので、
そちらを利用することによって、各バレット選択ボタンのコストの支払い状態が確認できます。
これを利用して、コストの支払い済であればボタンを活性化する処理を、コストと Exp によってボタンのオン・オフの切り替えを行うメソッド内に追加実装します。

 この部分の制御はうまく制御しないと、恐らく予期しない動作しか起こさなくなります
1つ1つの処理をしっかりと把握してロジックを組みこんでいくことが大切です。


BulletSelectManager.cs


 スクリプトを作成したらセーブします。


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


 設計に基づいて、処理のロジックを考えて実装を行います。
コストを支払っている状態を確認できるように、専用の変数を作成して管理を行うようにしましょう。
型は任意ですが、bool 型が管理しやすいです。どちらの状態を「コスト支払い済」とするか、自分で設計を考えてから運用してください。

 コストを支払うタイミングとしては、ボタンを押したタイミングが理想だと思いますので、
OnClickBulletSelect メソッド内の TODO 機能の部分に処理を追記していきます。
このとき、コストの支払い有無をきちんと制御できないと、一度支払って発射できる状態になっているのにもかかわらず
再度コスト分引かれてしまうといった不具合が生じやすくなります。

 発射できる時間が終了したバレットは、再度コストを支払うことで、また発射できるようになりますので、
ゲージがなくなったタイミングでコストの支払いを無しの状態に戻すようにしましょう。

 コストの支払い用の変数の管理には、何回も利用することが前提にありますので、メソッドやプロパティを利用することを検討してください。


BulletSelectDetail.cs


 スクリプトを作成したらセーブします。


4.応用<isCostPayment 変数のプロパティを作成する>


 GetStateBulletCostPayment メソッドと SetStateBulletCostPayment メソッドの代わりに、
isCostPayment 変数のためのプロパティを作成して、この2つのメソッドと同じ働きをする処理を実装してみてください。

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



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


 スクリプトの修正が済んだら、処理の流れを確認してください。
コストの支払いに合わせてボタンが制御されることになりますので、どの状態になったら、どのオブジェクトが、どのように制御されているのか正常であるのか
それを自分で把握できていることが大切になります。何故ならば今後も含めて、様々な処理の修正を行うには、処理の流れをつかんでいる必要があるためです。


<実装動画 .丱譽奪帆択ボタンを押すと、ボタン上に表示されているコスト分の支払いが発生し、Exp より減算されて、Exp の横にフロート表示が生成される>
動画ファイルへのリンク


 バレットコストの支払いに合わせてボタンの制御処理と、Exp 上にフロート表示が生成されていれば制御成功です。
フロート表示の色は青い色の数字になっていて、マイナス表記がついていれば制御成功です。

 一度コストを支払っているバレットのボタンは、ゲージが残っている間は再度ボタンを押して切り替えが可能で、コストを支払うことなくバレットが発射できます
ゲージがなくなり、再度、ボタンが押せるようになった場合には、そこでまたコストの支払いが発生します
その場合には、コストの支払いがあることを伝える意味も含めて、再度、コストの値がボタン上に表示されるようになります(ゲージがある場合には、コストの値は消えていることがわかります)。


<実装動画◆.押璽犬残っているバレットは切り替えてもコストの支払いは発生しない。ゲージがなくなると再度コストの支払いが発生する>
動画ファイルへのリンク


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

 次は 発展28 ーバレットの種類による性能変更の追加ー です。

コメントをかく


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

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

Menu



技術/知識(実装例)

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

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

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

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

レースゲーム(抜粋)

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

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

3D脱出ゲーム(抜粋)

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

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

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

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

VideoPlayer イベント連動の実装例

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

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

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

private



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

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