Unity3D

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 }

根据碰撞的物体名称,可以对物体进行相关处理,如游戏中的拾取,销毁功能等。

原文地址:https://www.cnblogs.com/weigx/p/7265702.html