Articles of 关节

是否有可能在Unity中制作一个反向铰链?

我想在同一时间移动两个物体,但是当其中一个物体接收到一个力时,它们会朝相反的方向移动。 两者都有一个spring联合(因为我想他们有spring效果)。 我怎么能让他们移动完全一样,但在相反的方向? 有可能做一个“反铰链”? 编辑:我只是希望他们在Y轴上反向移动,其他轴和旋转将被阻止。

布拉格关节和物理学重新开始统一之后高度不稳定

我现在有一个活跃的布娃娃,跟随另一个钻机的动作。 通过设置目标位置和目标位置,将部件与字符关节连接,并通过脚本进行控制。 关节的预处理和碰撞matrix以及关节特性都是closures的。 一切工作,直到我重新团结。 之后,整个布娃娃变得不稳定。 它在空闲的位置上工作得很好,但是一旦我移动,一切都开始抖动,并以不可能的角度旋转。 我发现唯一的解决办法是closures关节的所有限制,并设置他们自由,但这并不真正使一个好的布娃娃正确的。 我知道统一在碰撞和物理关节方面存在问题,但是我所做的所有工作在重新启动后变得毫无用处。 任何想法可能造成这种情况?

与四方制作飞机

我是一个初级Unity 3D开发者。 我想保持四方相互接触,并把它作为一个无尽的亚军游戏的道路。 问题是每个四方都有自己的箱子对撞机,因此有时汽车反弹一点点。 有没有办法让这些东西互相连接,使整个事物像一架飞机? 我知道使用覆盖重复单元中所有四边形的大箱子对撞机是可行的,但我不想使用它。

box2d棱柱关节摩擦

我知道可以通过启用电机并添加maxMotorTorque来增加摩擦转速。 我想同样的棱镜联合,但只有maxMotorSpeed选项是可用的,这并不完全适合我。 有另一种方法吗?

如何在这个脚本中将关节的标签设置为我想要的?

你好,我得到了这个从a位置到b位置的绳子的大脚本。 关节正在实例化,但标签是默认的,我必须改变脚本来设置关节的标签? “我没有写这个脚本!” 这里是RopeScript: public class RopeScript : MonoBehaviour { public Transform target; public float resolution = 0.5F; // Sets the amount of joints there are in the rope (1 = 1 joint for every 1 unit) public float ropeDrag = 0.1F; // Sets each joints Drag public float ropeMass = 0.1F; // Sets each […]

基于四元数的铰链约束的实现

我试图在拉格朗日乘子的基础上实现两个刚体之间的铰链连接,st约束函数是四元数的约束,它描述了身体的方向本身。 用一些与物体刚性连接的向量来描述约束更为自然,因为它只是隐含的四元数。 加四元数应该处理“vector约束”的双稳问题。 编写正确的约束函数是至关重要的。 看来我find了正确的约束,但是出了点问题(后面)。 请告诉我,如果我做错了什么或错过了什么。 让我们只关注两个刚体围绕某个共同轴线的无限铰链旋转。 所以我们需要摆脱两个自由度。 让 q = rAconj qAconj qB rB, 其中qA和qB是通常的方向四元数(如果向量V在体B的帧中有一个坐标列V'(让我们命名这个帧B'),那么(qB *(0,V')* qBconj).im是它在世界坐标系中的坐标列(让我们称之为W)),rB是一个四元数,它执行从坐标轴旋转,坐标轴方向向量坐标为(0,0,1)帧B“)到帧B',由类比定义的rA。 如果q的向量部分与Z轴共线,则不会违反铰链约束。 即(坐标)约束是正义的 qx = 0, qy = 0. 然后区分这个方程,关于莱布尼兹规则,四元数的单位性和dq / dt = 0.5 q(0,w) qdot = 0.5 rAconj (qAconj qB (0, wB) – (0, wA) qAconj qB) rB 和速度限制: qdot.x = 0, qdot.y = 0. 速度是“去耦的”,所以得到雅可比matrix是一个简单的四元数乘法的问题。 为了方便实验,我只写了计算雅可比(Jacobian)的短函数getC,getCdot。 […]

即使受到约束,铰链/可configuration的关节旋转

我已经在Unity论坛上发布了这个问题,不过,我不得不说,这个地方往往看起来更专业和知识渊博,所以这里就是镜像后。 我有一个铰链和连接到铰链 杆的气缸 。 铰链轴被设置为Y ,因为气缸翻转使其可curl。 这是Hierarchy的顺序: (我给了各种各样的尝试,因此是描述性的名字 。) 刚体 – 左侧为Cylinder ,右侧为Pole : 可以看出, 极点被设置为Freeze Rotation on X上的Freeze Rotation on X 。 而且, 铰链 : 没有什么特别的,根据HingeJoint文档 ,我试图“禁用预处理”无济于事。 问题是,即使杆设置为不围绕X旋转,它仍然是。 比如这里,当气缸一直滚到停止点时, 极点缓慢旋转: 这里可以看到完整的video: gifv @ imgur 。 我也试图用可configuration关节重新创建铰链 ,也没有帮助。 我如何停止这个轮换? 我需要杆来模仿滚筒缸 ,不包括X旋转。

在一个基于脉冲的物理引擎中,关节如何工作?

我想了解物理引擎,尤其是基于脉冲的引擎。 所以我遵循这个教程来创建一些简单的刚体物理: http : //gamedevelopment.tutsplus.com/tutorials/how-to-create-a-custom-2d-physics-engine-the-basics-and -impulse分辨率- gamedev-6331 我有这个工作,这对我来说似乎很稳固。 所以我想添加旋转(固定)关节。 我已经开始了一个简单的结构: struct Joint { RigidBody* A; // One body Vec2 AnchorPointA; // A's anchor point's offset (0,0 if center) RigidBody* B; // The other body Vec2 AnchorPointB; // B's anchor point's offset (0,0 if center) }; 我猜这会做这个工作。 现在…我不太擅长物理(因此我开始编码),所以我开始了我认为会工作: RigidBody* A = joint->A; RigidBody* B = joint->B; […]

顶点蒙皮,骨骼matrix问题

我正在C#中使用OpenTK创建一个模型/animation查看器,用于游戏模型。 在陈述我的问题之前,我想先描述一下我已经完成了什么,以防万一我从根本上失去了一些东西。 首先我parsing模型骨架。 就像在网上几乎所有的描述一样,我所做的就是遍历从根骨骼开始的所有层次结构,并开始建立联合matrix。 游戏文件分别提供平移,旋转和缩放vector。 为了创建所有的联合matrix,我只使用旋转值,将其转换为旋转matrix,并将其保存为localMatrix。 我将翻译保存为联合位置(localPosition),稍后我将它们用于通过使用父代的worldMatrix对其进行转换来计算我的关节的worldPosition。 以下方法负责获取联合世界matrix及其世界位置 public Vector3 worldPosition { get { if (parent != null) return parent.worldPosition + Vector3.Transform(this.localPosition, parent.worldMat); this.worldMat); else return this.localPosition; } } public Matrix4 worldMat { get { if (parent != null) return Matrix4.Mult(this.localMat, parent.worldMat); else return this.localMat; } } 使用这段代码,我可以完美地预览骨架。 我也设法parsinganimation。 我使用每帧的旋转信息来更新每个关节局部matrix,因此我能够成功地预览关节骨架上的animation。 现在我唯一缺less的是绑定骨架上的网格(我正在尝试使用顶点着色器)。 无论我在网上search,我发现我需要应用以下公式: 我得到了blendIndices和blendWeights,所以这也不是问题。 尽管我完全同骨基质混淆。 如果我理解正确的matrix[我]是联合的世界变换matrix。 […]

实现与FixedJoint2D相同的效果,但也可以匹配RigidBody2D的力量

试图用刚体物理的方式来创建一个与它所链接的对象完全相同的对象。 因此,扭矩,速度以及来自碰撞的任何合成扭矩或速度。 这张图片演示了我的意思: 我试过使用FixedJoint2D,我的对象分享速度,但不共享扭矩,应用扭矩对任何对象都没有做任何事情,似乎locking。 我尝试了使用其他关节,如DistantJoint2D(不匹配y值,只有分离值),TargetJoint2D(立即否定速度),RelativeJoint2D(最接近实际工作,但扭矩施加时毛刺,它作用于一个中心在两个连接的物体之间的质量和物体相互旋转,有时更接近或更远) 我也不能只将变换位置和旋转应用到第二个对象,因为这些对象将与移动的对象碰撞。 使用这种方法时,它们碰撞的物体会滑入方块并被挤压掉。 所以我需要知道是否有办法使用FixedJoint2D或RelativeJoint2D或其他方法或联合,我不知道达到相同的效果。 也许把发生在一个物体上的碰撞力应用到另一个物体上,但是它需要是立即的,我不知道如何将碰撞从一个物体应用到另一个物体。