Unity基本组件—Collider

文章目录

  • 组件介绍
    • 1.盒碰撞器(Box Collider)
    • 2.椭圆碰撞器(Sphere Collider)
    • 3.胶囊碰撞器(Capsule Collider)
    • 4.网格碰撞器(Mesh Collider)
    • 碰撞器和触发器
        • 属性
        • 方法
        • 射线检测
    • Ray射线
        • 属性
        • 方法
    • RaycastHit
        • 属性
        • 方法
        • QueryTriggerInteraction
        • 属性

组件介绍

1.盒碰撞器(Box Collider)

Unity基本组件—Collider_第1张图片
1.Edit Colloder:手动编辑Collider
2.Is Trigger:是否为触发器
3.Material:材质
4.Center:碰撞器的中心点,相对于物体的自身坐标
5.Size:碰撞器的大小

2.椭圆碰撞器(Sphere Collider)

Unity基本组件—Collider_第2张图片
1.Edit Colloder:手动编辑Collider
2.Is Trigger:是否为触发器
3.Material:材质
4.Center:碰撞器的中心点,相对于物体的自身坐标
5.Radius:碰撞器的半径大小

3.胶囊碰撞器(Capsule Collider)

Unity基本组件—Collider_第3张图片
1.Edit Colloder:手动编辑Collider
2.Is Trigger:是否为触发器
3.Material:材质
4.Center:碰撞器的中心点,相对于物体的自身坐标
5.Radius:碰撞器的半径大小
6.Height:圆柱体高度
7.Direction:方向

4.网格碰撞器(Mesh Collider)

Unity基本组件—Collider_第4张图片
1.Convex:凸面体,勾选后物体的碰撞体凹凸不平的地方都将被填平
2.Is Trigger:是否为触发器
3.Cooking Options:烘焙选项
4.Material:材质
5.Mesh:选择网格

碰撞器和触发器

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

属性

名称 作用
attachedRigidbody 碰撞器附加的刚体
bounds 碰撞器在世界坐标空间的边界框
contactOffset 当他们的collider相差为多少距离的时候开始检测碰撞(触发器修改这个值无效)
enabled bool型,启用碰撞器将会碰撞其他碰撞器,禁用碰撞器就不会碰撞其他碰撞器
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 查询总是报告触发器命中

你可能感兴趣的:(Unity基础知识,unity3d)