x


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")
more ▼

asked Feb 27 '11 at 02:11 PM

Taragon gravatar image

Taragon
25 19 19 23

Well, wouldn't it be better if you post your script instead of this one? Why do you referring to OnGUI? That have nothing to do with collisions at all. Edit your question if you want to change/add something. I've also fixed your code highlighting. Take a look at the editing help: http://answers.unity3d.com/editing-help And, of course if you haven't already, the FAQs http://answers.unity3d.com/faq

Feb 27 '11 at 04:08 PM Bunny83
(comments are locked)
10|3000 characters needed characters left

2 answers: sort voted first

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

more ▼

answered Feb 27 '11 at 03:58 PM

Bunny83 gravatar image

Bunny83
45.4k 11 49 207

(comments are locked)
10|3000 characters needed characters left

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;

}

more ▼

answered Feb 27 '11 at 10:45 PM

Taragon gravatar image

Taragon
25 19 19 23

(comments are locked)
10|3000 characters needed characters left
Your answer
toggle preview:

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Topics:

x141
x127
x79

asked: Feb 27 '11 at 02:11 PM

Seen: 1587 times

Last Updated: Feb 27 '11 at 03:45 PM