# Collision

# 说明

Collision命名空间提供了碰撞检测相关的功能,用于判断技能、射线等与游戏中的物体之间的碰撞关系。

# 如何使用

// 检查从起点到终点的路径上是否有碰撞
bool hasCollision = Collision::HasCollision(startPos, endPos);

// 获取从起点到终点路径上的第一个碰撞点
Vector3 collisionPoint = Collision::GetFirstCollision(startPos, endPos);

// 设置碰撞检测忽略特定单位
Collision::IgnoreUnit(myHero);

# HasCollision

bool HasCollision(Vector3 const& start, Vector3 const& end, CollisionFlags flags = CollisionFlags::All)

检查从起点到终点的路径上是否有碰撞。

参数名字 参数类型 描述
start Vector3 const& 路径起点坐标
end Vector3 const& 路径终点坐标
flags CollisionFlags 碰撞检测标志,默认检测所有类型
Vector3 startPos = myHero.GetPosition();
Vector3 endPos = targetUnit.GetPosition();

// 检查是否与任何物体碰撞
bool hasAnyCollision = Collision::HasCollision(startPos, endPos);

// 只检查与小兵的碰撞
bool hasMinionsCollision = Collision::HasCollision(startPos, endPos, CollisionFlags::Minions);

// 检查与小兵或英雄的碰撞
bool hasCollision = Collision::HasCollision(startPos, endPos, CollisionFlags::Minions | CollisionFlags::Heroes);

# GetFirstCollision

Vector3 GetFirstCollision(Vector3 const& start, Vector3 const& end, CollisionFlags flags = CollisionFlags::All)

获取从起点到终点路径上的第一个碰撞点坐标。

参数名字 参数类型 描述
start Vector3 const& 路径起点坐标
end Vector3 const& 路径终点坐标
flags CollisionFlags 碰撞检测标志,默认检测所有类型
Vector3 startPos = myHero.GetPosition();
Vector3 endPos = startPos + Vector3(1000.0f, 0, 0);

// 获取第一个碰撞点
Vector3 collisionPoint = Collision::GetFirstCollision(startPos, endPos);

// 只检测与墙体的第一个碰撞点
Vector3 wallCollisionPoint = Collision::GetFirstCollision(startPos, endPos, CollisionFlags::Walls);

# IgnoreUnit

void IgnoreUnit(Unit* unit, bool ignore = true)

设置是否在碰撞检测中忽略特定单位。

参数名字 参数类型 描述
unit Unit* 要设置的单位指针
ignore bool 是否忽略,true表示忽略,false表示不忽略,默认为true
// 忽略自身英雄的碰撞
Collision::IgnoreUnit(myHero);

// 恢复检测自身英雄的碰撞
Collision::IgnoreUnit(myHero, false);

# GetCollisionUnits

std::vector<Unit*> GetCollisionUnits(Vector3 const& start, Vector3 const& end, float radius, CollisionFlags flags = CollisionFlags::All)

获取从起点到终点路径上与指定半径碰撞的所有单位。

参数名字 参数类型 描述
start Vector3 const& 路径起点坐标
end Vector3 const& 路径终点坐标
radius float 碰撞检测的半径
flags CollisionFlags 碰撞检测标志,默认检测所有类型
Vector3 startPos = myHero.GetPosition();
Vector3 endPos = targetPos;
float skillRadius = 100.0f;

// 获取技能路径上所有碰撞的单位
std::vector<Unit*> collisionUnits = Collision::GetCollisionUnits(startPos, endPos, skillRadius);

// 只获取与英雄碰撞的单位
std::vector<Unit*> heroCollisions = Collision::GetCollisionUnits(startPos, endPos, skillRadius, CollisionFlags::Heroes);