UnityAPI手册-2019.4官网版
文集大纲加载中……
本文档使用 MrDoc 发布
-
+
首页
Physics.BoxCast
# [Physics](https://docs.unity3d.com/cn/2019.4/ScriptReference/Physics.html).BoxCast public static bool **BoxCast** ([Vector3](https://docs.unity3d.com/cn/2019.4/ScriptReference/Vector3.html) **center**, [Vector3](https://docs.unity3d.com/cn/2019.4/ScriptReference/Vector3.html) **halfExtents**, [Vector3](https://docs.unity3d.com/cn/2019.4/ScriptReference/Vector3.html) **direction**, [Quaternion](https://docs.unity3d.com/cn/2019.4/ScriptReference/Quaternion.html) **orientation**= Quaternion.identity, float **maxDistance**= Mathf.Infinity, int **layerMask**= DefaultRaycastLayers, [QueryTriggerInteraction](https://docs.unity3d.com/cn/2019.4/ScriptReference/QueryTriggerInteraction.html) **queryTriggerInteraction**= QueryTriggerInteraction.UseGlobal); ## 参数 | center | 盒体的中心。 | | ------------------------- | ------------------------------------------------------------------------------------------------------ | | halfExtents | 盒体各个维度大小的一半。 | | direction | 投射盒体的方向。 | | orientation | 盒体的旋转。 | | maxDistance | 投射的最大长度。 | | layerMask | [层遮罩](https://docs.unity3d.com/cn/2019.4/Manual/Layers.html),用于在投射胶囊体时有选择地忽略碰撞体。 | | queryTriggerInteraction | 指定该查询是否应该命中触发器。 | ## 返回 **bool** 如果发现任何交叉点,则返回 true。 ## 描述 沿射线投射盒体并返回有关命中对象的详细信息。 --- public static bool **BoxCast** ([Vector3](https://docs.unity3d.com/cn/2019.4/ScriptReference/Vector3.html) **center**, [Vector3](https://docs.unity3d.com/cn/2019.4/ScriptReference/Vector3.html) **halfExtents**, [Vector3](https://docs.unity3d.com/cn/2019.4/ScriptReference/Vector3.html) **direction**, out [RaycastHit](https://docs.unity3d.com/cn/2019.4/ScriptReference/RaycastHit.html) **hitInfo**, [Quaternion](https://docs.unity3d.com/cn/2019.4/ScriptReference/Quaternion.html) **orientation**= Quaternion.identity, float **maxDistance**= Mathf.Infinity, int **layerMask**= DefaultRaycastLayers, [QueryTriggerInteraction](https://docs.unity3d.com/cn/2019.4/ScriptReference/QueryTriggerInteraction.html) **queryTriggerInteraction**= QueryTriggerInteraction.UseGlobal); ## 参数 | center | 盒体的中心。 | | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | halfExtents | 盒体各个维度大小的一半。 | | direction | 投射盒体的方向。 | | hitInfo | 如果返回 true,则 `hitInfo` 将包含有关碰撞体的撞击位置的更多信息(另请参阅:[RaycastHit](https://docs.unity3d.com/cn/2019.4/ScriptReference/RaycastHit.html))。 | | orientation | 盒体的旋转。 | | maxDistance | 投射的最大长度。 | | layerMask | [层遮罩](https://docs.unity3d.com/cn/2019.4/Manual/Layers.html),用于在投射胶囊体时有选择地忽略碰撞体。 | | queryTriggerInteraction | 指定该查询是否应该命中触发器。 | ## 返回 **bool** 如果发现任何交叉点,则返回 true。 ## 描述 沿射线投射盒体并返回有关命中对象的详细信息。 ``` //Attach this script to a GameObject. Make sure it has a Collider component by clicking the Add Component button. Then click Physics>Box Collider to attach a Box Collider component. //This script creates a BoxCast in front of the GameObject and outputs a message if another Collider is hit with the Collider’s name. //It also draws where the ray and BoxCast extends to. Just press the Gizmos button to see it in Play Mode. //Make sure to have another GameObject with a Collider component for the BoxCast to collide with. using UnityEngine; public class Example : MonoBehaviour { float m_MaxDistance; float m_Speed; bool m_HitDetect; Collider m_Collider; RaycastHit m_Hit; void Start() { //Choose the distance the Box can reach to m_MaxDistance = 300.0f; m_Speed = 20.0f; m_Collider = GetComponent<Collider>(); } void Update() { //Simple movement in x and z axes float xAxis = Input.GetAxis("Horizontal") * m_Speed; float zAxis = Input.GetAxis("Vertical") * m_Speed; transform.Translate(new Vector3(xAxis, 0, zAxis)); } void FixedUpdate() { //Test to see if there is a hit using a BoxCast //Calculate using the center of the GameObject's Collider(could also just use the GameObject's position), half the GameObject's size, the direction, the GameObject's rotation, and the maximum distance as variables. //Also fetch the hit data m_HitDetect = Physics.BoxCast(m_Collider.bounds.center, transform.localScale, transform.forward, out m_Hit, transform.rotation, m_MaxDistance); if (m_HitDetect) { //Output the name of the Collider your Box hit Debug.Log("Hit : " + m_Hit.collider.name); } } //Draw the BoxCast as a gizmo to show where it currently is testing. Click the Gizmos button to see this void OnDrawGizmos() { Gizmos.color = Color.red; //Check if there has been a hit yet if (m_HitDetect) { //Draw a Ray forward from GameObject toward the hit Gizmos.DrawRay(transform.position, transform.forward * m_Hit.distance); //Draw a cube that extends to where the hit exists Gizmos.DrawWireCube(transform.position + transform.forward * m_Hit.distance, transform.localScale); } //If there hasn't been a hit yet, draw the ray at the maximum distance else { //Draw a Ray forward from GameObject toward the maximum distance Gizmos.DrawRay(transform.position, transform.forward * m_MaxDistance); //Draw a cube at the maximum distance Gizmos.DrawWireCube(transform.position + transform.forward * m_MaxDistance, transform.localScale); } } } ```
da
2022年6月14日 15:49
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
关于 MrDoc
觅思文档MrDoc
是
州的先生
开发并开源的在线文档系统,其适合作为个人和小型团队的云笔记、文档和知识库管理工具。
如果觅思文档给你或你的团队带来了帮助,欢迎对作者进行一些打赏捐助,这将有力支持作者持续投入精力更新和维护觅思文档,感谢你的捐助!
>>>捐助鸣谢列表
微信
支付宝
QQ
PayPal
Markdown文件
分享
链接
类型
密码
更新密码