Unityに関連する記事です

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

手順9 −的球との接触処理を実装−
17.手球スクリプトと的球スクリプトをそれぞれ修正し、ダメージ処理を追加する
18.的球スクリプトを修正し、体力が0になったときにアニメしながら消える処理を追加する



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

・DoTweenの補間機能と実装例◆Sequenceを引数で取得する



17.手球スクリプトと的球スクリプトをそれぞれ修正し、ダメージ処理を追加する

設計


 手球と的球が接触した場合ですが、現在のままではお互いにずっと跳ね返るだけゲームが進行しません。

 ここでは手球に攻撃力の値、的球に体力の値をそれぞれ追加し、手球と的球が接触した際には、手球の攻撃力の値分だけ、的球の体力値を減少させるようにします。
また接触を繰り返して体力値が0になった場合には、的球を破壊させる処理を、事前準備として、Debug.Logとして表示させておきます。


手球用スクリプトを修正する


 最初に手球用スクリプトを修正して、攻撃力の値を設定出来るようにします。
宣言フィールドに新しく power 変数を追加します。


CharaBall.cs

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




 スクリプトの修正が終了したら、CharaBallゲームオブジェクトを選択して、CharaBallスクリプトのインスペクターを確認します。
新しく追加した power 変数が表示されていますので、こちらに 5 を設定してください。これが的球の体力値に与える、ダメージ量になります。


CharaBallゲームオブジェクト CharaBallスクリプトのインスペクター画像



的球スクリプトを修正する


 続いて、的球スクリプトも修正します。こちらには宣言フィールドに hp 変数を追加して、体力値を設定できるようにします。

 OnCollisionEnter2Dメソッド内を修正し、手球と接触した際に、手球の攻撃力分だけ体力値を減少させる処理を追加します。
また体力値が0になった場合には、的球を破壊する処理を次の手順で実装しますので、体力値の減少処理が正常に動いているかを確認するためにDebug.Logを表示するようにします。


EnemyBall.cs

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




 スクリプトの修正が終了したら、EnemyBallゲームオブジェクトを選択して、EnemyBallスクリプトのインスペクターを確認します。
新しく追加した hp 変数が表示されていますので、こちらに 15 - 20 を設定してください。これが的球の体力値になります。


EnemyBallゲームオブジェクト EnemyBallスクリプトのインスペクター画像



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


 両方の設定が完了しましたので、ゲームを実行して確認していきます。

 接触するたびにDebug.Logが表示されますので、確認してください。
また破壊された際のDebug.Logは、設定した hp によって表示タイミングが異なります。
CharaBallスクリプトでは power の値を 5 に設定していますので、hp の値が 15 であれば3回、20であれば4回接触した段階で破壊されるDebug.Logが表示されます。


検証動画 Debug.Logに、手球と的球が接触するたびに的球の残り体力が表示され、体力0の際には的球 破壊と表示される
https://gyazo.com/d27ad24d5572cd580cdcfc02054004c5


 新しく実装した処理について確認を行う際には、このようにDebug.Logを適宜な位置に設定してください。
そうすることで処理の流れを追うことが可能になり、結果として、処理が正常なのか、あるいは正常ではないのかの判断を行うことができます。


18.的球スクリプトを修正し、体力が0になったときにアニメしながら消える処理を追加する

設計


 先ほどDebug.Logを入れた部分に、破壊の処理を追加していきます。
一度にまとめて複数の処理を入れるとエラーが出た場合に解消が難しいこともありますので、少しずつ処理を実装していくようにしましょう。

 破壊処理は新しく追加するDestroyEnemyメソッドを利用します。このメソッドには引数として Sequence 型を持っています。
後程説明しますが、破壊される際には回転しつつ、縮小しながら破壊するというアニメ演出を実装します。そのためにこの引数の値を利用しています。


的球スクリプトを修正する


 的球スクリプトも修正します。

 OnCollisionEnter2Dメソッド内を修正し、体力値が0になった場合に的球を破壊する処理を実装します。
また破壊される際には、回転アニメに縮小するアニメを追加することで破壊処理をアニメ演出させていきます。


EnemyBall.cs

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



<Sequenceを引数で取得する>


 OnCollisionEnter2Dメソッド内で宣言して使用しているSequenceを引数として受け取ることで、その処理の続きを別のメソッド内で追記することができます。

 このようにSequence処理を分けている理由ですが、的球の回転アニメは、的球が破壊されても、破壊されなくても処理を行うようにしたいためです。
始めから分けずに処理を書いてしまうと、破壊された時の縮小アニメの処理が破壊されていなくても常に一緒に実行されてしまうため、都合が悪いです。
そこで、破壊の有無にかかわらずに、実行したい回転処理だけは常に実行されるようにしておいて
破壊された際だけ、その回転アニメに対してJoinメソッドを使って、回転+縮小アニメが実行される処理にしています。


破壊の有無にかかわらず行う回転アニメ処理
 // Sequence初期化
  Sequence sequence = DOTween.Sequence();

  // 手球と接触すると敵を回転
  sequence.Append(transform.DOLocalRotate(new Vector3(0, 720, 0), 0.5f, RotateMode.FastBeyond360).SetEase(Ease.Linear));


破壊された時だけ追加される縮小アニメ処理 => Sequenceを引数で取得しているので、上記のAppendメソッドに対してJoinメソッドが実行される(回転+縮小アニメ処理になる)
  // 内側に小さくする ドロップ内容で消える処理を分岐
  sequence.Join(GetComponent<RectTransform>().DOSizeDelta(new Vector2(0, 100), duration).SetEase(Ease.Linear));

 このように分離することによって、共通化する処理と特定の状況下での処理を分岐で分けることができつつ、処理も簡潔に書くことが出来ます。



 新しく使用したDoTweenのメソッドを説明します。
DOSizeDeltaメソッド

 RectTransformコンポーネントに対して実行できるメソッドです。
第1引数には Vector2型 を指定し、WidthとHeightの値を操作できます。Vector2型の (x, y) が(Width, Height)として指定され、第2引数の時間をかけてサイズを変更することが出来ます。
今回は Width のみを 0 にすることで Scale ではなく、RectTransform の Width の Size を 0 にして縮小処理を行っています。これによって的球が縮小して内側に消えていくように見せています。


sequence.Join(GetComponent<RectTransform>().DOSizeDelta(new Vector2(0, 100), duration).SetEase(Ease.Linear));


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


 ゲームを実行して、的球の破壊の処理の動作を確認します。また破壊される場合には、的球が回転しながら縮小アニメするかも一緒に確認します。


検証動画 手球と接触時、破壊されないときは的球は回転、破壊されるときには回転+縮小アニメ
https://gyazo.com/701882a22da365b39a534545edc296ef


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

コメントをかく


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

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

Menu



プログラムの基礎学習

コード練習

技術/知識(実装例)

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

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

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

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

レースゲーム(抜粋)

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

3D脱出ゲーム(抜粋)

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

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

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

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

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

VideoPlayer イベント連動の実装例

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

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

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

private



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

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