Unity transform.translate永远不会停止

时间:2017-04-10 20:47:12

标签: c# unity3d transform

如果我不碰撞模型(不是玩家)在场景中走动,脚本就可以正常工作 但是如果我用我的角色控制器撞击模型,模型一旦到达等待的动画状态就会继续移动。

为什么会这样?我该如何解决?

    public class MoveMan2 : MonoBehaviour
{

    public float speed = 0.85f;
    public Animator anim;
    void Start()
    {
        anim = GetComponent<Animator>();
        InvokeRepeating("SetWalkMode",5.0f,20.0f);
    }

    void SetWalkMode()
    {
        anim.Play("SkitsWalk", -1, 0f);
    }

    void Update()
    {
        if (anim.GetCurrentAnimatorStateInfo(0).IsName("SkitsWalk"))
        {
            Debug.Log("Skits walking");
            transform.Translate(0, 0, speed * Time.deltaTime);
        }
        if (anim.GetCurrentAnimatorStateInfo(0).IsName("Wait"))
        {
            Debug.Log("Waiting");
        }
    }
}

1 个答案:

答案 0 :(得分:1)

InvokeRepeating的第3个参数是指定方法再次调用的频率。因此Unity将每20秒调用一次SetWalkMode。当您的模型进入“等待”状态时,它将在20秒内通过此方法重置。

您可以在检测到碰撞时设置变量(如bool)并在SetWalkMode方法中检查该变量。

bool isObjectInCollision = false;

void EnterCollision()
{
    // do something
    isObjectInCollision = true;
}

void LeaveCollision()
{
    // do something
    isObjectInCollision = false;
}

void SetWalkMode()
{
    if (isObjectInCollision)
       return;
    anim.Play("SkitsWalk", -1, 0f);
}