Unity QueryTriggerInteraction 的作用
例子:射线检测
使用:
Physics.Raycast(Vector3 origin, Vector3 direction, out RaycastHit
hitInfo, float maxDistance, int layerMask, QueryTriggerInteraction
queryTriggerInteraction);
来测试 QueryTriggerInteraction 的作用
namespace UnityEngine {
//
// 摘要:
// Overrides the global Physics.queriesHitTriggers.
public enum QueryTriggerInteraction
{
//
// 摘要:
// Queries use the global Physics.queriesHitTriggers setting.
UseGlobal = 0,
//
// 摘要:
// Queries never report Trigger hits.
Ignore = 1,
//
// 摘要:
// Queries always report Trigger hits.
Collide = 2
} }
创建一个新场景,创建一个cube
//当射线击中cube
当Cube的BoxColider的isTrigger属性未勾选时
//QueryTriggerInteraction.Ignore会打印cube的名字
//QueryTriggerInteraction.Collide会打印cube的名字
//当Cube的BoxColider的isTrigger属性勾选时
//QueryTriggerInteraction.Ignore不会打印cube的名字
//QueryTriggerInteraction.Collide会打印cube的名字
代码如下
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 射线检测
/// </summary>
public class Test : MonoBehaviour
{
//射线的出发点
public Vector3 origin = Vector3.zero;
//射线的方向
public Vector3 direction = Vector3.forward;
//射线的最大距离
public float maxDistance = 10;
//射线可以检测到的物理层
public LayerMask layerMask = -1;
//覆盖全局的物理查询命中触发器
public QueryTriggerInteraction queryTriggerInteraction;
//记录被射线击中物体的信息
public RaycastHit hitInfo;
public RaycastHit hitInfo1;
// Update is called once per frame
void Update()
{
//发射一条射线
Physics.Raycast(origin,direction,out hitInfo,maxDistance,layerMask,queryTriggerInteraction);
//把射线画出来
Debug.DrawLine(origin,origin + direction.normalized * maxDistance,Color.green);
//如果射线集中物体打印物体的名字
if (hitInfo.collider!=null)
{
Debug.Log(hitInfo.transform.name);
}
}
}