Understanding the Pickup script in Lerpz tutorial

I'm trying to understand one line specifically in the pickup script:

var playerStatus : ThirdPersonStatus = col.GetComponent(ThirdPersonStatus);

The reason is because I’m trying to get a GUI box to pop up on other object that Lerpz collides with, not using this script, but using a simple onGUI/onTrigger function to do this. The trigger isn’t working (I triple checked the box was checked on the trigger on the interface). I’m not sure why it’s not detecting collisions with this onGUI/onTrigger, so I am trying to understand why the pickup script is referencing the thirdpersonstatus… maybe this is why.

Pickup Script:


enum PickupType { Life = 0, FuelCell = 1 }
var pickupType = PickupType.FuelCell;
var amount = 1;
var sound : AudioClip;
var soundVolume : float = 2.0;

private var used = false;
private var mover : DroppableMover;

function Start ()
{
    // do we exist in the level or are we instantiated by an enemy dying?
    mover = GetComponent(DroppableMover);
}

function ApplyPickup (playerStatus : ThirdPersonStatus)
{
    // A switch...case statement may seem overkill for this, but it makes adding new pickup types trivial.
    switch (pickupType)
    {
        case PickupType.Life:
            playerStatus.AddLife(amount);
            break;

        case PickupType.FuelCell:
            playerStatus.FoundItem(amount);
            break;
    }

    return true;
}

function OnTriggerEnter (col : Collider) {
    if(mover && mover.enabled) return;
    var playerStatus : ThirdPersonStatus = col.GetComponent(ThirdPersonStatus);

    //* Make sure we are running into a player
    //* prevent picking up the trigger twice, because destruction
    //  might be delayed until the animation has finished
    if (used || playerStatus == null)
        return;

    if (!ApplyPickup (playerStatus))
        return;

    used = true;

    // Play sound
    if (sound)
        AudioSource.PlayClipAtPoint(sound, transform.position, soundVolume);

    // If there is an animation attached.
    // Play it.
    if (animation && animation.clip)
    {
        animation.Play();
        Destroy(gameObject, animation.clip.length);
    }
    else
    {
        Destroy(gameObject);
    }
}

// Auto setup the pickup
function Reset ()
{
    if (collider == null)   
        gameObject.AddComponent(BoxCollider);
    collider.isTrigger = true;
}

@script RequireComponent(SphereCollider)
@script AddComponentMenu("Third Person Props/Pickup")

The parameter "col" in OnTriggerEnter is the collider that collides with your trigger. This collider is attached to another GameObject. GetComponent search for another Component on this GameObject. You have to tell GetComponent what type of component you're searching for. In this case you want the ThirdPersonStatus script.

The reference that is returned by Getcomponent is stored in “playerStatus”.

The line

if ([...] playerStatus == null)

checks whether GetComponent have found a component of this type or not.

With this reference you can access public variables or functions of that ThirdPersonStatus script.

In this case they call some functions of that script:

playerStatus.AddLife()
playerStatus.FoundItem()

I hope that clears it up a bit ;)

I added a cube to the Lerpz world, and onto it the following onGUI/onTrigger functions. Thanks for your help, Bunny83. Please refer to the following: var trigger1: boolean = false;

function OnGUI(){ if (trigger1){ GUI.Label(Rect(0,0,50,50), "Hello",""); } }

function OnTriggerEnter (col : Collider) { Debug.Log(col.name); if (col.name == "Cube") trigger1 = true;

}