# Inventory-System

### Overview - Video

The video linked below gives an overview of the Inventory System.  It shows a Unity Scene where the InventoryDisplay and 2 Buttons to add items have also been added to the Canvas.  Clicking the buttons adds items to the InventoryDisplay panel's slots.  Clicking on a slot that has an item, removes the item, and the console displays a message saying the item has been used.  Then the video shows the UML class diagram of classes

{% embed url="<https://youtu.be/SoOfx2N-wns>" %}
Video Overview of Inventory System
{% endembed %}

### Download, Install Inventory-System Code in Unity Package

**Download:** The code for these classes is included in the Inventory System Code package. Disabled: ***Download Link: Inventory System Code Unity Package - V1***   *updated 4/3/2020*

[**Download Link:  Inventory System - v2 - Unity Package updated 4/11/2020**](https://utdallas.box.com/s/p7ypi8yk3l4e6hb6ejwxzxwpn89e48d7)

**IMPORTANT:** Importing this package will overwrite all of the existing files listed below, you will need to fix some minor issues detailed in the section below.

![Inventory System Package Items To Import](https://2944698967-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M0-KLgOacVpbicrqehO%2F-M46d-M795czNqyMG9Os%2F-M4ADoV81P9WH-3wZGZQ%2FScreen%20Shot%202020-04-05%20at%2011.44.27%20AM.png?alt=media\&token=3fbed9b9-9c8c-4816-8a27-76cbeb77d896)

The above Unity package includes: the **ScriptableObject Factory** Package: [ScriptableObject Factory - box.com](https://utdallas.box.com/shared/static/tjdlm45kuo46dm5rsfcw641mdtpky33s.unitypackage)

*\*\* See Links at bottom of  this page for the tutorials, acknowledgements for this Inventory systems used to derive this customized Inventory system.*

*Updated Apr 3,2020*

The **Inventory System** uses the following Classes:

**ScriptableObject Classes - Data-Model**

* **abstract class Item**: ScriptableObject
* class **ItemInstance:** ScriptableObject
* class **Inventory**: ScriptableObject
* classes for custom **Items**:
  * class **Gem**: Item
  * class **Potion**: Item

**MonoBehaviour Classes: Display - UI - View**

* class **InventoryDisplay**: MonoBehaviour
* class **Slot**: MonoBehaviour, IPointerClickHandler

Other **MonoBehaviour** Required Files:

* class **Hazard**: MonoBehaviour

**Modified, Existing files:**

* **GameData**: MonoBehaviour
* **PickUp**: MonoBehaviour

**Manual file modification required to integrate Inventory with MiniGame Logic**\
&#x20;    [**PlayerController.cs**](https://kdoore.gitbook.io/cs2335/master_v2/inventory-system/inventory-scriptableobject/updated-inventorysystem/pickup-gamedata-mods) **-** Update code to integrate having Pickup items added to inventory\
&#x20;    [**Pickup Prefabs**](https://kdoore.gitbook.io/cs2335/master_v2/inventory-system/inventory-scriptableobject/updated-inventorysystem/pickup-gamedata-mods) **-** will need to be reconfigured

### Fix Unity Errors due to changes in GameData, PlayerController, PickUp classes.

**Important: several changes are required to re-configure GameObjects in BeginScene, MiniGameScene, and Asset Prefabs: PickUp.**

* **Step 1: BeginScene - GameData issues:** &#x20;
  * In BeginScene, make sure the **GameManager** gameObject has no errors on the **GameData.cs script component.** (fix: Remove component, re-add)
  * **Create an Inventory ScriptableObject:** named: **`GameInventory.`** ( no additional configuration needed for GameInventory scriptableObject )
  * **Add GameInventory** scriptableObject **to the GameData.cs component** on GameManager.
* **Step 2: MiniGameScene - PlayerController issues**
  * In the MiniGame, Select the Player gameObject, **Update the PlayerController script** [**using linked code**](https://kdoore.gitbook.io/cs2335/master_v2/inventory-system/inventory-scriptableobject/updated-inventorysystem/pickup-gamedata-mods)**.** Compile. Fix any errors. (fix: Remove component, re-add)
  * If necessary: - Reset GroundCheck by selecting the GroundCheck empty gameObject.
  * If necessary, reconfigure **PlayerController.cs** on the Inspector Select: **LayerMask:** Set to: **Ground**
* **Step 3: MiniGame-Prefab Asset: PickUp issues:**
* **Edit your PickUp Prefabs**
  * Edit the PickUp prefabs,  (Unity 2018 + - edits can be done in the directly in prefab editor ) following the details blow.
  * For Prefabs with 'Collectible Tag':  make sure the PickUp script component shows no errors. (fix: Remove component, re-add ).
  * **And an ItemInstance scriptableObject** to the each prefab's **PickUp script**.
    * **Create a scriptableObject** from the Gem or Potion class and set all values, sprites.
    * **Add the scriptableObject to the PickUp's Item** field as shown in images below.

![](https://2944698967-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M0-KLgOacVpbicrqehO%2F-M04eWSVrF1dPNoG3KOs%2F-M04e_6UwUB0Es7YMDhf%2FScreen%20Shot%202019-04-13%20at%203.54.56%20PM.png?generation=1581716777324595\&alt=media) ![](https://2944698967-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M0-KLgOacVpbicrqehO%2F-M04eWSVrF1dPNoG3KOs%2F-M04e_6WnxvvTqKtXbBI%2FScreen%20Shot%202019-04-13%20at%203.53.50%20PM.png?generation=1581716777023584\&alt=media)

## &#x20;To Configure: Inventory Display: Go to linked page below

#### **InventoryDisplay: UI Prefabs: Slot, Store, BtnAdd-Item, Optional:  Add Animation**&#x20;

{% content-ref url="inventory-scriptableobject/inventory-display-slot" %}
[inventory-display-slot](https://kdoore.gitbook.io/cs2335/master_v2/inventory-system/inventory-scriptableobject/inventory-display-slot)
{% endcontent-ref %}

### Acknowledgements: Inventory Systems: Reference Tutorials

Below are links to several tutorials about custom Unity Inventory-Systems using ScriptableObjects which were integrated and customized for creation of the Inventory System in this course..

* [Michael Palmos: Inventory System - Blog](https://toqoz.svbtle.com/a-unity-inventory-system-that-actually-works) **This inventory system is based on this blog series by Michael Palmos.**
* [RPG Inventory-System:](https://www.mvcode.com/lessons/unity-rpg-inventory-system-jamie) - by Jamie at MVCode Clubs
