[英]Why isn't my 3D collision detection working?
我的世界中有几个对象,有三种主要类型。 第一个是自我,它是玩家,玩家不会移动,但会旋转。 第二个是子弹,它们从直线上飞离用户。 第三个是目标,它们只是坐在某个地方等待被击中。
这是我用来进行冲突检测的代码,它不起作用:
foreach (GameObject go in bullets) {
float goRadius = go.Model.Meshes.Sum((x) => x.BoundingSphere.Radius) * go.Scale;
EnemyObject last = null;
Vector3 goRealPos = Vector3.Transform(go.Position, Matrix.CreateScale(go.Scale) * Matrix.CreateTranslation(go.Position) * Matrix.CreateRotationY(go.Rotation.Y));
foreach (EnemyObject eo in targets) {
float eoRadius = eo.Model.Meshes.Sum((x) => x.BoundingSphere.Radius) *eo.Scale;
if (Vector3.Distance(eo.Position, goRealPos) < eoRadius + goRadius) {
//collision has occured
if (!eo.TakeHit()) {
last = eo;
}
//remove bullet
toBeRemoved.Add(go);
break;
}
}
if (last != null) {
targets.Remove(last);
}
if (go.Position.Z > 2000 || go.Position.Z < -2000) {
toBeRemoved.Add(go);
}
}
谁能告诉我为什么它不起作用?
请注意,如果子弹移动太快,它们可能会扫过您的目标而不会击中它们。 对光线使用扫描安全命中测试技术。
您是否检查过goRealPos的计算是否获得了您期望的坐标? 为什么要从go转换goRealPos,但不对eo做类似的事情? 可能是您正在测试不在同一坐标系上的对象之间的碰撞。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.