Physics.Raycast 射线投射

    public static bool Raycast(Vector3 origin, Vector3 direction, float maxDistance = Mathf.Infinity, int layerMask = DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal);

    1. using System.Collections;
    2. public class ExampleClass : MonoBehaviour {
    3. void Update() {
    4. RaycastHit hit;
    5. if (Physics.Raycast(transform.position, -Vector3.up, out hit))
    6. float distanceToGround = hit.distance;
    7. }
    1. using UnityEngine;
    2. public class ExampleClass : MonoBehaviour {
    3. void Update() {
    4. Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
    5. if (Physics.Raycast(ray, 100))
    6. print("Hit something");
    7. }
    8. }

    Physics.CapsuleCast 胶囊投射

    public static bool CapsuleCast(Vector3 point1, Vector3 point2, float radius, Vector3 direction, out RaycastHit hitInfo, float maxDistance = Mathf.Infinity, int layerMask = DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal);

    胶囊是由radius半径与point1和point2位置的两个球形成胶囊的两端定义。返回胶囊沿direction方向碰到的第一个碰撞器。这通常用于投射不需足够的精度,因为你要找出一个特定大小的物体,如人物,能移动到某处而不在途中碰撞到任何东西。

    1. using UnityEngine;
    2. using System.Collections;
    3. public class ExampleClass : MonoBehaviour {
    4. void Update() {
    5. RaycastHit hit;
    6. CharacterController charContr = GetComponent<CharacterController>();
    7. Vector3 p1 = transform.position + charContr.center + Vector3.up * -charContr.height * 0.5F;
    8. Vector3 p2 = p1 + Vector3.up * charContr.height;
    9. float distanceToObstacle = 0;
    10. // Cast character controller shape 10 meters forward to see if it is about to hit anything.
    11. if (Physics.CapsuleCast(p1, p2, charContr.radius, transform.forward, out hit, 10))
    12. distanceToObstacle = hit.distance;
    13. }