本文整理汇总了C#中HkRigidBody.GetRigidBodyMatrix方法的典型用法代码示例。如果您正苦于以下问题:C# HkRigidBody.GetRigidBodyMatrix方法的具体用法?C# HkRigidBody.GetRigidBodyMatrix怎么用?C# HkRigidBody.GetRigidBodyMatrix使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类HkRigidBody
的用法示例。
在下文中一共展示了HkRigidBody.GetRigidBodyMatrix方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: GetGridPosition
private static Vector3 GetGridPosition(HkContactPoint contactPoint, HkRigidBody gridBody, MyCubeGrid grid, int body)
{
var position = contactPoint.Position + (body == 0 ? 0.1f : -0.1f) * contactPoint.Normal;
var local = Vector3.Transform(position, Matrix.Invert(gridBody.GetRigidBodyMatrix()));
return local;
}
示例2: OnMotion
/// <summary>
/// Called when [motion].
/// </summary>
/// <param name="rbo">The rbo.</param>
/// <param name="step">The step.</param>
public virtual void OnMotion(HkRigidBody rbo, float step)
{
if (Entity == null)
return;
if (this.Flags == RigidBodyFlag.RBF_DISABLE_COLLISION_RESPONSE)
{
return;
}
if (IsPhantom)
{
return;
}
ProfilerShort.Begin(RigidBody2 != null ? "Double kinematic" : "Normal");
ProfilerShort.Begin("Update acceleration");
if (CanUpdateAccelerations)
UpdateAccelerations();
ProfilerShort.End();
if (RigidBody2 != null && rbo == RigidBody)
{
// To prevent disconnect movement between dynamic and kinematic
// Setting motion to prevent body activation (we don't want to activate kinematic body)
ProfilerShort.Begin("Set doubled body");
RigidBody2.Motion.SetWorldMatrix(rbo.GetRigidBodyMatrix());
ProfilerShort.End();
}
if (LinearVelocity.LengthSquared() > 0.000005f || AngularVelocity.LengthSquared() > 0.000005f)
{
ProfilerShort.Begin("GetWorldMatrix");
var matrix = GetWorldMatrix();
ProfilerShort.End();
ProfilerShort.Begin("SetWorldMatrix");
this.Entity.PositionComp.SetWorldMatrix(matrix, this);
ProfilerShort.End();
}
ProfilerShort.Begin("UpdateCluster");
UpdateCluster();
ProfilerShort.End();
ProfilerShort.End();
}
示例3: OnMotion
/// <summary>
/// Called when [motion].
/// </summary>
/// <param name="rbo">The rbo.</param>
/// <param name="step">The step.</param>
public virtual void OnMotion(HkRigidBody rbo, float step)
{
if (rbo == RigidBody2)
return;
Debug.Assert(rbo == RigidBody);
foreach(var child in WeldInfo.Children)
{
child.OnMotion(rbo, step);
}
if (Entity == null)
return;
if (Entity.Parent != null)//Parent should take care of moving children
return;
if (this.Flags == RigidBodyFlag.RBF_DISABLE_COLLISION_RESPONSE)
{
return;
}
if (IsPhantom)
{
return;
}
ProfilerShort.Begin(RigidBody2 != null ? "Double kinematic" : "Normal");
ProfilerShort.Begin("Update acceleration");
if (CanUpdateAccelerations)
UpdateAccelerations();
ProfilerShort.End();
if (RigidBody2 != null)
{
// To prevent disconnect movement between dynamic and kinematic
// Setting motion to prevent body activation (we don't want to activate kinematic body)
ProfilerShort.Begin("Set doubled body");
RigidBody2.Motion.SetWorldMatrix(rbo.GetRigidBodyMatrix());
ProfilerShort.End();
}
const int MaxIgnoredMovements = 5;
const float MinVelocitySq = 0.00000001f;
m_motionCounter++;
if (m_motionCounter > MaxIgnoredMovements ||
LinearVelocity.LengthSquared() > MinVelocitySq || AngularVelocity.LengthSquared() > MinVelocitySq)
{
ProfilerShort.Begin("GetWorldMatrix");
var matrix = GetWorldMatrix();
ProfilerShort.End();
ProfilerShort.Begin("SetWorldMatrix");
this.Entity.PositionComp.SetWorldMatrix(matrix, this, true);
ProfilerShort.End();
m_motionCounter = 0;
}
ProfilerShort.Begin("UpdateCluster");
if(WeldInfo.Parent == null)
UpdateCluster();
ProfilerShort.End();
ProfilerShort.End();
}