x


Box Trigger and Mesh Collider on one object.

Hello,

I'm creating a vanishing platform and I have my code working, but to be honest, I'm not sure how I'm getting the result I'm getting based off the code I wrote.

To elaborate, I have attached a scaled box trigger on to an object that has a mesh collider. Now, when the player walks into the box trigger, the platform (renderer) will disappear after a set amount of seconds. The platform will also set the mesh collider as a trigger so that the physics are pretty much gone, thus, allowing the player to fall.

After another set amount of seconds, the platform will come back and the mesh collider's trigger value will be set to false. This is the part that confuses me (but I'm glad it's working), the box trigger is completely unaffected every time.

Seeing how the box trigger is technically a collider as far as I thought, I would think that setting the "unspecified" collider's trigger to false would disable both the mesh collider's AND box trigger's trigger to false.

Anyone know why this may be happening, and just to be safe, does anyone know a way to specify which collider to manipulate in code?

using UnityEngine;
using System.Collections;

public class VanishingPlatform : MonoBehaviour
{
    public float vanishTime;

    //-------------------
    // COLLIDER
    //-------------------
    void OnTriggerEnter (Collider hit)
    {

       if (hit.gameObject.tag == "Player") {
         Invoke ("Vanish", vanishTime);
         Debug.Log ("About to vanish!!!");
       }
    }

    /// <summary>
    /// Vanish this instance.
    /// </summary>
    void Vanish()
    {
        this.transform.collider.isTrigger = true;
        this.transform.renderer.enabled = false;
        Invoke("Reappear", vanishTime);
    }
    /// <summary>
    /// Reappear this instance.
    /// </summary>
    void Reappear()
    {
        this.transform.collider.isTrigger = false;
        this.transform.renderer.enabled = true;

    }
}
more ▼

asked Jun 18 '12 at 03:14 AM

SirVictory gravatar image

SirVictory
1.7k 64 77 104

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

1 answer: sort newest

I suppose the collider property works like audio or other GameObject properties: they only return the first component (GetComponents is used in order to access the others).
Unfortunately, Unity tells nothing about the component order, thus it's possible (although not likely) that in the future something gets changed and your script stop working.
If you want to avoid this risk, child the trigger volume to the platform instead of adding it, and move the code above to the trigger - with some modifications, of course:

    public float vanishTime;

    void OnTriggerEnter (Collider hit)
    {
       if (hit.gameObject.tag == "Player") {
         Invoke ("Vanish", vanishTime);
       }
    }

    void Vanish()
    {
        transform.parent.collider.isTrigger = true;
        transform.parent.renderer.enabled = false;
        Invoke("Reappear", vanishTime);
    }

    void Reappear()
    {
        transform.parent.collider.isTrigger = false;
        transform.parent.renderer.enabled = true;
    }
more ▼

answered Jun 18 '12 at 04:30 AM

aldonaletto gravatar image

aldonaletto
41.4k 16 42 197

Thanks for the advice. Your method of child triggering was the way I was actually doing it before. I suppose I wanted to be lazy this time around, but I'll probably revert to the method you spoke of.

Jun 18 '12 at 06:30 AM SirVictory
(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:

x1696
x1360
x984
x161
x37

asked: Jun 18 '12 at 03:14 AM

Seen: 900 times

Last Updated: Jun 18 '12 at 06:30 AM