CS2335
Master 1.0.0
Master 1.0.0
  • Introduction
  • Introduction
    • Introduction
      • Game Design
    • Unity - Download
    • Visual Studio - IDE
    • Unity Manual, Scripting API
  • Unity Basics
    • Unity Editor Windows
    • Behavior Components
    • 2D Project, Scenes
      • Create 2D Sprite GameObject
      • Create UI-Text GameObject
    • MonoBehavior - Base-Class
    • Create a Custom C# Script
  • Game Coding Structures
    • Games Overview
    • Unity Engine - Event Functions
    • Finite State Machines
    • UML Class Diagram
  • Animation
    • Animator Controller
    • Animation Steps
      • Optional: Dead Animation
    • PlayerController.cs V0
  • Project 1 - Player
    • Player GameObject v1
      • C# Generics, Statics
    • Player GameObject - Jump
    • PlayerController.cs V2-Jump
    • PickUp PreFabs
      • Sorting Layers
    • PlayerController.cs V3-Collide
    • GameData Version1
    • GameData Version2
    • PlayerController V4-Score
  • Project 1 Details
    • Project1 GameObjects
    • PlayerStats Version1
      • UI-Canvas
    • Utility Class
    • Simple Spawner
    • MiniGameManager
      • Logic Diagrams
      • StartButton
      • ResultsPanel
  • Project1 Enhancements
    • PickUp - SelfDestruct
    • Spawn from List of Prefabs
  • Project 2 - StateManager
    • Project 2 - Learning Objectives
      • Inspiration
        • Branching Story Structures
        • Branching Structures
        • Hero's Journey
        • Visual Novel in Unity-Links
    • Project 2 - Starter Assets
    • State Machine Framework
    • StateManager - Singleton Design Pattern
    • Interface IStateBase
    • Create SceneXState.cs
    • OptionPanel Prefab
      • UI Images: Sprite Sheets
      • Button Image-Transitions
    • Project 2 - List of Steps
    • Project 2 - Starter Code
  • Project 2 -Dialogue
    • Hide_Show_Panel Script
    • Edit OptionPanel
    • Simple DialogPrefab
    • Conversation Entry
    • SimpleDialog.cs
    • ScriptableObjects
      • Scriptable Object Factory
    • Conversation Scriptable Objects
    • DialogManager_ConvList
      • DialogManager V2
      • Coroutines: Dynamic Text
      • DialogPrefab wImage
  • Overview: Branching Logic
    • DialogTrigger
    • Dictionary Data-Structure
      • Unity PlayerPrefs Dictionary
    • GameData Version3
    • Dictionary: choiceData
      • SaveChoice, ChoicePanel
        • choiceData - examples
          • Dictionary Value to Disable Options
    • Configure UI-Button Listeners
      • NPC Animation
      • NPC Activation
    • UI-Triggered Animations
    • Simple Inventory
    • EndState Conditions
    • Script ExecutionOrder
    • Custom UnityEvents
    • PlayerStats v2
      • ModifyPlayerData
      • BuyItem
    • Text Input
  • UI Components
    • Finding Game Objects
    • Game Objects: UI vs. 2D Sprite
    • UI Elements
      • Canvas: Screen-Space Render-Mode
      • UI-Buttons To Change Scene
  • Proj4: Inventory System
    • Inventory-System
      • GameData version4
      • Install and Configure
      • Diagrams, Resources
        • Item, Gem, Potion Classes
        • Inventory Class
      • InventoryDisplay, Slot UI
        • InventoryDisplay Class
        • Slot Class
        • Hazard Class
        • Layout Groups
      • Customization Steps
        • Configure Animation
        • AddItem Button
        • Concrete Class: Food
        • MiniGame Mods
          • PlayerController Mods
      • Code: InventorySystem
        • GameData, PickUp Mods
      • Resources: Data Structures
  • Custom Unity Events
    • Event Publishing Patterns
    • Custom Event Messaging
  • Proj4: Mini-Game
    • Simplified Mini-Game
      • PlayerController_v2 Mods
        • PlayerController_v2_final
      • MiniGameManager_v2
    • MiniGame-Overview-Proj4
    • LevelManager
      • LevelManager Logic Diagram
      • LevelManager FSM
      • LoadLevel, StartLevel Logic
      • Code Framework
    • Timer
  • Project 4 - Code Mods
    • Project 4 - Steps
    • Project 4 - Code
      • Code: Final Versions
        • PlayerController Mods
          • PlayerController_v2 Mods
        • GameData - Final
        • LevelManager
        • PlayerStats - Final
        • PickUp, Hazard, ScorePickUp
        • Spawner - Final
        • CameraFollow
        • ScreenFader
        • MiniGameState
        • Example: EndState
      • MiniGameWin Logic
  • Optional, Supplemental Content
    • Optional Content
      • Particle Systems
      • Adding Audio
      • Screen Fading and Reloading
      • ScriptableObjects
      • Disable Debug Logging
      • Events and Actions
      • Saving Data - Serialization
      • Parallax Scrolling
      • Change Sprites
    • XR - Extended Reality
  • Computing Concepts
    • Programming Patterns
      • State - FSM
      • Singleton Pattern
    • C# Language
      • Variables
      • Delegates
      • Dictionary
      • Enum
      • Encapsulation
        • C# Properties
        • Access Modifiers
      • Generics < T >
      • Inheritance
      • Interface
      • List< T >
      • Polymorphism
      • Queue< T >
      • Switch-Case
      • Foreach
      • Static
      • Ternary Operator: ?
      • this
    • Diagrams
      • State Machine Framework
      • UML Class Diagrams
      • Level Manager Logic Diagram
      • Flow-Chart: NumberGame
      • FSM: NumberGame
    • Tools
    • Glossary
    • References and Resources
    • Random Thoughts
Powered by GitBook
On this page
  • Updated code for PlayerController
  • Code - PlayerController.cs - For Inventory System

Was this helpful?

  1. Proj4: Inventory System
  2. Inventory-System
  3. Customization Steps
  4. MiniGame Mods

PlayerController Mods

Code modifications that must be manually included into PlayerController in order for the Inventory System logic to be included in the MiniGame logic.

PreviousMiniGame ModsNextCode: InventorySystem

Last updated 5 years ago

Was this helpful?

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 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

Modified Content: in onTriggerEnter( )

  • 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;

public class PlayerController : MonoBehaviour {
public enum HeroState { idle, walk, jump, dead }
private Rigidbody2D rb2D; //declare the variable
public float forceX = 50f; //this is probably too small
private bool facingRight;

public bool grounded; //tracks if player is touching ground
private bool jump; //has jump key (spacebar been pressed - last)
public Transform groundCheck; //set in inspector, (add child to player - empty gameObject at player's feet)
public LayerMask groundLayer; //set in inspector
public float groundCheckRadius = 0.2f; //modify as needed
public float jumpForce = 8f; //modify as needed

private Animator animator;

// Use this for initialization
void Start () {
rb2D = GetComponent< Rigidbody2D >(); ///we made the connection with the component
facingRight = true;
animator = GetComponent<Animator>();
animator.SetInteger("HeroState",(int) HeroState.idle);

}
//Fixed Update is called at regular time intervals - use with Physics2D
void FixedUpdate () {
    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 pressed

    if (jumpPressed)
    {
        jump = true;
    }
    else
    {
        jump = false;
    }

    if ( isWalking){

        if( inputX > 0 && !facingRight){
        Flip();
        }
        else if(inputX < 0 && facingRight){
        Flip();
        }
    rb2D.velocity = new Vector2(0, rb2D.velocity.y);
    rb2D.AddForce(new Vector2(inputX * forceX , 0));
    animator.SetInteger("HeroState", (int)HeroState.walk);
    } //end if isWalking
    else
    {
    animator.SetInteger("HeroState", (int)HeroState.idle);
    } //end else

    if( jump && grounded)
    {
    animator.SetInteger("HeroState", (int)HeroState.jump);
    rb2D.velocity = new Vector2(rb2D.velocity.x, 0); //zero out velocity.y, maintain velocity.x
    rb2D.AddForce(new Vector2(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 needs
private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.CompareTag("Collectible"))
        {
            //update score
            PickUp item = collision.GetComponent<PickUp>();
            GameData.instanceRef.Add(item.Value); //points for each specific item's value

            //ADD THIS NEW CODE FOR INVENTORY SYSTEM
            GameData.instanceRef.AddItem(item.itemInstance); //points for each specific item's value

            Debug.Log("Hit collectible");
            Destroy(collision.gameObject);
        }
        else if (collision.CompareTag("Hazard"))
        {
            //decrease health
            //what type of object has tag "Hazard"
            //ADD THIS NEW CODE FOR INVENTORY SYSTEM - HAZARD COMPONENT
            Hazard 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 items
                PickUp item = collision.GetComponent<PickUp>();
                GameData.instanceRef.TakeDamage(item.Value);
            }
            Destroy(collision.gameObject);
        }
        else
        {
            Debug.Log("Hit Something Else");
        }
    } //end function

private void Flip(){
    facingRight = !facingRight; //toggle this value
    Vector3 theScale = transform.localScale;
    theScale.x *= -1; //we have changed the value
    transform.localScale = theScale;
}

} //end Class

Final PlayerController_v3
Inventory System Files:
See updated code links if you have InventoryDisplay issues described above.