Unityに関連する記事です

 バレット選択ボタンの制御について、2回の手順にわけて実装を行っていきます。

<実装動画 発射できる時間がなくなったバレットが発生したら、強制的に初期バレットを発射できるバレットとしてセットする。制限時間のあるバレットのバレット選択ボタンを押して、再度、そのバレットを選択できるようにする>
動画ファイルへのリンク


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

発展24 −バレット用の発射時間のボタン間の連動−
49.BulletSelectManager スクリプトと、BulletSelectDetail スクリプトを修正し、バレット間の繋がりを作る。バレット選択ボタンを押したら、他のボタンに制御をかける(ゲージが一時停止する)制御を追加する
50.BulletSelectManager スクリプトと、BulletSelectDetail スクリプトを修正し、バレット間の繋がりを作る。バレットの発射残り時間がなくなったときに強制的に初期バレットに戻し、発射時間を初期値に戻す制御を追加する



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

 ・foreach 文を利用した処理の実装例



49.BulletSelectManager スクリプトと、BulletSelectDetail スクリプトを修正し、バレット間の繋がりを作る。バレット選択ボタンを押したら、他のボタンに制御をかける(ゲージが一時停止する)制御を追加する

1.設計


 前回までの実装によって、各ボタンがそれぞれの制御を行う部分までは実装できました。
残っている2つの手順は、各ボタンだけではなく、1つのボタンの操作に連動して、残る他のボタンも合わせて制御を行うように、
バレット選択ボタン間の繋がりを作成して、すべてのボタンの制御を行う処理を実装します。

 このような制御を行うことで、1つ1つが独立しているボタンではありますが、その操作に連動して行う制御を実装出来るようになります。

〇1.バレット制御ボタンを押すと、発射できる残り時間に合わせて青いゲージが表示されて減少していく制御をする
〇2.初期バレットについては、発射できる残り時間の概念はなく、いつでもずっと発射ができるように制御する
◆3.発射できる残り時間のゲージが残っている場合に別のバレットを選択した場合には、ゲージの減少を一時停止する。再度、そのバレットを選択したら、残りのゲージ分から減少が再開する
 4.発射できる残り時間がなくなったバレットを選択している場合、強制的に初期バレットが発射できるように制御する。このとき、そのバレットは次に選択するときのために、発射時間を初期値に戻す制御も行う

 【3】の手順について、考えて設計を行います。



 現在はバレット選択ボタンが独立して制御されているため、2つ以上のバレット選択ボタンを押した場合、
新しく選択したボタンの残り時間のゲージが動くと同時に、前のバレット選択ボタンの残り時間のゲージは停止することなく動き続けます。
まずはこちらを制御することを考えます。

 イメージとしては、バレット選択ボタンを押したら、それまでに選択していたバレット選択ボタンに残り時間のゲージがある場合には、
それを一時停止してから、新しいバレット選択ボタンの残り時間のゲージが減少する、という形式になると思います。
このロジックを考えてみてください。

 バレット選択ボタン自体は独立していますが、それらの情報を List にまとめて管理しているスクリプトがあります。
List にはすべてのバレット選択ボタンが情報として操作できる状態になっていますので、こちらを活用してください。

<考えるべき処理>
 ・バレット選択ボタンを押すと、そのバレット選択ボタンは「装填中」となる
 ・List 内にある要素(バレット選択ボタンの ButtonSelectDetail スクリプト)を1つずつ順番に取り出して確認する
 ・確認する内容としては、そのバレット選択ボタンが現在「装填中」なのか、「未装填」なのかを判定し、評価する
 ・「装填中」のバレット選択ボタンについては、残り時間のゲージを表示して減少させる
 ・「未装填」のバレット選択ボタンについては、残り時間のゲージを表示している場合には、その減少を一時停止する
  初期バレットは残り時間のゲージの表示はないので、この処理は行わない

 最初の処理を行うのは各ボタンの OnClickBulletSelect メソッドになりますので、いずれかのボタンを押したら
そのボタンにアタッチされている BulletSelectDetail スクリプトの OnClickBulletSelect メソッドが実行されて
今までであれば、そのボタンを「装填中」にするだけでしたが、ここに「他のボタンを未装填」状態にする処理を実装する必要があります。
つまり、各ボタンがどのような状態になっているかを確認して、設定を行うことで連動した制御が可能になります。

 BulletSelectManager スクリプトにはバレット選択ボタンを管理している List がありますので、バレット選択ボタンを1つずつ順番に確認をする処理はこちらで制御するべきでしょう。
ここで「装填中」か「未装填」かを判定し、状態を切り替えることができれば、1つのバレット選択ボタンから、すべてのバレット選択ボタンの状態を制御出来るようになります。


2.BulletSelectManager スクリプトを修正


 設計に基づいて、バレット選択ボタンを押すと、他のボタンにも制御が行われるようにロジックを考えて実装します。
ここに処理が実装されていなければ、BulletSelectDetail スクリプトに処理を追加できないためです。

 ロジックの実行順番とスクリプトの処理の修正の順番が一緒になる必要はない、ことをいつも念頭において、どの処理から実装するかを考えてください。

 このスクリプトには生成しているバレット選択ボタンを管理している List がありますので、そちらを活用してください。
List は for 文や foreach 文を利用することによって、要素1つずつの内容を確認していく手法が実装出来ます。

 1つ目のボタンの情報を確認して、そのボタンに対して評価を行う、その後、次の手順として、次のボタンの情報を同じように確認して、
というように、繰り返し文を利用した連続処理を設計することが可能です。


BulletSelectManager.cs


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


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


 設計に基づいて、OnClickBulletSelect メソッドの修正を行います。
TODO 機能で表示している部分を適切な処理に変更しましょう。


BulletSelectDetail.cs


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


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


 スクリプトを修正し、処理の見直して、全体の流れを把握してください。
この手順で確認するべき内容を把握してから、ゲームを実行して、制御を確認してください。

 現在はどの状態まで制御が完成していて、まだ制御できていないのはどのようなことなのかを
自分でしっかりと処理を読み解いて確認をしてください。

<実装した制御内容>

 <= 自分の考えを確認してから制御内容を確認しましょう。


<実装動画>
動画ファイルへのリンク

 
 以上で実装は完了です。残っている実装を進めます。


50.BulletSelectManager スクリプトと、BulletSelectDetail スクリプトを修正し、バレット間の繋がりを作る。バレットの発射残り時間がなくなったときに強制的に初期バレットに戻し、発射時間を初期値に戻す制御を追加する

1.設計


 最後の手順となりました。この手順でも、バレット選択ボタン間の繋がりを用意して、それを利用することで1つのボタンを発端とし、
すべてのボタンに対して連動した処理を行うための制御を実装します。

<ボタンの制御の設計>
〇1.バレット制御ボタンを押すと、発射できる残り時間に合わせて青いゲージが表示されて減少していく制御をする
〇2.初期バレットについては、発射できる残り時間の概念はなく、いつでもずっと発射ができるように制御する
〇3.発射できる残り時間のゲージが残っている場合に別のバレットを選択した場合には、ゲージの減少を一時停止する。再度、そのバレットを選択したら、残りのゲージ分から減少が再開する
◆4.発射できる残り時間がなくなったバレットを選択している場合、強制的に初期バレットが発射できるように制御する。このとき、そのバレットは次に選択するときのために、発射時間を初期値に戻す制御も行う

 【4】の手順の設計とロジックを考えて実装を行います。



 各ボタンの連動の処理は、先ほどの手順で実装したように、List 内の要素である BulletSelectDetail スクリプトを1つずつ順番に取り出して、
その内容を確認することで適切な制御をおこなう、という手法が制御しやすい方法になります。この考え方、手法は応用が利きますので必ず取得してください。
今回実装する処理にも、この手法を利用しています。
 
 初期バレット以外のバレット選択ボタンには発射可能となる残り時間が設定されています。
現在は、この残り時間がなくなる = 0 になると、そこで発射処理は停止します。そのため、もう一度、そのバレット選択ボタンを押しても
再度、バレット選択ボタンにゲージは表示されず、バレットを発射できない状態になっています。

 この状態を改善することが目的です。

 発射できる時間がなくなったバレット選択ボタンについては、次回のために、再度、発射できる時間を再設定するようにします。
発射時間の現在値とは別に、発射時間の初期設定値を保持している変数がありますので、そちらを利用し、次にボタンを押されたときに備えます。
そうしておくことによって、残り時間がある限りはゲージが減少し、残り時間がなくなってからもう一度押すと、再度初期値からゲージの減少が始まる、という
ボタンとしてのサイクル化が実装出来ます。

 また発射できる時間がなくなったときに、そのままバレットが発射できなくなってしまうのは、ユーザビリティ的な考えを持つと不便な処理です。
そのため、発射できる時間がなくなったバレットの状態になったら、自動的に初期バレットを選択し「装填中」の状態にして
初期バレットをそのまま発射できるようにする制御を追加します。こうすることによって、発射できなくなったとしても、毎回初期バレットを逐一選択しなくても済みます

 自分がゲームを遊ぶ立場に立って、このような処理があった方が便利だな、親切だな、ということを考えて処理を見てみてください。


2.BulletSelectManager スクリプトを修正して、初期バレットの状態を「装填中」に変更する処理を追加する


 設計に基づいて、自動的に初期バレットを「装填中」に切り替える''ようにします。

 ボタンの状態を「装填中」にしたり、それに合わせて他のボタンを「未装填」にする制御はすでに実装されていますので、
そこに至るまでの処理を追加します。


BulletSelectManager.cs


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


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


 こちらも設計に基づいて、「装填中」のバレット選択ボタンの発射できる時間がなくなったら、
''残り時間を初期値にセットしなおす処理を追加します。残り時間がなくなったときの処理を実装します。
Update メソッド内に TODO 機能を利用して処理を書く場所を残してありますので、こちらを活用してください。

 このボタンでのみ行うべき処理は、「未装填」の状態にすることと、残り時間を初期値に戻すことです。
こちらの処理を実装してください。

 また、それに伴い、ボタン全体で行うべき処理もあります。それは初期バレットを「装填中」の状態にすることです。
このボタン全体で行うべき処理はすでに BulletSelectManager スクリプトにメソッドを準備しましたので、そちらを実行しましょう。


BulletSelectDetail.cs


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


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


 スクリプトを修正し、処理の見直して、全体の流れを把握してください。
この手順で確認するべき内容を把握してから、ゲームを実行して、制御を確認してください。

 現在はどの状態まで制御が完成していて、まだ制御できていないのはどのようなことなのかを
自分でしっかりと処理を読み解いて確認をしてください。

<実装した制御内容>

 <= 自分の考えを確認してから制御内容を確認しましょう。


<実装動画>
動画ファイルへのリンク


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

 次は 発展25 −バレット選択用ボタンのコストによる制御− です。

コメントをかく


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

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

Menu



プログラムの基礎学習

コード練習

技術/知識(実装例)

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

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

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

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

レースゲーム(抜粋)

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

3D脱出ゲーム(抜粋)

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

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

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

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

3Dトップビューアクション(白猫風)

VideoPlayer イベント連動の実装例

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

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

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

private



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

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