概要
今回はplayerがItemに接触した時にログを出す処理を追加します。
以下gif画像は実装後の画像です。
開発環境
IDE:Rider
Unity:2020.3.42(LTS)
OS:Windows10
UnityEditor上の設定
Playerオブジェクト
Itemオブジェクト
ItemObjectにBoxColliderコンポーネントを追加されていることを確認します。
Is TriggerをONにします。
実装のポイント
PlayerとItemが接触したときの流れ
コード部分
ItemPickUp
ItemPickUp.cs
using System;
using UnityEngine;
public class ItemPickUp : MonoBehaviour
{
private void OnTriggerEnter2D(Collider2D collsion)
{
Item item = collsion.GetComponent<Item>();
if (item != null)
{
ItemDetails itemDetails = InventoryManager.Instance.GetItemDetails(item.ItemCode);
Debug.Log(itemDetails.itemDescription);
}
}
}
InventoryManager
InventoryManager.cs
using System.Collections.Generic;
using UnityEngine;
public class InventoryManager : SingletonMonobehaviour<InventoryManager>
{
private Dictionary<int, ItemDetails> itemDetailDictionary;
[SerializeField] private SO_ItemList itemList = null;
private void Start()
{
CreateItemDetailsDictionary();
}
private void CreateItemDetailsDictionary()
{
itemDetailDictionary = new Dictionary<int, ItemDetails>();
foreach (ItemDetails itemDetails in itemList.itemDetails)
{
itemDetailDictionary.Add(itemDetails.itemCode,itemDetails);
}
}
+ public ItemDetails GetItemDetails(int itemCode)
+ {
+ ItemDetails itemDetails;
+ if (itemDetailDictionary.TryGetValue(itemCode, out itemDetails))
+ {
+ return itemDetails;
+ }
+ else
+ {
+ return null;
+ }
+ }
}
参考
C#
Dictionary.TryGetValue(TKey, TValue)
Unity Editor コンポーネント
Unity スクリプト
OnTriggerEnter2D
その他
Section7 22 InventoryManager Class
github コミット分(個人確認用 privateなので見れません)