【问题标题】:Unity transform.translate never stopsunity transform.translate 永不停止
【发布时间】:2017-04-10 20:47:12
【问题描述】:

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

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

    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");
        }
    }
}

【问题讨论】:

  • 对象是否附有刚体?即使您没有在代码中移动对象,物理交互仍然适用。
  • 你试过了吗?将Translate 更改为transform.Translate(0, 0, speed * Time.deltaTime, Camera.main.transform);
  • 我移除了刚体,它现在可以正常工作了。谢谢 Serlite!

标签: c# unity3d transform


【解决方案1】:

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

您可以在检测到碰撞时设置一个变量(如布尔值)并在您的 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);
}

【讨论】:

    猜你喜欢
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-18
    • 1970-01-01
    • 2013-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多