版本:Unity 6 (6000.0)
语言英语
  • C#

RaycastHit.distance

建议更改

成功!

感谢您帮助我们提高 Unity 文档质量。虽然我们无法接受所有提交,但我们确实会阅读用户的所有建议更改,并在适用时进行更新。

关闭

提交失败

由于某些原因,无法提交您建议的更改。请在几分钟内<a>重试</a>。感谢您抽出时间帮助我们提高 Unity 文档质量。

关闭

取消

public float distance;

描述

射线起点至碰撞点的距离。

对于射线,距离表示从射线起点到碰撞点向量的幅度。

对于扫掠体积或球体投射,距离表示从起点到体积与其他碰撞体接触的平移点向量的幅度。

请注意,RaycastHit.point 表示碰撞发生的点。

using UnityEngine;

public class Example : MonoBehaviour { // 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. float moveForce = 1.0f;

// Torque for left/right rotation. float rotateTorque = 1.0f;

// Desired hovering height. float hoverHeight = 4.0f;

// The force applied per unit of distance below the desired height. float hoverForce = 5.0f;

// 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. float hoverDamp = 0.5f;

// Rigidbody component. Rigidbody rb;

void Start() { rb = GetComponent<Rigidbody>();

// Fairly high drag makes the object easier to control. rb.drag = 0.5f; rb.angularDrag = 0.5f; }

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

RaycastHit hit; Ray downRay = new Ray(transform.position, -Vector3.up);

// Cast a ray straight downwards. if (Physics.Raycast(downRay, out hit)) { // The "error" in height is the difference between the desired height // and the height measured by the raycast distance. float 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. float upwardSpeed = rb.velocity.y; float lift = hoverError * hoverForce - upwardSpeed * hoverDamp; rb.AddForce(lift * Vector3.up); } } } }