public GameObject target;
private Rigidbody2D targetRB2D;
private Rigidbody targetRB;
private void Push()
{
SwitchKinematic();
direction = -arrow.direction;
float amount = Mathf.Clamp((ForceAmount(force) * distance), 0f, 50000f);
if (target.GetComponent<Rigidbody2D>() != null)
{
targetRB2D.AddForce(amount * direction, ForceMode2D.Force);
}
if (target.GetComponent<Rigidbody>() != null)
{
targetRB.AddForce(amount * direction, ForceMode.Force);
}
StartCoroutine(AttackSwitch());
}
private void Pull()
{
SwitchKinematic();
direction = target.transform.position - transform.position;
direction = direction.normalized;
float amount = Mathf.Clamp(-ForceAmount(force), -20000f, 20000f);
if (target.GetComponent<Rigidbody2D>() != null)
{
targetRB2D.AddForce(amount * direction, ForceMode2D.Force);
}
if (target.GetComponent<Rigidbody>() != null)
{
targetRB.AddForce(amount * direction, ForceMode.Force);
}
}
private void SwitchKinematic()
{
if (target.GetComponent<InteractiveObjectType>() != null)
{
if (target.GetComponent<InteractiveObjectType>().stopped)
{
target.GetComponent<InteractiveObjectType>().stopped = false;
}
}
}
Push()
发生在 Mouse0输入 Pull()
发生在 Mouse1输入 我有两个相互通信的脚本,它们通过一侧的布尔检查来打开和关闭Rigidbody.Iskinematic
。上面这个方法是告诉另一个人的刚体在它的运动学时变成动态的。
这应该正常工作(通过调试器检查显示按顺序发生的行),但我的问题是Push()
的命令按顺序运行,因为它应该接收其他脚本这种方法的布尔切换似乎太晚了。因此,这些行已经发生,而SwitchKinematic()
没有影响其他代码来切换它的布尔值。
我的理解是,这是由于命令发生的时间,因为它们是单独的脚本,但不知道如何解决这个问题。我还在脚本中包含了一个类似的方法; Pull()
。 Pull()
成功切换接收端的布尔值和体型没有问题,因为它每帧更新一次,但Push()
仅在KeyUp
上发生,我需要它保持这种状态。