文章目录

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


组件介绍

1.盒碰撞器(Box Collider)

unity中常用C unity中常用的组件类型_触发器


1.Edit Colloder:手动编辑Collider

2.Is Trigger:是否为触发器

3.Material:材质

4.Center:碰撞器的中心点,相对于物体的自身坐标

5.Size:碰撞器的大小

2.椭圆碰撞器(Sphere Collider)

unity中常用C unity中常用的组件类型_unity3d_02


1.Edit Colloder:手动编辑Collider

2.Is Trigger:是否为触发器

3.Material:材质

4.Center:碰撞器的中心点,相对于物体的自身坐标

5.Radius:碰撞器的半径大小

3.胶囊碰撞器(Capsule Collider)

unity中常用C unity中常用的组件类型_触发器_03


1.Edit Colloder:手动编辑Collider

2.Is Trigger:是否为触发器

3.Material:材质

4.Center:碰撞器的中心点,相对于物体的自身坐标

5.Radius:碰撞器的半径大小

6.Height:圆柱体高度

7.Direction:方向

4.网格碰撞器(Mesh Collider)

unity中常用C unity中常用的组件类型_触发器_04


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

查询总是报告触发器命中