- Home /
Question by
nqs123 · Jul 08, 2016 at 11:31 AM ·
oncollision
OnCollisionEnter2D has problem..
my problem is OnCollisionEnter2D function are Sometimes is not work.. and object is pass through the Collider:/ OnCollisionEnter2D is mostly works in Code.. but Sometimes this function is not works and Object are Pass through..help to me please...
this is full SourceCode here.
using UnityEngine;
using System.Collections;
public enum PlayerState
{
Idle,
Run,
Jump,
DoubleJump,
Death,
}
public class Teeskii_Ctrl : MonoBehaviour {
public float WalkSpeed;
public Rigidbody2D TeeskiiRB;
public float Jump_force = 1;
public float DoubleJump_force = 1;
public PlayerState PS;
public Animator ani;
public Game_Manager GM;
public BoxCollider2D em;
// Use this for initialization
void Start () {
PS = PlayerState.Idle;
}
// Update is called once per frame
void Update () {
TeeskiiRB.WakeUp();
}
void OnTriggerEnter2D(Collider2D coll) {
if (coll.gameObject.tag == "DeadZone") {
Death();
}
}
void OnCollisionEnter2D (Collision2D collision) {
if(collision.gameObject.tag == "Ground") {
Run();
}
if(collision.gameObject.tag == "StartPoint")
{
Idle();
}
if(collision.gameObject.tag == "Ground" && WalkSpeed == 0) {
Idle();
}
if(collision.gameObject.tag == "Trap") {
Death();
}
}
public void JumpBtn(){
if(PS == PlayerState.Jump) {
DoubleJump();
Debug.Log("DoubleJump");
}
if(PS == PlayerState.Run || PS == PlayerState.Idle) {
Jump();
Debug.Log("Jump");
}
}
public void Jump() {
TeeskiiRB.velocity = new Vector2(0, Jump_force);
PS = PlayerState.Jump;
ani.SetBool("Jump", true);
ani.SetBool("Idle", false);
ani.SetBool("Run", false);
}
public void Idle()
{
PS = PlayerState.Idle;
ani.SetBool("Idle", true);
ani.SetBool("Run", false);
ani.SetBool("Jump", false);
}
public void Run() {
PS = PlayerState.Run;
ani.SetBool("Run",true);
ani.SetBool("Idle", false);
ani.SetBool("Jump", false);
}
public void DoubleJump() {
TeeskiiRB.velocity = new Vector2(0, DoubleJump_force);
PS = PlayerState.DoubleJump;
ani.SetBool("Jump", true);
ani.SetBool("Idle", false);
ani.SetBool("Run", false);
}
public void Death() {
GM.GameOver();
PS = PlayerState.Death;
WalkSpeed = 0;
}
}
Comment
Your answer
![](https://koobas.hobune.stream/wayback/20220612084433im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Is there a function for OnCollision, that detects drag? 0 Answers
How to get the collided plane of a mesh, not just the object,How to get the collided plane of a mesh 1 Answer
Physics not working properly 1 Answer
Carry Object over multiple scenes - Adventure Game 1 Answer
How to change the position of the camera when colliding with a GameObject? 1 Answer