Physics.Raycast 光线投射
通过触摸点向屏幕内发射射线,获取碰撞的物体相关信息。
可用方法:
static function Raycast (origin : Vector3, direction : Vector3, distance : float = Mathf.Infinity, layerMask : int = kDefaultRaycastLayers) : bool static function Raycast (origin : Vector3, direction : Vector3, out hitInfo : RaycastHit, distance : float = Mathf.Infinity, layerMask : int = kDefaultRaycastLayers) : bool static function Raycast (ray : Ray, distance : float = Mathf.Infinity, layerMask : int = kDefaultRaycastLayers) : bool static function Raycast (ray : Ray, out hitInfo : RaycastHit, distance : float = Mathf.Infinity, layerMask : int = kDefaultRaycastLayers) : bool
参数属性:
origin |
射线的起始点 |
direction |
射线的方向 |
distance |
射线的长度,默认无穷大 |
layerMask |
只碰撞设置层级Layermask,其它层级的碰撞忽略 |
hitInfo |
当产生碰撞,hitInfo将包含碰撞到的碰撞体信息 |
ray |
射线的起点和方向 |
NavMesh和射线结合实例:
1 using UnityEngine; 2 using System.Collections; 3 4 public class ClickListener : MonoBehaviour { 5 6 public Transform hero; 7 8 NavMeshAgent heroAgent; 9 int targetMask; 10 11 void Start() { 12 heroAgent = hero.GetComponent<NavMeshAgent>(); 13 targetMask = LayerMask.GetMask("map"); 14 } 15 16 void Update() { 17 if (Input.GetMouseButtonDown(0)) { 18 RaycastHit hit; 19 Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); 20 if (Physics.Raycast(ray, out hit, 100, targetMask)) { 21 heroAgent.SetDestination(hit.point); //设置代理终点 22 string hitName = hit.transform.name; //碰撞的物体的名字 23 } 24 25 } 26 } 27 }
根据碰撞的物体名称,可以对物体进行相关处理,如游戏中的拾取,销毁功能等。