Can't seem to get collision to work among my sprites
Hey guys - I'm working on a top down brawl game and i have this little ball in a circle shaped arena. I drew an arrow on top of the ball to see in which direction it's facing. The arena is a sprite i have imported (blank rectangle with a circle in the middle).
I added an empty game object as a child of this arena, gave it a rigidbody2d and a circle collider. My movable "player-ball" should only be able to move within that given circle (the arena). No the problem is, that the collision between player and circle edge does not trigger. Both objects have a rigidbody2d and the circle collider of the arena has "is trigger" checked...i'll post my code below - maybe someone can give ma some insight.
Thx for any help! Codes in C# btw ;)
using UnityEngine;
using System.Collections;
public class Player_Movement : MonoBehaviour
{
private Vector2 movementVector;
private float movementSpeed = 8;
// Use this for initialization
private float heading;
private Quaternion rotationToHold;
private bool movingX;
private bool movingY;
public bool wallTrigger;
void Start ()
{
}
// Update is called once per frame
void Update ()
{
movementVector.x = Input.GetAxis ("LeftJoystick_X") * movementSpeed;
movementVector.y = Input.GetAxis ("LeftJoystick_Y") * movementSpeed;
///Moving the Player
GetComponent<Rigidbody2D>().velocity = new Vector2 (movementVector.x, movementVector.y*(-1));
///turning the player
float heading = Mathf.Atan2(movementVector.x*(-1), movementVector.y*(-1));
transform.rotation = Quaternion.Euler (0f,0f,heading*Mathf.Rad2Deg);
//movement checks in order to keep rotation after letting go of stick
if (movementVector.x == 0)
{
movingX = false;
}
else{
movingX = true;
}
if (movementVector.y == 0) {
movingY = false;
} else {
movingY = true;
}
if (movingX || movingY == true) {
rotationToHold = transform.rotation;
} else {
transform.rotation = rotationToHold;
}
///check if Player is inside the arena and restric his movement if not
if (wallTrigger == true) {
movementSpeed = 0;
} else {
movementSpeed = 8;
}
}
void OnTriggerEnter (Collider other)
{
wallTrigger = false;
}
void OnTriggerExit (Collider other)
{
wallTrigger = true;
}
}
Answer by jgodfrey · May 22, 2016 at 09:28 PM
Assuming you're using the 2d physics system ( and it seems that you are), you need the 2D version of the Trigger handlers. Specifically...
OnTriggerEnter2D(...)
OnTriggerExit2D(...)
Works like a charm - thank you very much! ;)
Now, on to adding some force push-back to my player :D
Your answer
Follow this Question
Related Questions
Get tile from trigger 0 Answers
Character keeps moving a moment after I release input keys 3 Answers
How to make my moving object (in game) stop once it collides 1 Answer
OnTriggerEnter2D and OnCollisionEnter2D not working 1 Answer
How can I remove movement or camera rotation in one direction with a trigger 0 Answers