Version: 5.3 (switch to 5.4b)
ЯзыкEnglish
  • C#
  • JS

Язык программирования

Выберите подходящий для вас язык программирования. Все примеры кода будут представлены на выбранном языке.

RaycastHit.distance

Предложить изменения

Успех!

Благодарим вас за то, что вы помогаете нам улучшить качество документации по Unity. Однако, мы не можем принять любой перевод. Мы проверяем каждый предложенный вами вариант перевода и принимаем его только если он соответствует оригиналу.

Закрыть

Ошибка внесения изменений

По определённым причинам предложенный вами перевод не может быть принят. Пожалуйста <a>попробуйте снова</a> через пару минут. И выражаем вам свою благодарность за то, что вы уделяете время, чтобы улучшить документацию по Unity.

Закрыть

Отменить

Руководство
public var distance: float;
public float distance;

Описание

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); } } } }