【问题标题】:Unity; Control angle of PhysX joint, while respecting collisions统一;控制 PhysX 关节的角度,同时尊重碰撞
【发布时间】:2015-09-13 19:36:45
【问题描述】:

我有一个类似手臂的物体,带有 2 个可配置的关节,依次连接到运动学底座。每个关节都配置为围绕单个轴的旋转关节。

用户可以移动每个关节,当涉及碰撞时会出现问题。每个关节的所需角度已设置,但如果有物体挡住,关节将继续尝试移动到该目标角度,无论碰撞如何,该角度都会继续增加。

如果现在移动关节 2 以使关节 1 现在能够移动到其目标角度,则会产生捕捉动作并且是不可取的。

在链接的统一包中是我解决这个问题的尝试。我正在将实际关节角度与所需角度进行比较,如果它们的差异超过某个阈值,则所需值会降低。这适用于joint1,但joint2存在问题,即使我尝试允许其父关节旋转。

我希望可能有不同的方法来解决这个问题。我尝试使用定向“目标角速度”而不是设置所需的“目标旋转”,但是我需要关节以恒定速度移动,并且当使用“目标角速度”时,这更难实现为重力(其中需要保持打开)和其他问题影响速度。

网页播放器:http://beinginsight.co.uk/questions/JointAngleProblem/

UnityPackage:http://beinginsight.co.uk/questions/JointAngleProblem/JointAngleProblem.unitypackage

键: 联合1:问/答 关节2:W/S

我认为这将是一个微不足道的问题,但似乎我花了很长时间试图让它正常工作。

提前感谢您的帮助。

PS:正如您将在包中看到的那样,我一直在尝试一些不同的方法,但均无济于事,这里有一些代码可以吸引您的帮助;

// Restrain pos by actual joint angle; in case of collision
// a is only the smallest/unsigned angle, need signed angle to calculate differnce
//TODO: Been trying different ways to calculate angle, none ideal so far, please help
float a = getAngularPositionQuat(Inputs[i].JointObject, Inputs[i].Quant);   // Compensates for 'initial angle' too

//float a = Quaternion.Angle(getJointRotation(Inputs[i].JointObject), Inputs[i].Quant);

//float a = JointInput.DirectionalAngle( Inputs[i].JointObject.connectedBody.transform.up, 
//                                       Inputs[i].JointObject.transform.up, -Inputs[i].JointObject.connectedBody.transform.forward);


// Find direction of angle with consideration to parent/world rotations
        Vector3 dirr = Inputs[i].JointObject.connectedBody.transform.InverseTransformDirection( Inputs[i].JointObject.gameObject.transform.up);  //localPosition

【问题讨论】:

    标签: math unity3d 3d


    【解决方案1】:

    一旦你在刚体上设置了位置、旋转、关节角度或几乎任何东西,而不使用 addForce 之类的物理命令,那么它至少会破坏该帧的物理引擎模拟。最好的方法是使用 addForce,或者在这种情况下,我相信 AddTorque 是合适的。只是要注意增加扭矩量的帧率调整,最好使用 FixedUpdate。

    【讨论】:

      猜你喜欢
      • 2022-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-27
      • 2013-10-09
      相关资源
      最近更新 更多