AC.CollisionDetectorController

碰撞检测器(AgentComponent_VLabCollisionDetectorController)

1、初始化

int Init(string path, float length, float deep, float height, float targetRadius, float targetHeight)

简要说明(方法一)

组件初始化,path的路径为空时,表示根节点。传入的路径所在节点为检测点。检测点为中心的【length * deep * height】范围内是检测范围。检测点为中心、半径为targetRadius、高度为targetHeight的圆柱范围为碰撞检测区域。

【注意】检测范围一定要大于碰撞检测区域,只有在检测范围内的物体,才会检测碰撞

参数

参数名 类型 说明
path string 路径
length float 检测范围长度
deep float 检测范围深度
height float 检测范围高度
targetRadius float 碰撞区域半径
targetHeight float 碰撞区域高度

返回值

类型 说明
int id

int Init(string path)

简要说明(方法二)

路径为rigidbody组件路径,接触物体与被接触物体的MeshCollider的Convex必须勾上。ps:3D下,需忽略爬升

参数

参数名 类型 说明
path string 路径

int Init(string path, float radius)

简要说明(方法三)

路径为MeshCollider路径。ps:3D下,需忽略爬升

参数

参数名 类型 说明
path string 路径
radius float 顶点接触检测范围

返回值

类型 说明
int id

int Init(string path, float length, float deep, float height, float targetRadius)

简要说明(方法四)

组件初始化,path的路径为空时,表示根节点。传入的路径所在节点为检测点。检测点为中心的【length * deep * height】范围内是检测范围。检测点为中心、半径为targetRadius球形范围为碰撞检测区域。

【注意】检测范围一定要大于碰撞检测区域,只有在检测范围内的物体,才会检测碰撞

参数

参数名 类型 说明
path string 路径
length float 检测范围长度
deep float 检测范围深度
height float 检测范围高度
targetRadius float 碰撞区域半径

返回值

类型 说明
int id

2、void SetActive(int id, bool b)

简要说明

是否进行碰撞检测。初始化完成,默认为未激活状态。建议只在业务需要时开启,不需要时关闭。

参数

参数名 类型 说明
id int 实例id
b bool 是否开启

3、发生碰撞的回调

void OnTouchSomething(int id, LuaFunction callBack, int mode = 0)

简要说明

发生碰撞时调用callBack

参数

参数名 类型 说明
id int 实例id
callBack LuaFunction 回调
isUseCollider bool 使用第二种方法初始化时设置为true
callback
  • mode = 0

仅适用于方法一、方法四

参数名 类型 说明
id int 元器件ID
  • mode = 1

仅适用于方法三

参数名 类型 说明
id int 元器件ID
position Vector3 位置
index int index相同表示在同一帧中,同时接触的点
  • mode = 2

仅适用于方法二

参数名 类型 说明
id int 元器件ID
position Vector3 位置
normal Vector3 方向

4、调试(仅适用于方法一、方法四)

void DebugMode(int id)

简要说明

设置检测区域时,可调用该函数,查看区域范围。【该函数非必须调用,仅用于调试

参数

参数名 类型 说明
id int 实例id

Example

如下图:白色方框为检测范围,灰色的圆柱为碰撞范围

5、Example

function YuanBanElementAgent:Init(paramsTable)
    --初始化
    self.CollisionDetectorControllerId = self.VLabCollisionDetectorController:Init(self.ModelPath.YueShuSpace, self.nArea * 2, self.nArea * 2, self.nArea * 2, 0.08, 0.01)
    --开启调试
self.VLabCollisionDetectorController:DebugMode(self.CollisionDetectorControllerId)
    --碰撞回调
self.VLabCollisionDetectorController:OnTouchSomething(self.CollisionDetectorControllerId, self.ValueChangeEvent)
end

function YuanBanElementAgent:OnUpdate(time)
    if Input.GetKeyDown("q") then
        --组件激活
        self.VLabCollisionDetectorController:SetActive(self.CollisionDetectorControllerId, true)
    end

    if Input.GetKeyDown("w") then
        --组件失活
        self.VLabCollisionDetectorController:SetActive(self.CollisionDetectorControllerId, false)
    end
end

-- 回调函数
function YuanBanElementAgent:ValueChangeEvent()
    print("Collision")
    self.VLabCollisionDetectorController:SetActive(self.CollisionDetectorControllerId, false)
end