Unityに関連する記事です

 ステージにコンディション用のシンボルを設置して、プレイヤーが侵入したらシンボルに応じたコンディションが付与される機能を実装します。


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


ステージのシンボルに侵入した際に、コンディションを付与する場合

設計


 ステージのシンボルに侵入した際に、シンボルに応じたコンディションを付与する場合の実装例です。
今回は、視界を広げるコンディションを付与する処理を設計して実装します。

 処理の流れは、他のコンディションも同じですので、このサイクルが理解できれば、同じ要領で別のシンボルに応用できます。

 1.プレイヤーがコンディション用のシンボルに侵入する

 2.コンディション用のシンボルに設定されているコンディションをプレイヤーに付与する

 まずはシンボル用のゲームオブジェクトを作成し、その後、スクリプトを作成します。


コンディション用のシンボルのゲームオブジェクトを作成する


 製作方法は自由です。参考用に画像を掲載しておきます。













 シンボル用の画像を設定したら、MaskInteraction の設定を Visible Inside Mask に設定してください。
また、Sorting Layer の設定も行ってください。この2つの設定が出来ていないと、画像の優先順位が変わってしまったり、マスクが機能しません。















PlayerCondition_View スクリプトを作成する


 ステージシーンの視界の範囲を制御するコンディション用のスクリプトを作成します。
このスクリプトを先ほど作成したシンボルのゲームオブジェクトにアタッチします。 
作成するスクリプトは1つですが、ConditionType を View_Wide か View_Narrow にすることにより、設定を変えることで共有して利用できます。

 このスクリプトは、プレイヤーがコンディションのシンボルに侵入した際にアタッチされるように設計されています。
そのため、現時点では、作成だけすれば完了です。


PlayerCondition_View.cs

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



ConditionItemSymbol スクリプトを作成する


 シンボルに侵入した際に、実際にプレイヤーに付与されるスクリプトを作成します。
このスクリプトも ConditionType の部分の設定を変えることで、複数のコンディション用のシンボルに適用できます。

 スクリプトが完成したら、コンディションのシンボルのゲームオブジェクトにアタッチします。


ConditionItemSymbol.cs

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



インスペクター画像



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


 ゲームを実行して、コンディション用のシンボルにプレイヤーを侵入させます。
プレイヤーのゲームオブジェクトに PlayerCondition_View クラスがアタッチされて、ゲーム画面の視界部分(マスクのサイズ)が変化すれば制御成功です。


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

 シンボルに侵入し、PlayerCondition_View クラスがアタッチがされているにもかかわらず、マスクのサイズが変わらない場合、
マスクを制御するための情報がアサインされておらず、エラーになっている可能性があります。

 SymbolManager ゲームオブジェクトの SymbolManager クラスをインスペクターで確認し、SpriteMaskTran 変数にアサイン情報が登録されているかを確認してください。
この部分の手順は、ターン機能の実装内に掲載していますので、読み直してみましょう。


ItemSymbol_View_Wide ゲームオブジェクトをプレファブにして、StageGenerator ゲームオブジェクトに設定する


 処理が問題なく動作した場合、ItemSymbol_View_Wide ゲームオブジェクトをプレファブにして、ヒエラルキーより削除してください。

 その後、StageGenerator ゲームオブジェクトを選択し、インスペクターより、生成対象となるシンボルとして ItemSymbol_View_Wide ゲームオブジェクトのプレファブを登録してください。
こうすることで、エネミーシンボルやアイテムシンボルと同じように、コンディションのシンボルも生成されるようになります。生成する割合も自由に設定してみてください。


インスペクター画像



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


 ゲームを実行し、コンディションのシンボルが自動生成されているかを確認してみください。

 生成されたシンボルを SymbolManager ゲームオブジェクトの子オブジェクトとして生成されて、SymbolList 変数にも登録されます。


<実装画像 



<実装画像◆




<考えよう!> 視界を狭くするコンディションのシンボルを作成する


 視界を広くするシンボルのゲームオブジェクトを複製して、視界を狭くするコンディションを付与するシンボルの作成に挑戦しましょう。
シンボル用の画像と、コンディションの設定以外はそのまま利用可能です。








 デバッグを行い、動作に問題がなければ、プレファブにします。
そして、視界を広げるシンボルと同じように StageGenerator ゲームオブジェクトに登録して、自動生成するようにしてください。


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



<考えよう!> メソッドを共有化する


 ConditionItemSymbol クラス内の TriggerSymbol メソッド内のコンディションの種類を調べて、プレイヤーに付与する処理は、
Stage クラス内にある AddDebuff メソッド内の処理とほぼ同じ内容になっています。(前半が少しだけ違います)

 このような場合、ConditionItemSymbol クラス内の TriggerSymbol メソッド内に、Stage クラスにある AddDebuff メソッド内の処理を共有して利用することができれば、
ConditionItemSymbol クラス内の処理がすっきりします。

 どのようなロジックを組んで設計すれば、同じような処理を1箇所にまとめて共有化することができるのか、設計と実装に挑戦してみてください。
ただし、処理の前半が違ったりしますので、どこまでをメソッド化し、どこまでを共有化するのか、という部分をしっかりと考えてロジックを組む必要がありますので、
そのまま AddDebuff メソッドの処理を持ってくればいいという訳でありませんので、注意が必要です。

 2つのメソッドを精査し、処理の共通している部分がどこかを理解した上で、その部分を共有化するにはどうすればいいのかを考えてみてください

コメントをかく


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

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

Menu



プログラムの基礎学習

コード練習

技術/知識(実装例)

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

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

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

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

レースゲーム(抜粋)

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

3D脱出ゲーム(抜粋)

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

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

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

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

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

VideoPlayer イベント連動の実装例

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

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

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

private



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

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