问题标签 [rigid-bodies]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
155 浏览

unity3d - Unity - 从单轴行进到绕圆旋转时的匹配速度

我正在做一个简单的项目,该项目由一个带有刚体的球沿 x 轴推动。球需要转过 90 度并继续直线上升。

我创建了一个框作为枢轴/旋转点,并将其放置在 90 度过渡起点上方 5 个单位处,距离过渡结束处正好 5 个单位。我创建了两个用作触发器的对撞机;一个在开始,一个在 90 度过渡的最后。

所以我的球会在 x 轴上缩放并击中第一个触发器。当它发生时,我将球的速度重置为零并将球作为轴心/旋转点的盒子。然后我对盒子应用了角速度,这样球将围绕枢轴点旋转 5 个单位。当球在过渡结束时击中第二个对撞机时,它是非父级的,并且重新应用速度,因此球可以继续笔直向上。

所以这就是问题所在;如果球距离枢轴点 5 个单位,则 90 度过渡所经过的距离将类似于:5 * 2 = 圆直径 * PI = 31.4 个单位绕圆的距离 / 4 = 7.84 个游戏单位整个 90 度的过渡。

那么如何匹配球仅在 x 轴上移动时的速度,以便在使用枢轴点刚体的 moveRotation 函数围绕圆轴进行过渡时具有相同的速度?

如果当我击中第一个触发器时我的速度矢量为 (-10, 0, 0) 我如何计算将什么输入到 moveRotation 函数中,以便离枢轴点旋转 5 个单位的球仍在移动每秒10个单位?

取原始速度 (-10, 0, 0) 并乘以 90 度过渡所需的行进距离(7.85 个单位)看起来非常接近,但我可以弄清楚如何检查它。

0 投票
1 回答
3565 浏览

c# - 运动学刚体自行移动

我的 2D Unity 游戏中有一个非常奇怪的问题,我能够将其简化为以下核心问题/最小的重现测试用例。请按照以下步骤重现(Unity 5.1.1f1):

  • 在 location 创建一个玩家对象(Cube)(0,0,0)
  • 移除BoxCollider组件。
  • 附加以下C#脚本,Unity 将自动添加所需的组件,从而使其成为刚体对撞机。
  • 设置isKinematic标志。
  • 在 location 处将另一个 Cube 添加到场景中(2,0,0)
  • 移除BoxCollider组件并添加一个BoxCollider2D. 这使得这个立方体成为一个静态碰撞器。
  • 设置isTrigger标志。
  • 运行场景。

预期行为:
玩家立方体向另一个立方体加速,一旦碰到它就停止移动。

观察到
的行为:玩家立方体向另一个立方体加速,然后继续以恒定速度移动。

附加实现细节:
我最初通过平移所有对象的变换来移动所有对象,并且根本没有使用刚体,因为我不需要碰撞检测。现在我这样做了,所以我想要刚体。我深入研究了在线资源,发现我应该使用rigidbody.MovePosition()而不是transform.Translate()or transform.position。我更改了脚本,出现了上述错误。
回去transform.position解决问题,但这不是一个好的解决方案,因为它涉及不良做法,根据我的阅读,会产生大量的 CPU 负载。

尝试解决失败:

  • 切换到Update()Time.deltaTime没有任何区别。
  • 我尝试不返回,Update()而是简单地将设置重置timestep为。不用找了。0stop
  • 摆弄 Inspector 并做一些事情,比如在刚体上冻结位置或将玩家对象也设置为触发器,这些都没有任何效果。在游戏运行时(碰撞后)更改刚体组件上的任何内容都会使立方体立即停止。从字面上看,任何东西,甚至将其质量设置为 0。
  • 我也尝试设置velocity为0,结果没有变化。这确实是有道理的,因为Update()它被完全跳过了(顺便说一下,我也用 aDebug.Log()进行了检查)。

所以在这一点上,我只写了 30 行代码,我仍然不知道是什么原因造成的。由于涉及的对象是静态触发对撞机和运动学刚体对撞机,两者都没有物理材料,因此一旦设置了标志,就不应该有任何东西可以让这个东西移动。但它确实移动。


SimpleController2D.cs

0 投票
1 回答
3094 浏览

c# - 组件.GetComponent() 导致大量错误

我正在尝试使用 unity5 在线学习太空射击教程,但我遇到了刚体问题。

我意识到刚体已被替换为 Component.GetComponent() 但我想创建一个变量而不是全部输入。

我使用 Component.GetComponent() 收到大量错误,但不明白出了什么问题。

这是我的代码片段,我试图用夹子限制运动:

这是它给我的大量错误:

我觉得我错过了一些重要而明显的东西,因为这不是很多代码来保证这么多错误。

0 投票
1 回答
730 浏览

c# - 刚体不碰撞 - Unity Project Tango

我在 Unity3D 中创建了一个 RigidBody,并在其上附加了一个控制器脚本,该脚本将通过 Tango Motion Control 控制身体的运动。但问题是由于某种原因,我的刚体没有与我在侧面的墙壁发生碰撞。它只是通过它。

这是我的 Update() 代码片段

我通过 OnPoseAvailable 回调获取我的 TangoPose 数据

// 从 Project Tango 设置回调

我在这里错过了什么吗?为什么我的 RigidBody 会穿过墙壁?我已将此脚本附加到我的 Capsule 刚体。

非常感谢任何帮助或指示。

谢谢

0 投票
1 回答
151 浏览

unity3d - 速度是如何工作的?

嘿,伙计们,我在这里有一些事情要问一下,统一的速度到底是如何工作的???我最近一直在做一个项目,我想创建弹跳球游戏,所以每当球击中对撞机时,它会被弹跳取决于被击中的位置。

我正在使用 getComponent().velocity,但不知何故,球并没有很好地反弹,每当球击中对撞机的中间时,它应该在不改变方向的情况下反弹回来..请帮忙!!!任何帮助将不胜感激......这是我的代码:

0 投票
4 回答
546 浏览

unity3d - 立方体穿过刚体

在统一 5.1.1f1 中,我有一个由脚本移动的立方体。每当刚体接触到它时,它就会将刚体移出它的路径。

然而在某些情况下,刚体在立方体的路径中,立方体穿过刚体。

例如,在图片中,红色是可移动的立方体,灰色是刚体 -在此处输入图像描述

如您所见,红色立方体可以移动到灰色刚体中。

来源在这里

我也在这里问了这个问题

立方体随着脚本移动——

0 投票
1 回答
875 浏览

unity3d - 如何在 Unity 中从使用 RigidBody.SleepVelocity 切换到 RigidBody.SleepThreshold

所以我正在处理一个用 Unity 4.x 编写的旧项目,并且必须通过一些物理变化使其在 5.x 中工作。

有几个对 RigidBody.SleepVelocity 的调用,根据 api 文档,现在不再支持。

替代品是 RigidBody.SleepThreshold。

我有点理解两者之间的区别,但我不知道如何从使用旧系统转换为使用新系统。

我如何从使用 SleepVelocity 转换为 Threshold?

(顺便说一句,我在 JS 中工作,但我可以阅读等效的 C#)

0 投票
2 回答
1142 浏览

unity3d - 在统一 5.0.0p2 中向刚体添加物理的代码是什么?

以下代码在 Unity 5.0.0p2 中似乎是错误的:

所以我尝试了以下代码:

但它仍然无法正常工作。出现如下几条错误消息。

  • BCE0043: Unexpected token: ).
  • BCE0044: expecting ), found '.'.
  • UCE0001: ';' expected. Insert a semicolon at the end.

我的代码有什么问题?

0 投票
1 回答
397 浏览

c# - 如何使用 C# 在 8 个方向上加力交换“刚体”?

我是 C# 统一的初学者。add force我正在寻找用in交换立方体的解决方案8 direction,但我找不到任何东西。我真的很困惑,我该怎么做。有人请在这方面指导我。任何用于解决问题的代码示例或教程将不胜感激。

提前致谢。这是我的代码:

0 投票
1 回答
116 浏览

c# - PoseController 脚本中的 MovementScale

我正在玩以下 CodeLab - https://io2015codelabs.appspot.com/codelabs/project-tango#5并试图将 Tango Pose 控制应用于我的播放器刚体(PoseController.cs)。虽然我不明白为什么我们必须将'new_position'与'm_movementScale'相乘?此外,当我将 motionScale = 1.0f 设置为时,我的 playerRigidBody 根本不会移动。

有人可以解释一下我的玩家运动和运动规模的相关性吗?什么是运动比例和速度的理想值,这样我的 PlayerRigidBody 会按比例移动,而不管我将地面缩放到什么大小。

谢谢