Unityで3D脱出ゲーム

Unity 3D脱出ゲームの作り方その9:ズームオブジェクトを作成する方法

2020年12月12日

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のズームオブジェクトが
生成されて表示されます。

以上で「ズームオブジェクトの作成」
の目標は達成です!

スポンサーリンク

-Unityで3D脱出ゲーム