Physics.Raycast

Physics.Raycast

Physics.Raycast切换到手册public static bool Raycast

(Vector3 origin,

Vector3 direction,

float maxDistance=

Mathf.Infinity,

int layerMask=

DefaultRaycastLayers,

QueryTriggerInteraction queryTriggerInteraction=

QueryTriggerInteraction.UseGlobal);

参数origin射线在世界坐标系中的起点。direction射线的方向。maxDistance射线应检查碰撞的最大距离。layerMask

层遮罩,用于在投射射线时有选择地忽略碰撞体。queryTriggerInteraction指定该查询是否应该命中触发器。返回bool

如果射线与任何碰撞体相交,返回 true,否则返回 false。

描述向场景中的所有碰撞体投射一条射线,该射线起点为 /origin/,朝向 /direction/,长度为 /maxDistance/。

您可以选择提供一个 LayerMask,以过滤掉不想生成与其碰撞的碰撞体。您可以通过指定 queryTriggerInteraction 来控制是让触发碰撞体生成命中效果,还是使用全局 Physics.queriesHitTriggers 设置。注意:对于射线投射起点位于碰撞体内的情况,Raycast 不会检测到碰撞体。在所有这些示例中,都使用了 FixedUpdate 而不是 Update。请参阅事件函数的执行顺序,以了解 Update 与 FixedUpdate 的区别,以及它们与物理查询的关系。

using UnityEngine;// C# example.public class ExampleClass : MonoBehaviour

{

// See Order of Execution for Event Functions for information on FixedUpdate() and Update() related to physics queries

void FixedUpdate()

{

// Bit shift the index of the layer (8) to get a bit mask

int layerMask = 1 << 8; // This would cast rays only against colliders in layer 8.

// But instead we want to collide against everything except layer 8. The ~ operator does this, it inverts a bitmask.

layerMask = ~layerMask; RaycastHit hit;

// Does the ray intersect any objects excluding the player layer

if (Physics.Raycast(transform.position, transform.TransformDirection(Vector3.forward), out hit, Mathf.Infinity, layerMask))

{

Debug.DrawRay(transform.position, transform.TransformDirection(Vector3.forward) * hit.distance, Color.yellow);

Debug.Log("Did Hit");

}

else

{

Debug.DrawRay(transform.position, transform.TransformDirection(Vector3.forward) * 1000, Color.white);

Debug.Log("Did not Hit");

}

}

}

该示例创建一个简单的射线投射 - 从对象的当前位置向前投影,延伸 10 个单位。

using UnityEngine;public class ExampleClass : MonoBehaviour

{

// See Order of Execution for Event Functions for information on FixedUpdate() and Update() related to physics queries

void FixedUpdate()

{

Vector3 fwd = transform.TransformDirection(Vector3.forward); if (Physics.Raycast(transform.position, fwd, 10))

print("There is something in front of the object!");

}

}

public static bool Raycast

(Vector3 origin,

Vector3 direction,

out RaycastHit hitInfo,

float maxDistance,

int layerMask,

QueryTriggerInteraction queryTriggerInteraction);

参数origin射线在世界坐标系中的起点。direction射线的方向。hitInfo如果返回 true,则 hitInfo 将包含有关最近的碰撞体的命中位置的更多信息。(另请参阅:RaycastHit)。maxDistance射线应检查碰撞的最大距离。layerMask

层遮罩,用于在投射射线时有选择地忽略碰撞体。queryTriggerInteraction指定该查询是否应该命中触发器。返回bool

当光线与任何碰撞体相交时,返回 true,否则返回 false。

描述向场景中的所有碰撞体投射射线,并返回有关命中对象的详细信息。

该示例报告当前对象与报告的碰撞体之间的距离:

using UnityEngine;public class RaycastExample : MonoBehaviour

{

// See Order of Execution for Event Functions for information on FixedUpdate() and Update() related to physics queries

void FixedUpdate()

{

RaycastHit hit; if (Physics.Raycast(transform.position, -Vector3.up, out hit))

print("Found an object - distance: " + hit.distance);

}

}

该示例重新引入 maxDistance 参数,以限制投射射线的距离:

using UnityEngine;public class RaycastExample : MonoBehaviour

{

// See Order of Execution for Event Functions for information on FixedUpdate() and Update() related to physics queries

void FixedUpdate()

{

RaycastHit hit; if (Physics.Raycast(transform.position, -Vector3.up, out hit, 100.0f))

print("Found an object - distance: " + hit.distance);

}

}

public static bool Raycast

(Ray ray,

float maxDistance=

Mathf.Infinity,

int layerMask=

DefaultRaycastLayers,

QueryTriggerInteraction queryTriggerInteraction=

QueryTriggerInteraction.UseGlobal);

参数ray光线的起点和方向。maxDistance射线应检查碰撞的最大距离。layerMask

层遮罩,用于在投射射线时有选择地忽略碰撞体。queryTriggerInteraction指定该查询是否应该命中触发器。返回bool

当光线与任何碰撞体相交时,返回 true,否则返回 false。

描述与上面使用 ray.origin 和 origin(而不是 origin 和 /direction/)时相同。

using UnityEngine;public class ExampleClass : MonoBehaviour

{

// See Order of Execution for Event Functions for information on FixedUpdate() and Update() related to physics queries

void FixedUpdate()

{

Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

if (Physics.Raycast(ray, 100))

print("Hit something!");

}

}

public static bool Raycast

(Ray ray,

out RaycastHit hitInfo,

float maxDistance=

Mathf.Infinity,

int layerMask=

DefaultRaycastLayers,

QueryTriggerInteraction queryTriggerInteraction=

QueryTriggerInteraction.UseGlobal);

参数ray光线的起点和方向。hitInfo如果返回 true,则 hitInfo 将包含有关最近的碰撞体的命中位置的更多信息。(另请参阅:RaycastHit)。maxDistance射线应检查碰撞的最大距离。layerMask

层遮罩,用于在投射射线时有选择地忽略碰撞体。queryTriggerInteraction指定该查询是否应该命中触发器。返回bool

当光线与任何碰撞体相交时,返回 true,否则返回 false。

描述与上面使用 ray.origin 和 origin(而不是 origin 和 /direction/)时相同。

该示例实现以下功能:每当检测到碰撞时,沿射线长度绘制一条线:

using UnityEngine;public class ExampleClass : MonoBehaviour

{

// See Order of Execution for Event Functions for information on FixedUpdate() and Update() related to physics queries

void FixedUpdate()

{

Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

RaycastHit hit; if (Physics.Raycast(ray, out hit, 100))

Debug.DrawLine(ray.origin, hit.point);

}

}

相关推荐

闲鱼app怎么发送语音信息 闲鱼app发送语音信息方法【详解】
​​MuscleTech肌肉科技:美国知名运动营养补剂品牌解析​
真的365会不会黑款

​​MuscleTech肌肉科技:美国知名运动营养补剂品牌解析​

📅 10-13 👁️ 1378
152开头是什么运营商152开头的电话号码是移动还是联通