Tag: 碰撞检测

碰撞后正确附加到GameObject?

如何在碰撞后正确地将GameObject附加(或“粘贴”)到另一个GameObject? 问题:我希望GameObject在碰撞后附加,即使它正在改变比例。 “附上碰撞”代码: protected Transform stuckTo = null; protected Vector3 offset = Vector3.zero; public void LateUpdate() { if (stuckTo != null) transform.position = stuckTo.position – offset; } void OnCollisionEnter(Collision col) { rb = GetComponent(); rb.isKinematic = true; if(stuckTo == null || stuckTo != col.gameObject.transform) offset = col.gameObject.transform.position – transform.position; stuckTo = col.gameObject.transform; } 此代码使GameObject在碰撞后完美连接。 但是当GameObject改变比例(当它附着时)时,它在视觉上不再看起来与它碰撞的任何东西相关联。 […]

RigidBody2D冻结X位置

我想知道是否有一种方法可以使用Unity的RigidBody2D模拟以下代码行,而不是使用普通的RigidBody。 rigidbody.constraints = RigidbodyConstraints.FreezePositionX; 我希望我的球员x位置在碰到某些东西时冻结。 虽然我可以使用上述内容,但我需要将所有2D碰撞重新设计为3D碰撞。 我宁愿避免的痛苦。

Unity 2d游戏中奇怪的碰撞错误

Github Repository(Scripts文件夹,包含.cs文件中的所有代码) 我在团结中有这个奇怪的碰撞错误,这里是它的一个gif: 重新创建:例如,在gif中,我按下向左箭头和向上箭头,直到速度标准化,然后我得到一些为什么卡在一个块中。 当我在XNA中进行游戏时,我之前已经使用了自己的碰撞算法,希望在Unity中不会发生这种情况。 这是播放器脚本PlayerMovement : using UnityEngine; using UnityEngine.UI; namespace Assets.Scripts { public enum Directions { Back, Left, Front, Right, Idle = -1 } public class PlayerMovement : MonoBehaviour { #region Public Members /// /// Maximum speed of the player (Accelerated to over a period of time) /// public float speed; /// /// […]

C#简单3D碰撞检测

我正在尝试开发一个简单的3D环境(在openTK中,基本上是openGL)并实现简单的碰撞检测。 我将拥有一个相机对象,它将有一个边界立方体和一个充满三角形和四边形的世界。 如果我给了一个边界立方体(或者如果更容易的边界球)和一个多边形列表,是否有一种快速而肮脏的方法来进行基本的碰撞检测? 谢谢你的帮助

三角形 – 三角交点测试

我想知道是否有一些教程或指南来理解和实现3D环境中的三角形 – 三角形交叉测试。 (我不需要知道交叉点发生的确切位置,但只知道交叉点已经发生) 我打算按照理论的pdf来实现它,但我很沮丧 三角形的计算平面方程2。 如果三角形1的所有点都在同一侧,则拒绝为微不足道。 三角形的计算平面方程1。 如果三角形2的所有点都在同一侧,则拒绝为微不足道。 计算交叉线和项目到最大轴。 计算每个三角形的间隔。 相交间隔。 本指南的第5点。 我真的不知道在问什么(所有5,6和7)。 XD 因为我没有很高的数学知识(好吧,我知道大学的几门考试给了我(我是一名原始程序员XD)),请尽量让我尽可能简单。 :D(我试图在谷歌搜索,但大多数链接指向大约4-5页的公式,我真的不知道,我不明白。) 谢谢您的帮助

XNA – Pong Clone – 当它击中墙壁时reflection球?

我正在尝试在创建2D Pong Clone时让球从我的UI的顶部和底部“Walls”反弹。 这是我的Game.cs public void CheckBallPosition() { if (ball.Position.Y == 0 || ball.Position.Y >= graphics.PreferredBackBufferHeight) ball.Move(true); else ball.Move(false); if (ball.Position.X = graphics.PreferredBackBufferWidth) ball.Reset(); } 目前我在Ball.cs中使用它 public void Move(bool IsCollidingWithWall) { if (IsCollidingWithWall) { Vector2 normal = new Vector2(0, 1); Direction = Vector2.Reflect(Direction,normal); this.Position += Direction; Console.WriteLine(“WALL COLLISION”); } else this.Position += Direction; } 它工作,但我使用手动键入正常,我想知道如何计算屏幕顶部和底部的法线?

如何确定矩形的哪一边与圆碰撞

在你指出这个问题还有其他答案之前,我已经查看了这个问题或类似问题的大多数其他答案,但我还没有找到我需要的解决方案。 基本上我想要做的就是当圆/球与矩形碰撞时,我想确定这个碰撞发生在矩形的哪一侧。 我想找到这个,以便我可以强制执行更逼真的物理,例如,如果球击中矩形的顶部,只反过来它的Y速度……而不是两者。 我已经尝试比较球和矩形的X和Y位置,甚至是它们两个边界框的位置……测试即使球的底部与矩形顶部相交……使用’if ball .boundingBox.Bottom> = rectangle.boundingBox.Top’。 我已经附上了一张照片,以显示我想要实现的目标…以防它有点混乱,因为它不详细……如果球从一侧进来,那么看起来像v的红色是路径,我希望撞击时的运动以相反的方式行进,但这取决于矩形的一侧,关于球的速度的哪个部分我将不得不改变…… 仅供参考我也看过矢量标准化…我之前没有使用过它原谅我如果可以用这个来解决… 感谢v.much阅读 编辑,因为我匆忙,我使用了不同的图像……这仍然显示了我想要实现的行为,因为图上显示的物理是我希望球在与另一个碰撞时表现的行为双方……链接到图片: http : //codeincomplete.com/posts/2011/6/12/collision_detection_in_breakout/bounce2.v283.png

C#中的每像素碰撞问题

我正在用C#编写一个小的2d游戏引擎用于我自己的目的,除了sprite碰撞检测之外它工作得很好。 我决定让它成为每像素检测(对我来说最容易实现),但它没有像预期的那样工作。 代码在发生之前很久就会检测到它。 我已经检查了检测的每个组件,但我找不到问题。 碰撞检测方法: public static bool CheckForCollision(Sprite s1, Sprite s2, bool perpixel) { if(!perpixel) { return s1.CollisionBox.IntersectsWith(s2.CollisionBox); } else { Rectangle rect; Image img1 = GraphicsHandler.ResizeImage(GraphicsHandler.RotateImagePoint(s1.Image, s1.Position, s1.Origin, s1.Rotation, out rect), s1.Scale); int posx1 = rect.X; int posy1 = rect.Y; Image img2 = GraphicsHandler.ResizeImage(GraphicsHandler.RotateImagePoint(s2.Image, s2.Position, s2.Origin, s2.Rotation, out rect), s2.Scale); int posx2 = […]

XNA中基于平铺的冲突

我在XNA游戏中绘制了瓷砖并加载了我的角色。 然而,我的角色不会移动 – 地图会移动 – 这会给它带来运动的幻觉。 现在我想知道如何实际测试他们的碰撞。 我的意思是,碰撞代码在哪里,我如何使所有瓷砖代表“一件大事”?

碰撞检测实施

我有一个碰撞检测类,它通过查找中心之间的距离以及该距离是否足够小而成为碰撞(参见碰撞检测错误 )。 我的问题是试图使这个实际工作,椭圆碰撞。 如有必要,我会解释更多。 谢谢