【问题标题】:How to make a perfect cube如何制作一个完美的立方体
【发布时间】:2019-05-27 22:56:57
【问题描述】:

在 Unity 中,我创建了一个比例为 1、1、1 的立方体。位置是 0,1,0。 然后我把它放在一个 15,1,5000 的平面上方。位置是 0,0,0。 我检查了立方体在 Y 轴上是否低于 1,这对我来说意味着立方体落在平面上。我可以通过向左或向右来控制这个立方体。如果我向左走,就没有问题。如果我向右走,我的位置变成 0.9999998~。即使立方体仍在飞机上,这也使我对坠落的检查成为现实。不知何故,立方体似乎不是一个完美的立方体。希望有人能告诉我为什么会这样。谢谢!

【问题讨论】:

  • 您为什么要手动检查“跌倒”?使用对撞机和刚体,Unity 是一个游戏引擎并为您处理,不要尝试实现已经存在的东西。
  • 实际上我可以将“低于 1”的检查替换为“低于 0”。但我的观点是,为什么立方体看起来不是完美的 1x1x1。如果我向左走,不知何故它就像 1x1x0.9999998。我只是想明白这一点。
  • 我只想补充一点,如果我按左键,我会尝试检查这些值。这些值在 1.0000066-1.0000096 之间变化。如果我按右,值会在 0.9999968-0.9999997 之间变化。

标签: c# unity3d


【解决方案1】:

这可能不是您想要的答案,但是——用糟糕的话来说——计算机的算术是有限的(搜索floating point arithmetic)。因此,您正在寻找的“完美立方体”不存在于机器可以执行的有限表示中。 此外,Unity 有自己的物理引擎(与所有物理引擎一样)在每次操作(平移、旋转、缩放)期间近似真实世界的微积分。

解决此问题的唯一方法是不使用精确值 (0, 1) 而是使用范围进行比较。 要在场景的坐标系中保持“顺序”,您还可以 - 以固定的间隔 - “调整”您的值,例如,如果坐标值介于 0.95 和 1.05 之间,则手动将坐标值设置为 1(使用当然,你的世界坐标系)。

相关说明:在您的评论中,您说“但我的意思是,为什么立方体看起来不是完美的 1x1x1。不知何故,它就像 1x1x0.9999998”。事实上,像 Unity 这样的 VR 系统不会在内存中维护对象的大小,而是维护它们的顶点坐标。您会感觉对象的尺寸因平移而发生了变化,但严格来说并非如此:这只是顶点 X、Y、Z 值的有限近似。

【讨论】:

    猜你喜欢
    • 2010-12-05
    • 2021-10-12
    • 2017-07-29
    • 1970-01-01
    • 2020-09-16
    • 1970-01-01
    • 2014-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多