武器や攻撃範囲の強化・武器の売買ができるお店システムの作り方

Unity タワーディフェンスゲームの作り方


Unity入門の森オリジナル本格ゲーム制作講座はこちら
5種類の本格ゲームの全ソースコード公開・画像&動画による解説付き

前回(第8回)では、プレイヤーによる弓の配置と、UI画面を作り始めました。

前回の記事↓

プレイヤーの管理処理の作成 HPやゴールドの表示・弓矢のレベルアップ処理の作成
前回は弓(Bow)と矢(Arrow)を作成し、敵(Enemy)に攻撃できるようになりました。 前回の記事↓ 今回はプレイヤー(Player)を作成し、弓矢の配置やUI(HPなど)の表示をやっていきます。 プレイヤー(Player)...

今回はさらにUI画面を作り込み、弓オブジェクトのレベルや制作コスト・売却コスト等をやっていきます。


【Line登録者限定のプレゼントもあるよ!】

弓レベルの追加・コスト

まず弓のアップグレードが出来るように、弓にLVや、アップグレードコスト設定していきます。

スクリプト入れるためのフォルダ Assets/Scripts を第1回で作ってあると思いますので、今までに作成した各種スクリプトも都度Assets/Scriptsに移動しておきましょう。
それでは Assets/Scripts/Bowスクリプトを修正していきましょう。
  • 弓LV
  • LVに応じた攻撃範囲
  • LVに応じた攻撃速度
  • LVに応じたパワーアップコスト
  • LVに応じた売却額

を追加していきます。

順に説明していきましょう。 弓LVはメンバ変数 lv 宣言し、1にしておきます。

次にLvに応じた攻撃範囲用のプロパティ(ShotRange)を作成しています。

これはエクスプレッションボディ(expression-bodied)という書き方です。 = ではなく、 =>なので注意です。

ShotRange を参照する度に =>の右辺の式が処理されるイメージで考えておくと分かりやすいです。今回はlvが上がれば上がるほど攻撃範囲を広げたいので 1 + lv * 0.5f という計算式にしました。

Lvに応じた攻撃速度のプロパティ(ShotInterval)は次のようにしました。

lvが上がれば上がるほど攻撃速度は速くしたい(値を小さくしたい)ので Mathf.Pow 関数を使っています。 これは、第一引数 の値を 第二引数回乗算してくれます。すなわち0.9fをlv乗するという事です。 パワーアップコスト(Cost)はレベルアップさせるたびに高くさせたいので、100 * 1.5fのlv乗 を指定しています。

売却額(Price)はパワーアップコストの半分にしておきます。

そして、攻撃範囲や攻撃速度が今までは固定の数値でしたが、それぞれ ShotRange と ShotIntervalに差し替えているのが次の箇所になります。

保存をしてUnityEditorで挙動を確認してエラー等無いことを確認しておきましょう。

なお、今までの違いとしては若干攻撃範囲が狭くなり、攻撃速度が速くなっているはずです。

選択中の弓UI

既に配置をした弓をクリックすることで、内部的には選択状態(Player の selectBow に 選択した弓(Bow)が入る)になっていますが、画面上ではそれが分かりません。

選択中のBowの情報表示と、レベルアップや売却が行えるUIを作っていきたいと思います。 前回 PlayerStatusUI オブジェクトを作りました(Canvas/Iamge/)

これを複製(CTRL+D)して、PlayerStatusUI (1) を BowStatusUIと名前を変更し、同じく複製されているPlayerStatusUIは削除(右クリックしてRemoveComponent)します。

位置も重なってしまっているので Pos Yを下に下げます。 -260ぐらいが適当です。

選択中の弓に対するUIとしては

  • LV情報の表示
  • LVUPボタン
  • 売却ボタン

が必要になります。 子要素もそのまま複製されるため Text(HP)と Text(Gold)が BowStatusUI の子要素としてあるので、それぞれ下図のように修正します。

LvUpボタン

では、次にボタンオブジェクトを追加します。 HierarchyビューのBowStatusUIを右クリックして、UI→Buttonを選択します。

Buttonオブジェクトが作成されるので

  • 名前:Button(LVUP)
  • Source Image:tile

に変更します。 このButtonオブジェクトは最初から階層構造になっていて、Buttonの子要素にはTextがあります。Inspectorで設定していきます。

  • Font : Assets/Fonts/ShigotoMemogaki-Regular-1-01
  • Text : –
  • Font Style: BOLD
  • Font Size:40

次に位置・幅を修正します。 SceneビューのモードをRectToolに変更し(ショートカットキー:CTRL+T)

Button(LVUP)の幅と位置を調整しましょう。(間違って、Button(LVUP)の子要素のText(LVUP) を選択しないように気を付けましょう。) 今作った Button(LVUP) を複製(CTRL+D)し、さらに下に並べます。 名前は Button(SELL) としておきます。

BowStatusUI

では、選択したBowの情報をUIに反映させるスクリプトを用意します。 BowStatusUI に AddComponent→New Script → BowStatusUI として、BowStatusUIスクリプトを作成し、下記のように編集します。

続きを読む

このコンテンツはパスワードで保護されています。 コンテンツを読みたい方はUnity入門の森ショップ(https://unityforest.stores.jp/)で講座閲覧権を取得してね。

おさらいと次回予告

今回は弓関連のUIを追加し、レベルアップや売却が実際に出来るようになりました。
次回はついにこのタワーディフェンス講座 も最終回。

タイトルやゲームクリア・ゲームオーバーなどの「ゲームループ」部分を主に作って完成させていきます。

次回の記事↓

【ゲームの完成】ゲームループ処理の作成とレベルデザイン
前回(9回)は弓関連のUIを追加し、レベルアップや売却が実際に出来るようになりました。 前回の記事↓ 今回はついにこのタワーディフェンス講座も最終回。 タイトルやゲームクリア・ゲームオーバーなどの「ゲームループ」部分を主に作って完...


Unity入門の森オリジナル本格ゲーム制作講座はこちら
5種類の本格ゲームの全ソースコード公開・画像&動画による解説付き


【Line登録者限定のプレゼントもあるよ!】

コメント

  1. サウスケイ より:

    BowStatusUIを作ったタイミングで

    Assets/BowStatusUI.cs(23,40): error CS1061: ‘Player’ does not contain a definition for ‘SelectBow’ and no accessible extension method ‘SelectBow’ accepting a first argument of type ‘Player’ could be found (are you missing a using directive or an assembly reference?)

    とエラーが出てしまいます。どうしたらいいか教えて欲しいです。

    • サウスケイ より:

      BowStatusUIの最初のコード画像で23,24,25行目がSelectBowになっていました。
      それをselectBowに書き換えたところ、実行することができました。

タイトルとURLをコピーしました