PickUp PreFabs

Throughout our game we will want to have game items for the player to collide with to earn score points or to lose health value. These will be called PickUp items. We'll create a simple script component: PickUp.cs that allows setting a point value for each item instance. We'll turn these gameObjects into Prefabs, which are stored as a reusable project asset.

Create / Configure PickUp GameObject

In Unity, we'll want to create and configure gameObjects that will have the PickUp.cs script component attached to give desired behavior. The PickUp objects in your game must have tag: Collectible, at least one should have tag: Hazard.

  • Create a 2D Sprite GameObject

  • Set the Sorting Layer to Spawned (See SortingLayers)

  • Physics2D Collision: Add a Collider2D to the GameObject, configure collider shape

  • Configure the Collider2D to be isTrigger == true

  • Tags: Create custom Tags, set a tag for each PickUp gameObjects: "Collectible", "Hazard", other? See images below

  • Physics2D Movement Optional: Add Rigidbody2D if the gameObject will move

    • Add additional Collider2D inside the trigger Collider2D, to keep this moving gameObject from falling through the floor's Collider2D.

  • Script Logic: Add PickUp.cs script (see below)

    • Select type from dropdown in inspector

    • Set value, set with a positive value ( Collectibles, Hazards )

  • Prefab: Drag into Project Assets Resource Folder to create as a prefab

Prefab:

Prefabs provide a method for turning any gameObject into an asset, whereas normally a gameObject is defined strictly within the scene where it was first created. Prefabs allow instantiation (spawning) of gameObjects during gamePlay. Prefabs can be exported from your project and reused in another Unity project. For any gameObject that is non-trivial, creating a prefab ensures that you'll aways have a saved version of the object, in case a particular scene gets corrupted.

Unity’s Prefab system allows you to create, configure, and store a GameObject complete with all its components, property values, and child GameObjects as a reusable Asset. The Prefab Asset acts as a template from which you can create new Prefab instances in the Scene Any edits that you make to a Prefab Asset are automatically reflected in the instances of that Prefab, allowing you to easily make broad changes across your whole Project without having to repeatedly make the same edit to every copy of the Asset. Unity Manual

Unique Prefab Instances vs Asset-Version of Prefab: As described above: if you make edits to the asset-version of a prefab, then those changes are immediately reflected in all instances across your project. If you make changes to a prefab instance within a scene, those changes will not impact any other prefabs, unless you select to apply those changes to the level of the asset-version. It is best to get your gameObject configured to it's final state before making the original prefab, otherwise, you may make changes (like adding a script component) to a gameObject in a scene, and forget that those changes do not impact the asset-version of the prefab.

PickUp Class - v1

This is the first version of the PickUp Class Script, this will be modified in Project 3.

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


public enum PickupType
{
    crate, crystal, rock, star                 //add as needed
}


public class PickUp : MonoBehaviour
{

  [SerializeField]  //allows modification in inspector 
  private int value;

    //read-only property
    public int Value
    {
        get { return value; }
    }


    public PickupType type; //what is the PickupType of this object

}// end class

Last updated