问题标签 [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.
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 个单位)看起来非常接近,但我可以弄清楚如何检查它。
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
为。不用找了。0
stop
- 摆弄 Inspector 并做一些事情,比如在刚体上冻结位置或将玩家对象也设置为触发器,这些都没有任何效果。在游戏运行时(碰撞后)更改刚体组件上的任何内容都会使立方体立即停止。从字面上看,任何东西,甚至将其质量设置为 0。
- 我也尝试设置
velocity
为0,结果没有变化。这确实是有道理的,因为Update()
它被完全跳过了(顺便说一下,我也用 aDebug.Log()
进行了检查)。
所以在这一点上,我只写了 30 行代码,我仍然不知道是什么原因造成的。由于涉及的对象是静态触发对撞机和运动学刚体对撞机,两者都没有物理材料,因此一旦设置了标志,就不应该有任何东西可以让这个东西移动。但它确实移动。
SimpleController2D.cs
c# - 组件.GetComponent() 导致大量错误
我正在尝试使用 unity5 在线学习太空射击教程,但我遇到了刚体问题。
我意识到刚体已被替换为 Component.GetComponent() 但我想创建一个变量而不是全部输入。
我使用 Component.GetComponent() 收到大量错误,但不明白出了什么问题。
这是我的代码片段,我试图用夹子限制运动:
这是它给我的大量错误:
我觉得我错过了一些重要而明显的东西,因为这不是很多代码来保证这么多错误。
c# - 刚体不碰撞 - Unity Project Tango
我在 Unity3D 中创建了一个 RigidBody,并在其上附加了一个控制器脚本,该脚本将通过 Tango Motion Control 控制身体的运动。但问题是由于某种原因,我的刚体没有与我在侧面的墙壁发生碰撞。它只是通过它。
这是我的 Update() 代码片段
我通过 OnPoseAvailable 回调获取我的 TangoPose 数据
// 从 Project Tango 设置回调
我在这里错过了什么吗?为什么我的 RigidBody 会穿过墙壁?我已将此脚本附加到我的 Capsule 刚体。
非常感谢任何帮助或指示。
谢谢
unity3d - 速度是如何工作的?
嘿,伙计们,我在这里有一些事情要问一下,统一的速度到底是如何工作的???我最近一直在做一个项目,我想创建弹跳球游戏,所以每当球击中对撞机时,它会被弹跳取决于被击中的位置。
我正在使用 getComponent().velocity,但不知何故,球并没有很好地反弹,每当球击中对撞机的中间时,它应该在不改变方向的情况下反弹回来..请帮忙!!!任何帮助将不胜感激......这是我的代码:
unity3d - 如何在 Unity 中从使用 RigidBody.SleepVelocity 切换到 RigidBody.SleepThreshold
所以我正在处理一个用 Unity 4.x 编写的旧项目,并且必须通过一些物理变化使其在 5.x 中工作。
有几个对 RigidBody.SleepVelocity 的调用,根据 api 文档,现在不再支持。
替代品是 RigidBody.SleepThreshold。
我有点理解两者之间的区别,但我不知道如何从使用旧系统转换为使用新系统。
我如何从使用 SleepVelocity 转换为 Threshold?
(顺便说一句,我在 JS 中工作,但我可以阅读等效的 C#)
unity3d - 在统一 5.0.0p2 中向刚体添加物理的代码是什么?
以下代码在 Unity 5.0.0p2 中似乎是错误的:
所以我尝试了以下代码:
但它仍然无法正常工作。出现如下几条错误消息。
BCE0043: Unexpected token: ).
BCE0044: expecting ), found '.'.
UCE0001: ';' expected. Insert a semicolon at the end.
我的代码有什么问题?
c# - 如何使用 C# 在 8 个方向上加力交换“刚体”?
我是 C# 统一的初学者。add force
我正在寻找用in交换立方体的解决方案8 direction
,但我找不到任何东西。我真的很困惑,我该怎么做。有人请在这方面指导我。任何用于解决问题的代码示例或教程将不胜感激。
提前致谢。这是我的代码:
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 会按比例移动,而不管我将地面缩放到什么大小。
谢谢