Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
This question was closed Feb 11, 2018 at 11:47 PM by jakeomonk.
avatar image
0
Question by jakeomonk · Feb 13, 2014 at 09:25 PM · javascriptrigidbodyterrainmesh

How do i test whether my box collider is touching the floor or not?

I have a script that makes my car drive but i really cant figure out how to test if my box collider is grounded so i can stop it from moving forwards in the "Z" axis whilst in mid air.

Here Is My Script:

 public var CarGravity : float = -20;
 private var accel : Vector3;
 public var throttle : float;
 private var deadZone : float = .001;
 private var myRight : Vector3;
 private var velo : Vector3;
 private var flatVelo : Vector3;
 private var relativeVelocity : Vector3;
 private var dir: Vector3;
 private var flatDir : Vector3;
 private var carUp : Vector3;
 private var carTransform : Transform;
 private var carRigidbody : Rigidbody;
 private var engineForce : Vector3;
  
 private var turnVec : Vector3;
 private var imp : Vector3;
 private var rev : float;
 private var actualTurn : float;
 private var carMass : float;
 private var wheelTransform : Transform[] = new Transform[4];
 public var actualGrip : float;
 public var horizontal : float;
 private var maxSpeedToTurn : float = .2;
  
 public var frontLeftWheel : Transform;
 public var frontRightWheel : Transform;
 public var rearLeftWheel : Transform;
 public var rearRightWheel : Transform;
  
 public var LFWheelTransform : Transform;
 public var RFWheelTransform : Transform;
  
 public var power : float = 300;
 public var maxSpeed : float = 50;
 public var carGrip : float = 70;
 public var turnSpeed : float = 3.0;
  
 private var slideSpeed : float;
 public var mySpeed : float;
  
 private var carRight : Vector3;
 private var carFwd : Vector3;
 private var tempVEC : Vector3;
  
 function Start()
 {
     Initialize();
     Physics.gravity.y = CarGravity;
 }
  
 function Initialize()
 {
     carTransform = transform;
     carRigidbody = rigidbody;
     carUp = carTransform.up;
     carMass = rigidbody.mass;
     carFwd = Vector3.forward;
     carRight = Vector3.down;
     setUpWheels();
     carRigidbody.centerOfMass = Vector3(0,-0.7,.35);
 }
  
 function Update()
 {
     checkInput();
     carPhysicsUpdate();
 }
  
 function LateUpdate()
 {
     rotateVisualWheels();
     engineSound();
 }
  
 function setUpWheels()
 {
     if((null == frontLeftWheel || null == frontRightWheel || null == rearLeftWheel || null == rearRightWheel ))
     {
        Debug.LogError("One or more of the wheel transformshave not been plugged in on the car");
        Debug.Break();
     }
     else
     {
        wheelTransform[0] = frontLeftWheel;
        wheelTransform[1] = rearLeftWheel;
        wheelTransform[2] = frontRightWheel;
        wheelTransform[3] = rearRightWheel;
     }
 }
  
 private var rotationAmount : Vector3;
  
 function rotateVisualWheels()
 {
     LFWheelTransform.localEulerAngles.y = horizontal * 30;
     RFWheelTransform.localEulerAngles.y = horizontal * 30;
  
     rotationAmount = carRight * (relativeVelocity.z * 1.6 * Time.deltaTime * Mathf.Rad2Deg);
  
     wheelTransform[0].Rotate(rotationAmount);
     wheelTransform[1].Rotate(rotationAmount);
     wheelTransform[2].Rotate(rotationAmount);
     wheelTransform[3].Rotate(rotationAmount);
 }
  
 private var deviceAccelerometerSensitivity : float = 2;
  
 function checkInput()
 {
     if (Application.platform == RuntimePlatform.IPhonePlayer ||(Application.platform == RuntimePlatform.Android))
     {
        accel = Input.acceleration * deviceAccelerometerSensitivity;
  
        if(accel.x > deadZone || accel.x < -deadZone)
     {
        horizontal = accel.x;
     }
     else
     {
        horizontal = 0;
     }
        throttle =0;
  
        for (var touch : Touch in Input.touches)
     {
        if(touch.position.x > Screen.width -Screen.width/3 && touch.position.y < Screen.height/3)
        {
          throttle = 1;
        }
        else if(touch.position.x < Screen.width -Screen.width/3 && touch.position.y > Screen.height/3)
        {
          throttle= -1;
        }
     }
 }
     else if (Application.platform == RuntimePlatform.WindowsEditor || RuntimePlatform.WindowsWebPlayer || RuntimePlatform.WindowsPlayer )
     {
        horizontal = Input.GetAxis("Horizontal");
        throttle = Input.GetAxis("Vertical");
     }
 }
  
 function carPhysicsUpdate()
 {
     myRight = carTransform.right;
     velo = carRigidbody.velocity;
     tempVEC = Vector3(velo.x,0,velo.z);
     flatVelo = tempVEC;
     dir = transform.TransformDirection(carFwd);
     tempVEC = Vector3(dir.x,0,dir.z);
     flatDir = Vector3.Normalize(tempVEC);
     relativeVelocity = carTransform.InverseTransformDirection(flatVelo);
     slideSpeed = Vector3.Dot(myRight,flatVelo);
     mySpeed = flatVelo.magnitude;
     rev = Mathf.Sign(Vector3.Dot(flatVelo,flatDir));
     engineForce = ( flatDir * ( power * throttle ) * carMass);
     actualTurn = horizontal;
     if(rev < 0.1f)
     {
        actualTurn =- actualTurn;
     }
     turnVec =((( carUp * turnSpeed ) * actualTurn ) * carMass )* 800;
     actualGrip = Mathf.Lerp(100, carGrip, mySpeed * 0.02);
     imp = myRight * ( -slideSpeed * carMass * actualGrip);
 }
  
 function slowVelocity()
 {
     carRigidbody.AddForce(-flatVelo * 0.8);
 }
  
 function engineSound()
 {
     audio.pitch = 0.30 + mySpeed * 0.025;
     if (mySpeed > 30)
     {
        audio.pitch = 0.25 + mySpeed * 0.015;
     }
     if (mySpeed > 40)
     {
        audio.pitch = 0.20 + mySpeed * 0.013;
     }
     if (mySpeed > 49)
     {
        audio.pitch = 0.15 + mySpeed * 0.011;
     }
     if ( audio.pitch > 2.0 )
     {
        audio.pitch = 2.0;
     }
 }
  
 function FixedUpdate()
 {
     if(mySpeed < maxSpeed)
     {
     carRigidbody.AddForce( engineForce * Time.deltaTime);
  
     if (mySpeed > maxSpeedToTurn)
     {
     carRigidbody.AddTorque ( turnVec * Time.deltaTime);
     }
     else if(mySpeed < maxSpeedToTurn)
     {
        return;
     }
     carRigidbody.AddForce( imp * Time.deltaTime );
     }
 }
Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

2 Replies

  • Sort: 
avatar image
0
Best Answer

Answer by jimmycrazyskills · Feb 14, 2014 at 12:35 AM

Sorry if this is wrong =) , you could try this, but for this to work you would have to tag the terrain with a tag called "Terrain", you can use a different tag just remember to change the code!.

 function OnCollisionEnter(collision : Collision) {
         if(collision.gameObject.tag == "Terrain"){
                 print("The object is colliding with the floor!");
         }
 }
Comment
Add comment · Show 2 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image jakeomonk · Feb 14, 2014 at 05:12 PM 0
Share

thank you so much ive been trying to do this for 3 days i have had a massive conversation with another guy about this and it was this simple, thanks so much.

avatar image jimmycrazyskills · Feb 20, 2014 at 06:58 PM 0
Share

no probs =)

avatar image
0

Answer by greencvbn · Feb 14, 2014 at 09:38 AM

you may also include something with oncollisionstay to make shure your car is grounded. if you only include on collision enter your car will only get information on it being in contact with terrain for only one frame so you should also include oncollisionstay.

Comment
Add comment · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

Follow this Question

Answers Answers and Comments

20 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

How do I test if car is grounded to stop it from driving in mid-air? 2 Answers

Can someone help me fix my Javascript for Flickering Light? 6 Answers

Setting Scroll View Width GUILayout 1 Answer

How to combine all meshes in an array (JAVASCRIPT) 0 Answers

Unity3D Ai wont shoot 1 Answer


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges