问题标签 [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.
physics - 如何找到2个碰撞刚体的速度?
所以我跳进了一个物理引擎。现在的对撞机是球体和平面。我发现碰撞的深度和接触点的法线很容易,但在我的一生中,我无法理解能量的分布。
身体包含一个对撞机、一个质量、一个力矢量(速度 * 质量)、一个弹性值(0 没有反弹,1 个完全反弹)和一个摩擦值(0 滑香肠,1 动量吸血鬼)我用谷歌搜索到了地狱和回来后,一切都出现了 1D 和 2D 简化,但我根本无法将它们适应 3D。
编辑:我尝试关注此页面: http ://www.plasmaphysics.org.uk/collision3d.htm 。它看起来很简单,但由于某种原因,我仍然没有弹性为 1 的反弹。
我的实现如下:
对于弹性,我尝试将两个物体的弹性相乘并取它们的平均值;没变。
unity3d - 宇宙飞船的玩家
我想在 Unity3d 引擎上实现太空游戏。虚空中有一些巨大的宇宙飞船。所以,我希望玩家在失重的情况下在太空中飞行,但是当他们进入任何飞船时,他们都会受到飞船局部重力场的影响(如果它处于On
状态)。
我将使用addForce()
适用于rigidbodies
飞船地板的玩家的功能来做到这一点。但是通过这种方法,玩家只会被放大到一层,而不是自动站起来。
我怎样才能以最好的方式让他们站起来?
或者,也许有人知道解决这个自定义重力场问题的完全不同的方法?
PS:这将是一个多人游戏,其中有许多不同方向的飞船,其中有很多玩家。每艘船都有自己的重力场。
math - 如何使用动能在刚体动力学模拟中找到位置
我正在尝试为我的模拟实现刚体动力学。我正在尝试模拟所附论文中的张拉整体。
我遵循的论文是:基于 3-bar 张拉整体的移动机器人的动态运动方程
根据这篇论文和我到目前为止所读到的内容,一般过程是:
对于每个酒吧:
- A)定义杆的姿势(q):为此我需要一个位置向量和一个方向向量。我有这个,因为这是我的初始职位。
- B)应用初始速度:这是0
- C) 寻找动能
- D) 寻找势能
- E) 查找扭矩
对于整个系统:
- A)找到动能
- B) 寻找势能
- C) 查找扭矩
我的问题是如何根据动能、势能和扭矩找到每个杆的新姿势(位置和方向) ?
据我了解,我将需要线加速度和角加速度,然后是线速度和角速度,最后更新姿势(位置和方向)。我不明白我怎么能这样做。
我看了那些书,读了一些笔记,但实际上我不明白如何做到这一点
- Roy Featherstone 的刚体动力学算法
- 游戏开发者物理学,David M.Bourg
- 基于物理的建模,大卫巴拉夫
如果可能的话,额外说明:
1)基本上W
需要角度的矩阵是φ, θ,
整个结构的基本参考系的角度吗?不是每个条的角度,因为这不是,我认为它适用于整个系统?
2)关于移动参考系的惯性矩阵,我理解这必须参考每个条吗?但是既然是针对整个系统的,那么矩阵应该是什么 ?
3)如何分解M(q)
4)在论文中,它在电缆中进行了描述。我想尝试别的东西,在中心连接在一起的杆,每个杆只能轴向移动。所以我想我必须为每个条添加一个力并影响它?
如果您有任何信息,可以告诉我吗?
c# - 将玩家推离敌人
我已经为我正在尝试制作的游戏制作了自己的控制器,但我遇到了一些问题。每当敌人接近我而我没有及时阻止我的角色时,他就会瞬移到敌人的头顶。
推开:
移动:
我决定添加一个功能,如果玩家离敌人太近,则将其推开,但我无法让它正常工作。现在它会将玩家推向敌人的前方,因此当你从前方接近敌人时它可以正常工作,在其他情况下,我的玩家只是传送到敌人面前。我想把玩家推向他来的方向,但我真的想不出任何办法。谁能帮我解决这个问题?
c# - Unity2D:当我添加对撞机时,Rigidbody2D.AddForce 将不起作用
在 Unity 中,我有一个播放器,您可以按 A 和 D 左右移动,按空格键跳跃(我也在尝试添加触摸控制)。当我将 collider2d 添加到我的 Player 对象时,该对象将不允许我使用 Rigidbody2D.AddForce。它根本不会改变我的角色。有人知道为什么吗?
PS:我知道这与我的输入无关,因为当我直接编辑位置时(例如player.transform.position.y += 1
)它可以工作,但看起来玩家只是在传送,所以我不想这样做。
c# - Unity 2D - 冻结轴和 AddForceAtPosition
我正在学习 Unity 2D,我想做这样的事情:
基本上,角色跑进盒子/边缘,然后摔倒了。但!我想以某种方式锁定 X 轴。所以实际上它看起来就像只是简单地旋转了 90 度(带有某种加速度)。
我试过用rigidbody2d 和edgecollider 和AddForceAtPosition 来做,但我失败了。
我真正想做的是锁定“墙”并在刚体的最顶部施加力,这样它就会向右倾倒,但它根本没有成功。
任何帮助,将不胜感激!
c# - 尽管施加了力,但没有运动
此代码适用于电梯类型的平台,一旦玩家站在平台上,它就会通过向平台施加力将玩家“带上”。
问题是,当力产生时,刚体(玩家)在电梯移动时不会移动。代码是使用 Unity 5 用 C# 编写的。在代码中,玩家被分配了公共“rb”,并包含一个刚体。动画是一个简单的动画片段,可以让电梯向上移动。有任何想法吗?感谢您的时间和提前回答。
电梯是运动学的,玩家不是。
unity3d - Unity3d用一些力移动物体
这是我试图在 2D 中实现的目标:
- 游戏对象
- 一个按钮
- 一个场景
1)我按下按钮 2)游戏对象从侧面进来,就像有人将游戏对象扔到场景中一样,这意味着它有一些速度可以融合并停止
我知道我需要使用 RigidBody2d,但我没有让它工作。有人可以给我一个提示如何解决这个问题吗?
c# - 刚体未按预期运行
在过去的几天里,我一直在研究一些定制的汽车物理作为编码练习。
我的最终目标是在旧版 GTA 游戏的质量和最近的 GTA 5 之间拥有一些半真实的汽车物理。
到目前为止,我得到的是一个非常复杂的过程,它最终给了我一个浮点数,这是我希望汽车行驶到下一帧的确切速度,到目前为止,我已经使用以下代码来做到这一点;
但是,因为我想使用 Unity 物理构建进行碰撞检测,所以我意识到这行不通,因为transform.Translate
(据我所知)实际上将对象放置在该位置,因此对象可能(如果速度足够快)突然到一半穿过墙壁或完全忽略碰撞并出现在墙壁的另一侧。现在我决定这样做:
快速说明一下,我在我的 FixedUpdate 中同时执行了这两项操作,而我目前只使用第二个示例(或者至少尝试使用它并且不幸失败了)。由于它处于固定更新中,我应该至少可以在不Time.deltaTime
使用的情况下对其进行一定程度的测试,这就是为什么您现在在第二个示例中看不到它的原因。
继续我的故事,由于某种原因,当我设置刚体的速度而不是使用transform.Translate
碰撞时,行为真的很奇怪。当我撞到墙上时,汽车变得非常漂浮并向前轻推(站在它的鼻子上),我不知道是什么导致了这种情况,因为我正在使用自己的重力(原来的重力Rigidbody
已关闭,有利于我的自己的自定义重力,这确实会导致向下的刚体力),并且刚体的阻力和角阻力已被调低为 0。
基本上我的问题是你们中的任何人是否知道是什么导致我的刚体以这种方式做出反应,从字面上看,我的正常代码和正在运行的代码之间的唯一区别是单行更改。
我已经考虑过使用rigidbody.AddForce()
,但这似乎根本没有做任何事情,最重要的是,我编写汽车脚本的全部原因是确定对象应该移动的速度,从而制作类似的东西rigidbody.AddForce()
这或多或少地增加了汽车的速度,不应该是必要的。
我什至首先使用刚体的唯一原因是我可以做两件事:1. 容易碰撞。这意味着我可以向它添加简单的力,例如重力,而不必担心它会穿过地板。2. 受碰撞等物理影响时容易旋转。
如果有人对如何在自定义脚本中执行这两件事有任何想法,我更愿意这样做,因为尽管我喜欢统一,但 Unity 刚体物理在我眼中实际上毫无价值,但是必须拥有,因为我不能编写我自己的自定义刚体,我也找不到 Unity 的源代码Rigidbody
。我宁愿拥有一个精简版的刚体,它允许轻松碰撞和轻松旋转,但没有诸如阻力或速度之类的所有东西,因为这些正是我希望能够控制自己并拥有的东西到现在为止我在使用的时候能够控制自己transform.Translate
,但是当我不得不使用的时候我就失去了这种控制rigidbody.velocity
。