Unityで簡単なクリックゲーム作成【03:ターゲットの作成】

Unity初心者の方向けに簡単なクリック連打ゲームの作り方を紹介しています。
白い盤面の上を動き回る黒い点をクリックして黒く塗りつぶしていくゲームです。
非常にシンプルなゲームなので初めてゲームを作る人におすすめします。

PCのみとなりますが、こちらでプレイ可能です。

全部で5つの記事に別れています。

前回まででランダムで動く黒い点を作成するところまで出来ました。

今回は3回目です。
ターゲットマークを作って行きたいと思います。
ターゲットマークにはこの2つの機能を実装したいと思います。

  1. マウスカーソルに追従して動く
  2. 左クリックで黒い点を撃つ

今回は1番目のマウスカーソルに追従する部分を実装してみたいと思います。

今回このような感じになると思います。
では早速続きをやっていきましょう。

ターゲットオブジェクトの作成

まずターゲットの画像をHierarchyにドラッグしてゲームオブジェクトにします。
Spritesフォルダ内のTargetがそれに当たりますので早速配置します。
ゲームビューで見てみると非常に小さいです。

ターゲットを配置

これだと黒い点と見分けがつかないので大きくしてあげましょう。
Sprites内のTargetを選択しInspectorのPixels Per Unitの値を100から24にしてApplyしましょう。
先程よりも見やすくなったと思います。
Pixels Per Unitはシーンビューのマス目の中に何個のピクセルで表示するかという設定になります。
Targetの素材自体は縦横16ピクセルで作られてますのでPixels Per Unitの値を16にするとシーンビューのマス目と同じ大きさになります。
それだと大きすぎるので24にして若干小さくしています。

【Pixels Per Unitが100の場合】
Pixels Per Unitが100の場合

【Pixels Per Unitが16の場合】
Pixels Per Unitが16の場合

【Pixels Per Unitが24の場合】
Pixels Per Unitが24の場合

Pixels Per Unitに関してはこちらのブログで非常に解りやすく説明してくれています。

Targetのサイズの調整が済んだので必要なコンポーネントを追加していきましょう。
今回必要なのはCircleCollider2DとTargetを動かすためのC#スクリプトです。
CircleCollider2DはisTriggerにチェックを入れ、スクリプトに関してはScriptsフォルダ内にTargetControllerというC#スクリプトを新たに作成し追加します。
TargetのInspectorはこのようになりました。
TargetのInspector

ターゲットマークをマウスの位置に合わせて動かす

続いてマウスの動きに合わせてTargetを動かしていきましょう。
TargetControllerを編集していきます。
やることは以前このブログでも紹介したマウス座標にキャラクターをついてこさせる記事とほとんど同じです。
このようなコードになりました。

実際に起動するとTargetがついてくるのがわかります。
マウス座標とターゲットの同期

しかしこれだとマウスカーソルが画面外に出た時にTargetも出てしまい見えなくなってしまいます。
次はこれを修正していきたいと思います。

移動範囲の設定

今回のゲームでTargetが移動出来る範囲はMapの子要素で敷き詰められたWhiteChip内に制限したいと思います。
処理の流れを整理するとこのような感じになるでしょうか。

  1. Target移動範囲用の変数を作る
  2. WhiteChipの角(最大)のX,Y座標取得
  3. Targetの移動範囲用変数にわたす
  4. わたされた座標を元に移動範囲を制限する

これに沿って実装していきたいと思います。
まずTargetControllerに変数を2つ用意します。
そしてMapControllerにはTargetControllerをアタッチするためにSerializeFieldを用意します。

【TargetController】

【MapController】

続いてHierarchyでMapを選択しInspectorにTargetをアタッチします。
このようになりました。
Mapコントローラーにターゲットをアタッチ

MapControllerからTargetControllerに座標を渡して行きます。
修正するのはMapControllerのみとなります。
Start関数内に追記します。

これでMapControllerからTargetControllerのxLimit,yLimitに値を渡すことが出来ました。
最後にこの値を元にTargetの移動制限処理を記述していきます。

これでTargetは範囲内のみの移動となりました。
ターゲットの異動範囲制限チェック

移動範囲の制限に関しては過去に記事にしていますので良かったら参考にしてみてください。

次回は動くターゲットと黒い点が重なった時に左クリックをしたら白い部分が黒く塗られるという処理を実装していきたいと思います。

ここまでの記事はgithubにアップしてありますので、よければ参考にしてみてください。

関連記事

最後までご覧頂いてありがとうございました。

MVP

MVPやDIも学べる

2Dローグライトアクションゲーム講座