# 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);