現職とフリーランスの仕事が重なりゲームを作る余裕がなくなりました(笑)ですが、忙しいを言い訳にゲーム作りを中段したくないのでめちゃくちゃ頑張って余裕を作りちょっとでもゲーム作りを進めていきます。今回はライフシステムを作っていきます。処理としては内部で数値を変更してその数値をHUDに反映させる感じですね。Life_Managerを作り、それぞれのライフオブジェクトのスプライトを変更するように命令しましょう。ライフ管理を作るまずは司令塔となるLife_Managerクラスを作ります。やることはすごく単純です。子オブジェクトである全てのライフオブジェクトのスクリプトを取得プレイヤーのステートを取得して監視ステートの数値を見て該当する子オブジェクトのスクリプトを操作といった感じですね。ライフのほかにも魔力ゲージやアイテム所持数等も操作しようと思ったのですが、スクリプトが混雑になってしまうのを避けるためにそれぞれにマネージャーを設けるようにします。それぞれにマネージャーを持たせるという形をとりましょう。それではLife_Managerクラスになります。}}今回はリストではなく純粋に配列クラスを使いました。いうのも、ライフオブジェクトは20個固定なのでリストにする必要はなくなりました。微々たるさかもしれませんが可変のリストよりも固定の配列のほうが処理速度は速い(はず)なのでシンプルにわかりきっていて配列化できるところはリストを使わず配列にしておきましょう。子オブジェクトの取得は親である自身のtransformをforeachで回すと子を取得できます。あとはステートのライフをUpdateで監視しておき、数値が減ったら子のオブジェクトを指示するだけです。子を作るので親やここで一旦とめます。子は数値を見てスプライトを変更するだけ子オブジェクトの役割は親から渡された値をもとにスプライトを変更するだけの仕組みです。簡単ですね!イメージ的には指示されたプラカードを表示するだけの役目といった感じでしょうか。0はグラフィックなし1はハートが空2はハートが半分3はハートが満タンといった具合に決めましょう。ハートの数は20個ですが、ハート半分の概念があるので数値的には最大HP40となります。間違ったハートの減り方とかはしなくなるのでしっかりと作りこみましょう。スプライトの変更はオブジェクト自体にスプライトを登録しておいて、スクリプトで切り替えるというのが基本的な手法です。宝箱の仕組みでやったことと同じすね。}}Life_Childrenとなっていますが、Life_Managerの子クラスというわけではないです。親側からの指示で値を変更できれば良いです。UnityEditorからいじられるようにpublicのSprite配列を作ってサイズを4としましょう。先ほども言いましたが0はグラフィックなし1はハートが空2はハートが半分3はハートが満タンでスプライトを登録しましょう。0の時は非表示ですがSpriteがnoneだとエラーが起きそうなので、透明のスプライトを入れておくと安全かもしれません。0なら非表示っていう仕組みにしてしまってもいいですが、スプライトを変更するだけのほうが楽なのでそうしました。これで準備が整いましたので早速ダメージの増減をしてみましょう。ダメージを受ける仕組みを作るダメージの仕組みを作るのは結構面倒くさいです。フローチャートを考えてみましょう。判定にぶつかるダメージを受けるノックバックする点滅させる(任意)点滅中は無敵時間にする点滅を解除するといった感じにダメージを受ける期間の制御してやる必要があります。ないとダメージを受けた瞬間連続してダメージを受けてしまうので速攻クソゲーになります。1つずつ作っていきましょう。判定にぶつかるまずは判定を作らないとどうしようもありません。これは何度もやってきているので簡単ですね。移動判定で使ってしまっているのでここにダメージ処理を書くと見づらくなってしまいます。専用のDamage_Playerスクリプトを作りましょう。}}モンスターや壁の出っ張りなんかの場合はOnCollision~を使いますが、ダメージ床等の乗ることができるものはOnTrigger~を使います。シンプルにダメージ床を作ることにしました。例によってドット絵はご自身でご用意ください。シンプルに2DスプライトにBoxCollider2Dをアタッチして、OnTriggerにチェックを入れただけのオブジェクトです。タグは「DamageTrap」というものを作って与えています。そこでDamage_Playerをアタッチしたプレイヤーがぶつかると、ログが出るようにしました。あとはこれにダメージ処理やらノックバック処理やらを加えていく感じですね。ダメージの仕組みを作る今回はタイトルの通りダメージの増減を作るのが目的なのでノックバックは次回に回しましょう。ダメージ床であればノックバック無しでその場でダメージを受けるゲームは多いのでそれにならって作ってみましょう。onTriggerEnterは入った瞬間だけ関数が動くので都合がいいですね。判定に触れたらプレイヤーのHPを1つ減らしてみましょう。}}入りなおすたびにダメージが減っていっていますね。あとはこの数値が変化したらHUDに通知がいくようにしてLife_Managerが子のスプライトを変更させてハートの減少を実現します。今回はここまでにしておきましょう。次回は無敵時間とノックバックの実装をしてみましょう。12/20なおキーヌ某なんでも屋企業のシステム管理者を務めつつリーマンからの解放を目指して奮闘中。FE&BE開発・Webデザイン・DTPデザイン・SEO・Webライティング等一人である程度のクオリティで大体のことが出来るなんでもエンジニア。小学校の夢でもあったゲームクリエイターを目指して2019年から少しずつ積み上げています。ゲーム作りの参考書TOP。