Version: 5.4 beta (switch to 5.3)
LanguageEnglish
  • C#
  • JS

Script language

Select your preferred scripting language. All code snippets will be displayed in this language.

RaycastHit.distance

Suggest a change

Success!

Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable.

Close

Sumbission failed

For some reason your suggested change could not be submitted. Please try again in a few minutes. And thank you for taking the time to help us improve the quality of Unity Documentation.

Close

Cancel

public var distance: float;
public float distance;

Description

The distance from the ray's origin to the impact point.

	// Movable, levitating object.
	
	// This works by measuring the distance to ground with a
	// raycast then applying a force that decreases as the object
	// reaches the desired levitation height.
	
	// Vary the parameters below to
	// get different control effects. For example, reducing the
	// hover damping will tend to make the object bounce if it
	// passes over an object underneath.
	
	// Forward movement force.
	var moveForce = 1.0;
	
	// Torque for left/right rotation.
	var rotateTorque = 1.0;
	
	// Desired hovering height.
	var hoverHeight = 4.0;
	
	// The force applied per unit of distance below the desired height.
	var hoverForce = 5.0;
	
	// The amount that the lifting force is reduced per unit of upward speed.
	// This damping tends to stop the object from bouncing after passing over
	// something.
	var hoverDamp = 0.5;
	
	// Rigidbody component.
	var rb: Rigidbody;
	
	function Start () {
		rb = GetComponent.<Rigidbody>();
		
		// Fairly high drag makes the object easier to control.
		rb.drag = 0.5;
		rb.angularDrag = 0.5;
	}
	
	
	function FixedUpdate () {
		// Push/turn the object based on arrow key input.
		rb.AddForce(Input.GetAxis("Vertical") * moveForce * transform.forward);
		rb.AddTorque(Input.GetAxis("Horizontal") * rotateTorque * Vector3.up);
		
		var hit: RaycastHit;
		var downRay = new Ray(transform.position, -Vector3.up);
		
		// Cast a ray straight downwards.
		if (Physics.Raycast(downRay, hit)) {
			// The "error" in height is the difference between the desired height
			// and the height measured by the raycast distance.
			var hoverError = hoverHeight - hit.distance;
			
			// Only apply a lifting force if the object is too low (ie, let
			// gravity pull it downward if it is too high).
			if (hoverError > 0) {
				// Subtract the damping from the lifting force and apply it to
				// the rigidbody. 
				var upwardSpeed = rb.velocity.y;
				var lift = hoverError * hoverForce - upwardSpeed * hoverDamp;
				rb.AddForce(lift * Vector3.up);
			}
		}
	}
using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour { public float moveForce = 1.0F; public float rotateTorque = 1.0F; public float hoverHeight = 4.0F; public float hoverForce = 5.0F; public float hoverDamp = 0.5F; public Rigidbody rb; void Start() { rb = GetComponent<Rigidbody>(); rb.drag = 0.5F; rb.angularDrag = 0.5F; } void FixedUpdate() { rb.AddForce(Input.GetAxis("Vertical") * moveForce * transform.forward); rb.AddTorque(Input.GetAxis("Horizontal") * rotateTorque * Vector3.up); RaycastHit hit; Ray downRay = new Ray(transform.position, -Vector3.up); if (Physics.Raycast(downRay, out hit)) { float hoverError = hoverHeight - hit.distance; if (hoverError > 0) { float upwardSpeed = rb.velocity.y; float lift = hoverError * hoverForce - upwardSpeed * hoverDamp; rb.AddForce(lift * Vector3.up); } } } }