不同的脚本沟通太晚了

时间:2017-07-25 17:12:45

标签: c# unity3d

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上发生,我需要它保持这种状态。

0 个答案:

没有答案