Unityで作る3D脱出ゲームの作り方を紹介している記事その9です。
僕が所属しているオンラインサロンの
先生である嶋津さんが作成された動画を
見ながら勉強した内容について、
「3D脱出ゲームの作り方」
としてまとめている記事になります。
その9となるこの記事では、
「アイテムをズームした時のズームオブジェクトを作成する方法」
についてお伝えしています。
参考となる動画はこちらです。
【Unity3D】脱出ゲームの作り方 # 09ズームオブジェクトの作成
Udemyの場合は、
セクション6の49
「アイテムズームの実装#5 ズームオブジェクトの作成」
セクション6の50
「アイテムズームの実装#6 データベースから生成」
セクション6の51
「アイテムズームの実装#7 アイテムの多様化」
の内容となります。
この動画で勉強すること
▶︎ズームパネルにズームオブジェクトを表示する。
目標1
ズームオブジェクトのプレハブを作る。
=>ZoomCanvasのObjParentにCubeを配置する。
=>ZoomCanvasの設定をする。
=>Cubeの編集を行ってプレハブ化する。
目標2
スクリプトからコードでズームオブジェクトを生成する。
=>Itemスクリプトの編集をする。
=>ItemGeneraterスクリプトの編集をする。
=>ZoomPanelスクリプトの編集をする。
目標3
ズームパネルを閉じた時や、
ズームボタンを押した時に
ズームオブジェクトを消す処理を作る。
=>ZoomPanelスクリプトの編集をする。
Itemスクリプトのコード
ズームオブジェクトを作成するために
編集したItemスクリプトのコードは
以下となります。
using System;
using UnityEngine;
[Serializable]
public class Item
{
//列挙型:種類を列挙する
public enum Type
{
Cube,
Ball,
}
public Type type; // 種類
public Sprite sprite; // Slotに表示する画像
public GameObject zoomObj; // 生成するズームオブジェクト
public Item(Type type, Sprite sprite, GameObject zoomObj)
{
this.type = type;
this.sprite = sprite;
this.zoomObj = zoomObj;
}
}
ItemGeneraterスクリプトのコード
今回編集したItemGeneraterの
コードは以下となります。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ItemGenerater : MonoBehaviour
{
[SerializeField] ItemListEntity itemListEntity = default;
// どこでも実行できるやつ
public static ItemGenerater instance;
private void Awake()
{
if (instance == null)
{
instance = this;
}
}
public Item Spawn(Item.Type type)
{
// PickupObjスクリプトのstart関数で実行する
// itemListの中からtypeと一致したら同じitem(データ)を生成して渡す
foreach (Item item in itemListEntity.itemList)
{
if(item.type == type)
{
return new Item(item.type, item.sprite, item.zoomObj);
}
}
return null;
}
// 生成するズームオブジェクトを返す関数(ZoomPanelスクリプトで使用)
public GameObject GetZoomItem(Item.Type type)
{
foreach(Item item in itemListEntity.itemList) //アイテムリストの数だけ繰り返す
{
if(item.type == type) //アイテムリストのタイプと引数のタイプが同じなら
{
return item.zoomObj; //そのアイテムのズームオブジェクトを返す
}
}
return null;
}
}
ZoomPanelスクリプトのコード
今回編集したZoomPanelの
コードは以下となります。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ZoomPanel : MonoBehaviour
{
[SerializeField] GameObject panel = default;
[SerializeField] Transform objParent = default;
GameObject zoomObj;
// やること
// ・アイテムを選択していたら
// ・Zoomボタンが押されたら、パネルを表示
public void ShowPanel()
{
Item item = ItemBox.instance.GetSelectedItem();
if (item != null) // アイテムが選択されていたら
{
Destroy(zoomObj); // 生成したズームオブジェクトを削除する
panel.SetActive(true);
// ・(アイテムを表示)
// ObjParentにアイテムを生成する
GameObject zoomObjPrefab = ItemGenerater.instance.GetZoomItem(item.type);
zoomObj = Instantiate(zoomObjPrefab, objParent); //アイテムをObjParentに生成する・zoomObjとして保持
}
}
// ・Closeボタンが押されたら、パネルを非表示
public void ClosePanel()
{
panel.SetActive(false);
Destroy(zoomObj); // 生成したズームオブジェクトを削除する
}
}
ズームオブジェクトの作成で勉強したことのまとめ
3D脱出ゲームの作り方その9
「ズームオブジェクトの作成」で
勉強した内容についてのまとめです。
・ズームオブジェクトの作成を
するには、まず表示するための
オブジェクトを作成してプレハブ化します。
・次に、プレハブ化した
ズームオブジェクトをコードから
生成するためにC#スクリプトの
編集をします。
・そしてズームパネルを消した時や
ズームボタンを押した時に、
生成したオブジェクトを削除する
コードを書きます。
今回の内容を実践してPlayボタンで
実行すると、
CubeをZoomしたときは、
Cubeのズームオブジェクトが
生成されて表示。
BallをZoomした時には、
Ballのズームオブジェクトが
生成されて表示されます。
以上で「ズームオブジェクトの作成」
の目標は達成です!