【unity】3D脱出ゲーム作成_その10

3D脱出ゲーム

取得可能アイテムの設定

前回作成したItemManagerクラスに情報を渡すための取得可能アイテムを作成します。箱の中にあるナイフオブジェクトに以下スクリプトをアタッチしましょう。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;

public class ObtainableItem : MonoBehaviour
{
    [SerializeField] Obtainable obt;
    public void Clicked()//EventTriger>pointerClickに設定
    {
        obt.Obtain(gameObject);//ObtainableクラスのObtainメソッドを呼ぶ
    }
}
[Serializable]
public class Obtainable
{
    [SerializeField] string itemName;//インスペクターにアイテム名を入力
    GameObject gameObject;
    internal void Obtain(GameObject item)
    {
        gameObject = item;
        ItemManager.GetInstance().Obtain(this);
     //ItemManagerクラスのObtainメソッドを呼ぶ
    }
    internal string GetItemName()
    {
        return itemName;
    }
    internal GameObject GetGameObject()
    {
        return gameObject;
    }
}

ナイフオブジェクトがクリックされると下のObtainableクラスのObtainメソッドを呼びだし、さらにItemManagerクラスのObtainメソッドを呼びだす事でアイテム名を渡す流れになります。渡すのはあくまでアイテム名で、アイテムデータベースに存在していない場合はItemManagerクラスのObtainメソッドの条件分岐で弾かれるため気をつけましょう。

上:クリックイベントを追加自分自身をドロップダウン
下:itemNameはシリアライズ化されているので編集可
Knifeがある事を確認
itemNameがKnifeで間違いない事を確認

アイテムスロットに取得アイテムの情報表示

前回アイテムスロットのプレハブを作成しましたが、このままだと真っ白なスロットが表示されるだけなのでItemManagerクラスから参照します。以下スクリプトをアタッチしましょう。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Goods : MonoBehaviour
{
    string itemName;
    GameObject itemObject;
    Image image;
    Text text;
    int counter = 0;
    private void Awake()
    {
        GameObject ItemText = transform.Find("Text").gameObject;
        text = ItemText.GetComponent<Text>();//アイテムスロットの子TextのText
    }
    public void SetUp(Obtainable item)
    {
        image = GetComponent<Image>();
        this.itemName = item.GetItemName();
        image.sprite = ItemManager.GetInstance().GetItem(this.itemName)
                       .GetIcon();//ナイフのSprite
        this.itemObject = item.GetGameObject();
        text.text = ItemManager.GetInstance().GetItem(this.itemName)
                       .GetInformation();//キルサス
    }
    public void Select()
    {//アイテムスロットをクリックしたらキルサスを表示+色変更
        counter++;
        GameObject ItemText = transform.Find("Text").gameObject;
        if (counter <= 1)
        {
            image.color = new Color32(255, 255, 255, 100);
            ItemText.SetActive(true);
        }
        else if(counter <= 2)
        {
            image.color = new Color32(255, 255, 255, 255);
            ItemText.SetActive(false);
            counter = 0;
        }
    }
}

SetUpメソッドでItemManagerのGetItemメソッドを呼び、データベースの該当sprite,Informationを参照する事でアイテムスロットの更新完了となります。

spriteとともにTextのInformationも表示されると思いますが、一旦非表示⇄アイテムスロットをクリックしたら再表示するようにします。文字を目立たせるためColor32で目立たない色にしてみました。これで完了です。

アイテムを複製するだけで何度も同じ処理ができます。

コメント

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