Search Unity

Wheelcollider collisions

Discussion in 'Physics' started by BeforeTheLight, Jan 6, 2016.

  1. BeforeTheLight

    BeforeTheLight

    Joined:
    Jan 7, 2011
    Posts:
    168
    In unity 4.6 and below I have used the wheel collider in a game called Monster Truck Mayhem and I have had the ability to trigger OnCollisionEnter events on objects the wheel hits. An example is crushing cars with wheels. I am working on a update to 5.3 because I want to have this on Apple TV.
    Has anyone else noticed this?
    Is there an explanation for why this is working the way it is now?
    Here is my code attached to the crush car
    Code (JavaScript):
    1. //Crushed car model
    2. var bad : GameObject;
    3.  
    4. function OnCollisionEnter (hit : Collision) {
    5.     if(hit.transform.root.name == "Truck 1" || hit.transform.root.name == "CPU"){
    6.         bad.SetActive(true);
    7. //Tells scoring a car was crushed
    8.         hit.gameObject.SendMessage("Crush", SendMessageOptions.DontRequireReceiver);
    9.         gameObject.SetActive(false);
    10.     }
    11. }
    12.  
    Thanks
     
  2. BeforeTheLight

    BeforeTheLight

    Joined:
    Jan 7, 2011
    Posts:
    168
    ****EDIT****
    So as a solution I have added mesh colliders and made them triggers and changed the collision scripts to look for trigger events and is working so far.
     
  3. Deleted User

    Deleted User

    Guest

    I needed the same for my landing gear...try these on for size??

    Code (CSharp):
    1. if (wheelLeft.GetGroundHit(out leftWheelhit))
    2.             {
    3.                 //Debug.Log("leftWheelhit.forwardSlip: " + leftWheelhit.forwardSlip);
    4.                 if ((leftWheelhit.forwardSlip > 0.1f) && (WheelOnHit.Length > 0) && (takeWheelHit))
    5.                 {
    6.                     Transform sound = PoolBoss.SpawnOutsidePool(WheelOnHit[Random.Range(0, WheelOnHit.Length)], leftWheelhit.point, leftWheelhit.collider.transform.rotation);
    7.                 }
    8.  
    9.                 if ((leftWheelhit.forwardSlip > 0.1f) && (WheelEffects.Length > 0) && (takeWheelHit))
    10.                 {
    11.                     //Debug.Log("WheelHit: DAMAGE!! " + takeWheelHit);
    12.                     foreach (Transform Effect in WheelEffects)
    13.                     {
    14.                         Transform effect = PoolBoss.SpawnOutsidePool(Effect, leftWheelhit.point, leftWheelhit.collider.transform.rotation);
    15.                     }
    16.                 }
    17.             }
    18.  
    19.             if (wheelRight.GetGroundHit(out rightWheelhit))
    20.             {
    21.                     if ((rightWheelhit.forwardSlip > 0.1f) && (WheelOnHit.Length > 0) && (takeWheelHit))
    22.                     {
    23.                        
    24.                         Transform sound = PoolBoss.SpawnOutsidePool(WheelOnHit[Random.Range(0, WheelOnHit.Length)], leftWheelhit.point, leftWheelhit.collider.transform.rotation);
    25.                     }
    26.  
    27.                     if ((rightWheelhit.forwardSlip > 0.11f) && (WheelEffects.Length > 0) && (takeWheelHit))
    28.                     {
    29.                         //Debug.Log("WheelHit: DAMAGE!! " + takeWheelHit);
    30.                         foreach (Transform Effect in WheelEffects)
    31.                         {
    32.                             Transform effect = PoolBoss.SpawnOutsidePool(Effect, leftWheelhit.point, leftWheelhit.collider.transform.rotation);
    33.                         }
    34.                     }
    35.                 }
    36.  
    37.             if ((wheelLeft.isGrounded) && (wheelRight.isGrounded))
    38.             {
    39.                 grounded = true;
    40.                 playerUI.ChangeView0_Mode(true);
    41.                 //flight.CamCollider(true);
    42.                 //Debug.Log("grounded---->>" + leftWheelhit.force);
    43.                 if ((!hasParent) && (leftWheelhit.collider.gameObject.name == CarrierCollider))
    44.                 {
    45.                     CarrierLanding();
    46.                 }
    47.             }
    48.             else
    49.             {
    50.                 grounded = false;
    51.                 //Debug.Log("Airborne---->>");
    52.                 if (hasParent)
    53.                     {
    54.                         transform.parent = null;
    55.                         hasParent = false;
    56.                     }
    57.             if(mission)
    58.                 StartCoroutine(mission.SetRefuelActive(true));
    59.             }
    60.         }
    61.  
    Patrick
     
  4. BeforeTheLight

    BeforeTheLight

    Joined:
    Jan 7, 2011
    Posts:
    168
    Thank you for this. I have taken a look at it and will attempt to implement something like it this week.