The Video below shows configurations that are required for integrating the Inventory System with the MiniGame.
IMPORTANT - You may need to download updated Inventory System Files: If you have InventoryDisplay behavior as shown at the end of this video where each diamond occupies a separate inventory slot - then download and install this package with updated Inventory System Files: You may need to re-attach InventoryDisplay.cs to the InventoryDisplay Prefab
Code Updated Apr 13, 2019
Updated Code Inventory System Code Files - Due to a change in the way the scriptableObjects are attached to the PickUp prefabs, the Inventory System files were changed so that the InventoryDisplay's Dictionary has been changed from Dictionary< ItemInstance, int> , where prior versions were able to recognize that Scriptable Object ItemInstances of the same type: IE: Gem.Sapphire were all identical, meaning they had the same memory-address. To fix this issue, a new field had to be added to the Item class: public string instanceType, where this must be set in the constructor for the child classes.
Updated code for PlayerController
Note: There will be additional modifications, not included here, which include UnityEvents used in LevelManager and Collisions with Water, Exit, and AudioClips
Added: GameData.InstanceRef.AddItem( item.itemInstance ), so that we add the item to the GameData inventory.
Modified: Code when gameObject has tag 'Hazard', to incorporate logic for gameObjects with Hazard Component (has no ItemInstance ) instead of using the PickUp Component on Hazard Items.
Code - PlayerController.cs - For Inventory System
Updated Apr 13, 2019
using System.Collections;using System.Collections.Generic;using UnityEngine;publicclassPlayerController : MonoBehaviour {publicenumHeroState { idle, walk, jump, dead }privateRigidbody2D rb2D; //declare the variablepublicfloat forceX =50f; //this is probably too smallprivate bool facingRight;public bool grounded; //tracks if player is touching groundprivate bool jump; //has jump key (spacebar been pressed - last)publicTransform groundCheck; //set in inspector, (add child to player - empty gameObject at player's feet)publicLayerMask groundLayer; //set in inspectorpublicfloat groundCheckRadius =0.2f; //modify as neededpublicfloat jumpForce =8f; //modify as neededprivateAnimator animator;// Use this for initializationvoidStart () {rb2D =GetComponent< Rigidbody2D >(); ///we made the connection with the componentfacingRight =true;animator =GetComponent<Animator>();animator.SetInteger("HeroState",(int) HeroState.idle);}//Fixed Update is called at regular time intervals - use with Physics2DvoidFixedUpdate () {float inputX =Input.GetAxis("Horizontal"); //-1, 0, 1 bool isWalking =Mathf.Abs(inputX) >0; grounded =Physics2D.OverlapCircle(groundCheck.position, groundCheckRadius, groundLayer); bool jumpPressed =Input.GetButtonDown("Jump"); //spacebar was last key pressedif (jumpPressed) { jump =true; }else { jump =false; }if ( isWalking){if( inputX >0&&!facingRight){Flip(); }elseif(inputX <0&& facingRight){Flip(); }rb2D.velocity=newVector2(0,rb2D.velocity.y);rb2D.AddForce(newVector2(inputX * forceX ,0));animator.SetInteger("HeroState", (int)HeroState.walk); } //end if isWalkingelse {animator.SetInteger("HeroState", (int)HeroState.idle); } //end elseif( jump && grounded) {animator.SetInteger("HeroState", (int)HeroState.jump);rb2D.velocity=newVector2(rb2D.velocity.x,0); //zero out velocity.y, maintain velocity.xrb2D.AddForce(newVector2(0f, jumpForce),ForceMode2D.Impulse); //add force as impulse }} //end Fixed UPdate/// <summary>/// THIS IS THE EVENT that starts the chain reaction of events/// </summary>/// <param name="collision">Collision.</param>//Customize to your game needsprivatevoidOnTriggerEnter2D(Collider2D collision) {if (collision.CompareTag("Collectible")) {//update scorePickUp item =collision.GetComponent<PickUp>();GameData.instanceRef.Add(item.Value); //points for each specific item's value//ADD THIS NEW CODE FOR INVENTORY SYSTEMGameData.instanceRef.AddItem(item.itemInstance); //points for each specific item's valueDebug.Log("Hit collectible");Destroy(collision.gameObject); }elseif (collision.CompareTag("Hazard")) {//decrease health//what type of object has tag "Hazard"//ADD THIS NEW CODE FOR INVENTORY SYSTEM - HAZARD COMPONENTHazard hazardItem =collision.GetComponent<Hazard>();if (hazardItem !=null) {GameData.instanceRef.TakeDamage(hazardItem.Value); }else {Debug.Log("Collided with a different type Hazard");//TODO add code for Hazard-type itemsPickUp item =collision.GetComponent<PickUp>();GameData.instanceRef.TakeDamage(item.Value); }Destroy(collision.gameObject); }else {Debug.Log("Hit Something Else"); } } //end functionprivatevoidFlip(){ facingRight =!facingRight; //toggle this valueVector3 theScale =transform.localScale;theScale.x*=-1; //we have changed the valuetransform.localScale= theScale;}} //end Class