大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
Unity 小科普
老规矩,先介绍一下 Unity 的科普小知识:
- Unity是 实时3D互动内容创作和运营平台 。
- 包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助 Unity 将创意变成现实。
- Unity 平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和3D内容,支持平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备。
- 也可以简单把 Unity 理解为一个游戏引擎,可以用来专业制作游戏!
Unity 踩坑小知识点学习
Unity中的 碰撞盒检测 Physics.OverlapBox、OverlapCapsule、OverlapSphere
在Unity中常见的有两种检测方法
- 一种是组件的检测方法
OnTrigger、OnCollider
- 另一种就是
Physics.Overlap
第二种方法其实是Physics中的API,官方API介绍地址。
能直接通过Physics.到的碰撞检测方法有下面几种:
- Physics.OverlapBox
- Physics.OverlapCapsule
- Physics.OverlapSphere
其中这三种又有多种重载函数,看自己的需求选择即可。
下面简单介绍下这三种形状的碰撞检测方法的使用。
Physics.OverlapBox
public static Collider[] OverlapBox (Vector3 center, Vector3 halfExtents, [DefaultValue ("Quaternion.identity")] Quaternion orientation, [DefaultValue ("AllLayers")] int layerMask, [DefaultValue ("QueryTriggerInteraction.UseGlobal")] QueryTriggerInteraction queryTriggerInteraction);
参数介绍:第一个Vector3是碰撞的中心,第二个为Box的长宽高,第三个Quaternion类型为Box的方向,第四个为碰撞检测的层级的Layer(默认为所有的Layer),最后的queryTrigger一般用不到。
返回值为与BOX碰撞的Collider数组
下面是使用实例:
void Update()
{
Collider[] collider = Physics.OverlapBox(gameObject.transform.position, new Vector3(3, 3, 3),Quaternion.identity,LayerMask.GetMask("Enemy"));
foreach (var col in collider)
{
Debug.Log("检测到的层级为“Enemy”的游戏对象:"+col);
}
}
一般来说没有特殊的需求,只需要设置碰撞的中心点和长宽高即可。
我们给主角的脚本中添加上一个这样的方法,就可以实现与Collider组件一样的效果了,拿到与主角碰撞的所有物体。
特别说明:由于使用该方法进行检测的时候,缺少一个视觉效果,我们不知道检测的范围到底有多大,所以这个时候可以使用 Gizmos 辅助线框 来完美解决这个问题
效果如下:
完整代码如下:
[Header("检测盒子的Vector3")]
public Vector3 ColliderV3;
void Update()
{
Collider[] collider = Physics.OverlapBox(gameObject.transform.position, ColliderV3, Quaternion.identity);
foreach (var col in collider)
{
Debug.Log("检测到的游戏对象:"+col);
}
}
private void OnDrawGizmos()
{
Gizmos.color = Color.green;//改变线框的颜色
Gizmos.DrawWireCube(transform.position, ColliderV3);//正方体虚线框
}
Physics.OverlapCapsule
public static Collider[] OverlapCapsule (Vector3 point0, Vector3 point1, float radius, [DefaultValue ("AllLayers")] int layerMask, [DefaultValue ("QueryTriggerInteraction.UseGlobal")] QueryTriggerInteraction queryTriggerInteraction);
参数介绍:第一个Vector3是Capsule的的底部中心,第一个Vector3是Capsule的的顶部中心,第三个是Capsule的半径,第四个为碰撞检测的层级的Layer(默认为所有的Layer),最后的queryTrigger一般用不到。
返回值为与Capsule碰撞的Collider数组。
使用方法与OverlapBox一致,只不过是参数不同。
Physics.OverlapSphere
public static Collider[] OverlapSphere (Vector3 position, float radius, [DefaultValue ("AllLayers")] int layerMask, [DefaultValue ("QueryTriggerInteraction.UseGlobal")] QueryTriggerInteraction queryTriggerInteraction);
参数介绍:第一个Vector3是Sphere的中心,第二个是Capsule的半径,第三个为碰撞检测的层级的Layer(默认为所有的Layer),最后的queryTrigger一般用不到。
返回值为与Capsule碰撞的Collider数组。
使用方法与OverlapBox一致,只不过是参数不同。
绘制可视化线框的时候使用Gizmos.DrawWireSphere
即可。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/197300.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...