快速移动的球与鼠标控制的球拍的碰撞检测问题

2024-04-27

在统一中,我有一个应该击球的球拍,并且球拍直接由鼠标控制,即鼠标使用鼠标轴移动球棒并使用 translate() 函数移动球拍。

我预计 Unity3d 的物理特性不会直接通过鼠标正确地转换球拍的运动并相应地影响球,我必须编写一些自定义的内容,结果证明是正确的。

但是当球拍移动时,无法正确检测到球的碰撞。当它静止时,一切都很好,球的表现也如我所愿。

现在我编写了一个自定义物理脚本(我使用 C# 进行脚本编写),其中我将 4 个长度为 0.6F 的光线投射附加到球上,并在进行一些复杂的矢量计算后,计算球击中球拍后的速度,并使用rigidbody.velocity =calculateVelocity()将其直接应用于球的速度。现在,当球拍不移动时,它又可以正常工作,但当我移动球拍时,它就不能正常工作了。问题的确切(症状)是:

使用内置物理和碰撞检测:当球拍移动时,球有时会直接穿过球拍,有时会减慢速度(达到令人难以置信的水平)。

使用我的脚本计算速度:问题是相同的,但它让我在打印对撞机(球拍)的法线时确定出了什么问题。它有时给出正确的法线,有时给出法线向量的负值,这意味着它直接穿过顶面并检测对撞机(球拍)底侧的撞击。

我尝试过的事情:

  1. 增加对撞机的大小(它与球拍上更宽的盒子对撞机一起使用,但显然球从距离球拍很远的地方移动,我自己的脚本在这里工作,默认物理在球拍移动时给出奇怪的结果) ,总之我没有得到我想要的现实。

  2. 将固定时间戳减少到 0.001,这显着改善了情况,但离我想要的结果仍然非常非常远,而且球再次经常选择球的错误一侧。

  3. 将碰撞检测更改为连续动态。这也没有改善事情。

除了碰撞时选择错误的一侧之外,我观察到的另一个问题是,球从球拍弹起后,球在移动,但球拍移动得更快,它不是沿着完整的弧线或直线移动,而是以某种方式出现在前面球,导致两次击球。这是基于可见事物的推测。

此外,很明显,Unity3d 的内置物理系统没有读取球拍的“运动”方面,导致当使用鼠标击球移动球拍时会出现奇怪的行为。

我被困住了,我不知道该从这里搬到哪里。请告诉我我做错了什么。


正如其他人指出的那样,问题在于球从一个帧中位于垫的一侧变成了下一帧中的另一侧。如果障碍物太薄,快速移动的物体往往会这样做。

对于这个问题有三个非常简单的解决方案:

  • 增加垫或球的尺寸,这就是更改对撞机尺寸时发生的情况。
  • 确定球的最大速度,使其永远无法移动得足够快以穿过垫子。
  • 提高 Unity 进行物理计算的频率。它可以改变在时间经理 http://unity3d.com/support/documentation/Components/class-TimeManager.html,减小固定时间步长的值。请注意不要减少太多,否则物理引擎将无法在下一轮开始之前完成调用,并且永远无法赶上游戏。

设置移动物体的最大速度是必须始终完成的事情。你不能冒险让一个重要的物体在游戏过程中飙升,而让一切都处于不受控制的状态。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

快速移动的球与鼠标控制的球拍的碰撞检测问题 的相关文章

随机推荐

  • 如何在 Windows 8.1 中的 anaconda(python3.6) 中构建 cython pyx 到 pyd?

    我参考了一些网站在 Windows 8 1 中将 pyx 构建为 pyd 我正在使用带有 Spyder IDE 的 Anaconda Distribution 我已经开发了 pyx 文件 但无法在 Anaconda 命令提示符 中构建 水蟒
  • 使用 tkinter + pyhook 时冻结。两个事件循环和多线程

    我正在用 python 2 7 编写一个工具 记录用户按下键盘或鼠标按钮的次数 点击次数将显示在屏幕左上角的一个小黑框中 即使另一个应用程序处于活动状态 该程序也会记录点击 除非我将鼠标移到框上 否则它工作正常 然后鼠标冻结几秒钟 然后程序
  • 我们如何使用 StringBuilder 在字符串前面添加字符串?

    我知道我们可以使用附加字符串StringBuilder 有没有一种方法可以使用前置字符串 即在字符串前面添加字符串 StringBuilder这样我们就可以保持性能优势StringBuilder offers 使用位置参数设置为 0 的 i
  • 将 Base64 字符串转换为 JPG

    我正在得到图像为 base64 字符串 dataurl 下面是我的函数 它将dataurl进入图像 现在 如果图像是 png 则 png 库将创建图像 而 jpg 库将引发错误 反之亦然 问题是当我上传 png 时效果很好 但是当我上传 j
  • 从 LINQ to SQL 升级到 EF 4.1 时,如何最大限度地减少性能损失?

    我最近将一个使用 LINQ to SQL 和 SQL Server CE 3 5 的应用程序更新为 Entity Framework 4 1 Code First 和 SQL Server CE 4 0 现在它的运行速度明显变慢 我在之前和
  • 如何在 spring 中将模型作为重定向属性传递

    redirectModel addAttribute Model model return REDIRECT PREFIX my company organization management manage users 当我通过这个时 我得
  • 带权重的欧几里得距离

    我目前正在使用SciPy计算欧氏距离 dis scipy spatial distance euclidean A B 在哪里 A B是5维位向量 现在工作正常 但是如果我为每个维度添加权重 是否仍然可以使用 scipy 我现在拥有的 sq
  • Django i18n 和 python 语言环境(和日期)

    我一直在使用 Django 的 i18n 系统 它似乎大部分工作正常 然而 模型代码中的日期似乎引起了问题 我使用 datetime strftime 填充一些 CHOICES 元组 然后在表单中使用它们 据我了解 django 会将语言环
  • 如何在navigationStart路由器事件中暂停路线更改

    在我的应用程序中 我有从包 节点模块 公开的路由 因此 我无法将 canActivate 或 canDeactivate 用于节点模块内定义的路由 因此 我开始订阅应用程序组件中的所有路线更改 并根据条件将用户重定向到不同的路线 由于条件有
  • PEX协议(磁力链接)如何找到它的第一个IP?

    我试图了解磁力链接如何工作 因为我读过他们使用 DHT 和 PEX 来获取对等点 但如果我是网络中的新节点 如何才能找到仅具有哈希值的对等点文件 它不是总是需要一个到已知主机的链接吗 Thanks Bittorrent DHT 可以通过多种
  • 如何阻止 Apache CXF 发送响应消息?

    如果给定的 SOAP 标头元素具有给定值 例如 如果标头标记 response 的值为 0 我根本不希望 Apache CXF 返回响应 我怎样才能做到这一点 CXF 似乎假设所有呼叫都会收到响应 我知道这在 Web 服务上下文中看起来很奇
  • 如何在生产环境中运行 spring boot 可执行 jar?

    Spring Boot 的首选部署方法是通过内部包含 tomcat 的可执行 jar 文件 它是从一个简单的开始java jar myapp jar 现在 我想将该 jar 部署到 EC2 上的 Linux 服务器上 我是否遗漏了某些内容
  • 如何在 Bullet 物理引擎中对物体应用旋转?

    我有旋转值 滚动 俯仰 偏航 我想将这种旋转应用于身体 但我不知道该怎么做 最直接的方法是通过运动状态或直接设置来直接设置刚体的世界变换 要获得横滚 俯仰和偏航的变换 您可以使用 btRigidBody rigidBody btTransf
  • 检查变量是否为 double 数据类型

    我需要检查我拥有的变量是否属于该数据类型double 这是我尝试过的 try double price Convert ToDouble txtPrice Text catch FormatException MessageBox Show
  • cs0030:无法生成临时类

    我有一个 Web 服务 当我尝试生成它的对象时 出现以下错误 无法生成临时类 结果 1 错误 CS0030 无法将类型 ShortSell ShortSellRQOriginDestinationInformationFlightSegme
  • 消息通知产生“此内容无法显示”

    我正在通过网络挂钩向 Slack 发送消息 使用单个 文本 JSON 元素的消息通知可通过适用于 OS X 和 iOS 的 Slack 应用程序生成正确的通知文本 频道中的消息文本也是正确的 但是 当使用新的 阻止 方法时 通知文本变为 无
  • 发布时错误元数据文件dll无法找到CSC

    我有一个 Visual Studio 解决方案 其中包含多个项目 特别是 DotNet5 asp net 应用程序 其中有多个 netstandard 2 0 引用 它在调试器中构建并运行良好 但不断抛出元数据错误 它不断特别引用在 net
  • 谷歌分析 SDK iOS10

    我已经从 cocoa pod 版本 3 14 安装了 Google Analytics id
  • 如何在Spring boot中使用注释来使用参数解析器?

    我想用argument resolvers在 Spring 启动中 我该怎么办 它是在 XML 中完成的 如下所示
  • 快速移动的球与鼠标控制的球拍的碰撞检测问题

    在统一中 我有一个应该击球的球拍 并且球拍直接由鼠标控制 即鼠标使用鼠标轴移动球棒并使用 translate 函数移动球拍 我预计 Unity3d 的物理特性不会直接通过鼠标正确地转换球拍的运动并相应地影响球 我必须编写一些自定义的内容 结