| origin | The point in 2D space where the ray originates. |
| direction | Vector representing the direction of the ray. |
| distance | Maximum distance over which to cast the ray. |
| layerMask | Filter to detect Colliders only on certain layers. |
| minDepth | Only include objects with a Z coordinate (depth) greater than this value. |
| maxDepth | Only include objects with a Z coordinate (depth) less than this value. |
Casts a ray against colliders in the scene.
// Float a rigidbody object a set distance above a surface.var floatHeight: float; // Desired floating height.
var liftForce: float; // Force to apply when lifting the rigidbody.
var damping: float; // Force reduction proportional to speed (reduces bouncing).function FixedUpdate() {
// Cast a ray straight down.
var hit: RaycastHit2D = Physics2D.Raycast(transform.position, -Vector2.up);
// If it hits something...
if (hit != null) {
// Calculate the distance from the surface and the "error" relative
// to the floating height.
var distance = Mathf.Abs(hit.point.y - transform.position.y);
var heightError: float = floatHeight - distance;
// The force is proportional to the height error, but we remove a part of it
// according to the object's speed.
var force = liftForce * heightError - rigidbody2D.velocity.y * damping;
// Apply the force to the rigidbody.
rigidbody2D.AddForce(Vector3.up * force);
}
}
using UnityEngine; using System.Collections; public class Example : MonoBehaviour { public float floatHeight; public float liftForce; public float damping; void FixedUpdate() { RaycastHit2D hit = Physics2D.Raycast(transform.position, -Vector2.up); if (hit != null) { float distance = Mathf.Abs(hit.point.y - transform.position.y); float heightError = floatHeight - distance; float force = liftForce * heightError - rigidbody2D.velocity.y * damping; rigidbody2D.AddForce(Vector3.up * force); } } }
import UnityEngine import System.Collections public class Example(MonoBehaviour): public floatHeight as float public liftForce as float public damping as float def FixedUpdate() as void: hit as RaycastHit2D = Physics2D.Raycast(transform.position, -Vector2.up) if hit != null: distance as float = Mathf.Abs((hit.point.y - transform.position.y)) heightError as float = (floatHeight - distance) force as float = ((liftForce * heightError) - (rigidbody2D.velocity.y * damping)) rigidbody2D.AddForce((Vector3.up * force))