- Home /
Change scene with trigger collision not working.
I'm not getting any error reports and I have no idea whether this script is being ignored altogether. Maybe it's got something to do with the player collision script so I'll upload that too.
This script's on the trigger (the 'Is trigger' is ticked on the Box Collider): #pragma strict var myLevel : String;
function OnTriggerStay (myCollision : Collider) { if(myCollision.gameObject.name == "Player"){ Application.LoadLevel (myLevel); } }
Now here's the player code (Javascript):
using UnityEngine; using System.Collections;
public class LWMove : MonoBehaviour {
public float maxSpeed = 10f;
bool facingRight = true;
Animator anim;
//grounded stuff
bool grounded = false;
public Transform groundCheck;
float groundRadius = 0.2f;
public LayerMask whatIsGround;
public float jumpForce = 700f;
// Use this for initialization void Start () { anim = GetComponent (); }
void FixedUpdate () {
grounded = Physics2D.OverlapCircle (groundCheck.position, groundRadius, whatIsGround); //has it hit what the ground is?
anim.SetBool ("Ground", grounded);
anim.SetFloat ("vSpeed", rigidbody2D.velocity.y);
float move = Input.GetAxis ("Horizontal");
anim.SetFloat ("Speed", Mathf.Abs (move));
rigidbody2D.velocity = new Vector2 (move * maxSpeed, rigidbody2D.velocity.y);
if (move > 0 && !facingRight)
Flip ();
else if(move < 0 && facingRight)
Flip ();
}
void Update ()
{
if (grounded && Input.GetKeyDown (KeyCode.Space)) {
anim.SetBool ("Ground",false);
rigidbody2D.AddForce(new Vector2(0,jumpForce));
}
}
void Flip()
{
facingRight = !facingRight;
Vector3 theScale = transform.localScale;
theScale.x *= -1;
transform.localScale = theScale;
}
}
do you have a rigidBody on the player object? and is the player moving when entering the trigger?
I forgot to add that. Yes it is. It's not kinematic, it has fixed angle, it interpolates, start's awake, and collision detection's discrete. This is a 2D platformer btw.
Answer by JustFun · Aug 05, 2014 at 07:26 PM
If you use Physics2D, then in trigger script you must use OnTriggerStay2D and Collider2D instead of OnTriggerStay and Collider:
function OnTriggerStay2D (myCollision : Collider2D)
{
if(myCollision.gameObject.name == "Player")
{
Application.LoadLevel (myLevel);
}
}
And i think, it's preferable to use OnTriggerEnter2D
Your answer
Follow this Question
Related Questions
Check for collision while animating 0 Answers
Open door = load scene c# issues 4 Answers
Scene Change Collision 2 Answers
Trigger help! 0 Answers
How to load next scene on collision ? 3 Answers