Legacy Documentation: Version 4.5.0

Script language:

  • JS
  • C#
  • Boo
Script language

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

RaycastHit.distance

var distance: float;
float distance;
distance as float

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;
	
	
	
	function Start () {
		// Fairly high drag makes the object easier to control.
		rigidbody.drag = 0.5;
		rigidbody.angularDrag = 0.5;
	}
	
	
	function FixedUpdate () {
		// Push/turn the object based on arrow key input.
		rigidbody.AddForce(Input.GetAxis("Vertical") * moveForce * transform.forward);
		rigidbody.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 = rigidbody.velocity.y;
				var lift = hoverError * hoverForce - upwardSpeed * hoverDamp;
				rigidbody.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;
    void Start() {
        rigidbody.drag = 0.5F;
        rigidbody.angularDrag = 0.5F;
    }
    void FixedUpdate() {
        rigidbody.AddForce(Input.GetAxis("Vertical") * moveForce * transform.forward);
        rigidbody.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 = rigidbody.velocity.y;
                float lift = hoverError * hoverForce - upwardSpeed * hoverDamp;
                rigidbody.AddForce(lift * Vector3.up);
            }
        }
    }
}
import UnityEngine
import System.Collections

public class ExampleClass(MonoBehaviour):

	public moveForce as float = 1.0F

	public rotateTorque as float = 1.0F

	public hoverHeight as float = 4.0F

	public hoverForce as float = 5.0F

	public hoverDamp as float = 0.5F

	def Start() as void:
		rigidbody.drag = 0.5F
		rigidbody.angularDrag = 0.5F

	def FixedUpdate() as void:
		rigidbody.AddForce(((Input.GetAxis('Vertical') * moveForce) * transform.forward))
		rigidbody.AddTorque(((Input.GetAxis('Horizontal') * rotateTorque) * Vector3.up))
		hit as RaycastHit
		downRay as Ray = Ray(transform.position, -Vector3.up)
		if Physics.Raycast(downRay, ):
			hoverError as float = (hoverHeight - hit.distance)
			if hoverError > 0:
				upwardSpeed as float = rigidbody.velocity.y
				lift as float = ((hoverError * hoverForce) - (upwardSpeed * hoverDamp))
				rigidbody.AddForce((lift * Vector3.up))