Unity基本组件—Collider

组件介绍

1.盒碰撞器(Box Collider)

在这里插入图片描述
1.Edit Colloder:手动编辑Collider
2.Is Trigger:是否为触发器
3.Material:材质
4.Center:碰撞器的中心点,相对于物体的自身坐标
5.Size:碰撞器的大小

2.椭圆碰撞器(Sphere Collider)

在这里插入图片描述
1.Edit Colloder:手动编辑Collider
2.Is Trigger:是否为触发器
3.Material:材质
4.Center:碰撞器的中心点,相对于物体的自身坐标
5.Radius:碰撞器的半径大小

3.胶囊碰撞器(Capsule Collider)

在这里插入图片描述
1.Edit Colloder:手动编辑Collider
2.Is Trigger:是否为触发器
3.Material:材质
4.Center:碰撞器的中心点,相对于物体的自身坐标
5.Radius:碰撞器的半径大小
6.Height:圆柱体高度
7.Direction:方向

4.网格碰撞器(Mesh Collider)

在这里插入图片描述
1.Convex:凸面体,勾选后物体的碰撞体凹凸不平的地方都将被填平
2.Is Trigger:是否为触发器
3.Cooking Options烘焙选项
4.Material:材质
5.Mesh:选择网格

碰撞器和触发器

首先,要想实现物体间的碰撞效果则需要一个必要条件:一刚二碰
两个要进行碰撞的物体必须都具备碰撞体,且至少有一个物体带有钢体才可进行碰撞检测,同样,触发器作为碰撞器的一个开关(只需要把Is Trigger选项勾选即可变为触发器),也需具备如上条件才可进行触发检测。

属性
名称作用
attachedRigidbody碰撞器附加的刚体
bounds碰撞器在世界坐标空间的边界框
contactOffset当他们的collider相差为多少距离的时候开始检测碰撞(触发器修改这个值无效)
enabledbool型,启用碰撞器将会碰撞其他碰撞器,禁用碰撞器就不会碰撞其他碰撞器
isTrigger是否开启触发器
material材质
sharedMaterial共享材质
方法
名称方法
OnCollisionEnter(Collision collision)碰撞开始⼀瞬间时调⽤⼀次
OnCollisionExit(Collision collision)碰撞分离⼀瞬间时调⽤
OnCollisionStay(Collision collision)碰撞过程中相对运动时持续调⽤,每帧⼀次
OnTriggerEnter(Collider other)进⼊触发器的时候调⽤⼀次
OnTriggerExit(Collider other)退出触发器的时候调⽤⼀次
OnTriggerStay(Collider other)处于某个触发器之中的时候持续调⽤,每帧⼀次
ClosestPoint(Vector3 position)返回对撞机上最接近给定位置的点
ClosestPointOnBounds(Vector3 position)到附加碰撞器的边界框最近的点
射线检测

Collider.Raycast(Ray ray, out RaycastHit hitInfo, float maxDistance)
ray 射线的起点和方向。
hitInfo 如果返回true,hitInfo则将包含有关撞到碰撞器的位置的更多信息
maxDistance 射线的最大长度。

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    public Collider coll;
    void Start() {
        coll = GetComponent<Collider>();
    }
    void Update() {
        if (Input.GetMouseButtonDown(0)) {
            //ScreenPointToRay将屏幕上的⼀个点转换成射线
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;
            if (coll.Raycast(ray, out hit, 100.0F))
                transform.position = ray.GetPoint(100.0F);
            
        }
    }
}

Ray射线

属性
名称作用
direction射线的方向
origin射线的起点
方法

Ray.GetPoint(float distance); 返回distance沿射线单位的点

RaycastHit

属性
名称作用
barycentricCoordinate所碰到的三角形的重心坐标
collider碰到的碰撞器,如果什么也没有碰到,此属性为null
distance从射线的原点到撞击点的距离
lightmapCoord光照图坐标
normal射线所碰到的表面的法线
point在世界空间中,射线碰到碰撞器的碰撞点
rigidbody射线碰到碰撞器的刚体,如果什么也没有碰到,此属性为null
textureCoord在碰撞点的UV纹理坐标
textureCoord2碰撞点的第二个UV纹理坐标
transform碰到的刚体或碰撞器的变换
triangleIndex三角形索引
方法

Physics.Raycast(Vector3 origin, Vector3 direction, float maxDistance = Mathf.Infinity, int layerMask = DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal);
origin 射线在世界坐标中的起点。
direction 射线的方向。
maxDistance 射线应检查碰撞的最大距离。
layerMask 一种图层蒙版,用于在投射射线时有选择地忽略“碰撞器”。
queryTriggerInteraction 指定此查询是否应命中触发器。

Physics.Raycast 发射物理射线,返回⼀个碰撞检测对象RaycastHitbool值

——————————————————————————————————————
——————————————————————————————————————

Physics.RaycastAll(Ray ray, float maxDistance = Mathf.Infinity, int layerMask = DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal);
ray 射线的起点和方向
maxDistance 射线应检查碰撞的最大距离.
layerMask 一种图层蒙版,用于在投射射线时有选择地忽略“碰撞器”
queryTriggerInteraction 指定此查询是否应命中触发器.

RaycastHit [] HitAll = Physics.RaycastAll;发射物理射线,返回所有碰撞检测对象

——————————————————————————————————————
——————————————————————————————————————

Physics.Linecast(Vector3 start, Vector3 end, int layerMask = DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal);
start 起点
end 终点
layerMask 一种图层蒙版,用于在投射射线时有选择地忽略“碰撞器”
queryTriggerInteraction 指定此查询是否应命中触发器

Physics.Linecast 从开始位置到结束位置做一个光线投射,如果与碰撞体交互,返回真

QueryTriggerInteraction
属性
名称作用
UseGlobal查询使用全局Physics.queriesHitTriggers设置
Ignore查询从不报告触发器命中
Collide查询总是报告触发器命中
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值