
ごきげんよう、Budding Lab.編集部のゆくすぃです!
「MONSTER HUNTER WILDS」が盛り上がっていますね。
今回もオトモアイルーが反則的に可愛いです!
ゲームが大好きな皆さんなら、一度は「自分でゲームを作ってみたい!」と、思ったことがあるのではないでしょうか?
本連載では、ゲーム開発初心者のゆくすぃが、基礎的なスクリプトだけを使って、超入門・2D脱出ゲームの作り方を解説します!
本記事は、第8回「アイテムの入手編」です。
プログラミングの専門知識がなくたって、画像や音楽作成アプリが使えなくたって、案外、ゲームって作れるものです。興味が湧いたなら、ぜひ挑戦してみてください!
ゲーム開始時の画面を作る
現時点では、Unity上に配置されたお菓子(Candy1 – 6)や脱出口(Exit)がすべて表示された状態です。まずは、ゲーム開始時の画面になるよう、お菓子や脱出口の表示・非表示を整えましょう。
ゲーム開始時に表示されているもの
- Room1のCandy1
- Room2のCandy2
- Room3のCandy3
ゲーム開始時に非表示のもの
- Room1のExit
- InventoryのCandy4, Candy5, Candy6
Hierarchyウインドウで非表示にしたいゲームオブジェクトを選択し、Inspectorウインドウにあるゲームオブジェクト名左横のチェックボックスを外します。


これだけで表示・非表示を切り替えることができます。
非表示にする必要のあるゲームオブジェクトすべてで、このチェックボックスを外してください。
ゲーム開始時の画面


アイテム入手の表現方法
画面上でクリックされたアイテムが消えて、アイテム欄にアイテムが入る・・・これがアイテム入手の一連の動きです。これを基礎的なスクリプトで行うには、どうすれば良いでしょう?
- クリックされたアイテムを非表示にする
- アイテム欄のアイテムを表示させる
このように、アイテムの表示・非表示を切り替えるだけで、あたかも、画面上のアイテムを入手して、アイテム欄に取り込んだように見せることができます。


アイテムの表示・非表示を制御する
スクリプトを書く
早速、アイテムの入手・・・もとい、アイテムの表示・非表示を制御するスクリプトを書いていきます。
まず、ProjectウインドウのScriptsフォルダの中に「C# Script」を新規作成し、名前を入力して確定します。ここでは「ItemController」としました。
1 using System.Collections;
2 using System.Collections.Generic;
3 using UnityEngine;
4
5 public class ItemController : MonoBehaviour
6 {
7 [SerializeField] private GameObject _getitem; // GameObject型の変数_getitemを定義
8
9 public void ItemShow()
10 {
11 _getitem.SetActive(true);
12 }
13
14 public void ItemHide()
15 {
16 this.gameObject.SetActive(false);
17 ItemShow();
18 }
19 }
7行目で「GameObject変数:_getitem」を定義しています。
これにより、Inspectorウインドウの「変数:_getitem」で、表示・非表示を制御したいゲームオブジェクトを指定できるようになります。
9行目から12行目の「ItemShowメソッド」で「変数:_getitem」に指定したゲームオブジェクトを表示しています。SetActive関数の引数に「true」を与えると、ゲームオブジェクトは表示した状態(アクティブな状態)になります。
14行目から18行目の「ItemHideメソッド」で、このスクリプトがアタッチされているゲームオブジェクト(this.gameObject)を非表示にしています。SetActive関数の引数に「false」を与えると、ゲームオブジェクトは非表示(非アクティブな状態)になります。
さらに「ItemShowメソッド」を呼び出して「変数:_getitem」に指定したゲームオブジェクトを表示しています。
スクリプトをアタッチする
Room1に配置したCandy1を例に説明します。
- Room1のCandy1をクリックする
→ Candy1を非表示にする - 入手したCandy1がInventoryに入る
→ InventoryのCandy5が表示される
※Candy1はCandy5と、Candy2はCandy4と、Candy3はCandy6と対応させている。
HierarchyウインドウでCandy1を選択し、Inspectorウインドウで「Add Component」から「スクリプト:ItemController」をアタッチします。すると「変数:GetItem」を指定できるようになるので「Candy5」を参照させます。


OnClickイベントの「+(Add to the list)」をクリックし「None(Object)」にHierarchyウインドウのCandy1をドラッグ&ドロップします。「NoFunction」のドロップダウンメニューから「ItemController >ItemHide」を選んでクリックします。


このように設定することで「ItemHideメソッド」により「Candy1を非表示 / Candy5を表示」という処理が一度に行われ、Candy1を取得することができます。
設定ができたら、再生モードにして動作確認してみましょう。
同様に、Room2に配置されたCandy2、Room3に配置されたCandy3についても設定してください。



以上で、アイテム入手の表現はバッチリです!
意外と簡単で拍子抜けしたのではないでしょうか?
でき得る限りシンプルな方法でやりたいことを実現する・・・これがとても大切なんです!
まとめ
今回の記事では、アイテムの入手について解説しました。
脱出ゲームにおいて「アイテムの入手」は特に重要なイベントの一つですが、実現方法はとてもシンプルでした。
一見、込み入っていそうな現象を、実現可能なものに分解して捉えることが、ゲーム開発では大切ですし、常に求められる視点だと感じています。
次回は、【第9回】超入門!Unityで2D脱出ゲームを作ろう!「クリア判定編」です。
以上、最後まで読んでいただき有難うございました!