2017-04-10 245 views
0

如果我不碰撞模型(不是玩家)在場景中散步,腳本工作正常。
但是,如果我用角色控制器撞擊模型,模型將在它遇到等待動畫狀態後繼續移動。Unity transform.translate永不停止

爲什麼會發生這種情況?我該如何解決它?

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

對象是否附着了剛體?即使您沒有在代碼中移動對象,物理交互仍然適用。 – Serlite

+0

你試過這個嗎?將'Translate'改爲'transform.Translate(0,0,speed * Time.deltaTime,Camera.main.transform);'。 – Hristo

+0

我現在拆下了剛體並正確工作。謝謝Serlite! – CsharpBeginner

回答

1

InvokeRepeating的第三個參數是您指定的方法再次被調用的頻率。所以Unity會每20秒調用一次SetWalkMode。當你的模型將進入其「等待」狀態時,將在20秒內通過此方法重置。

當您檢測到碰撞並在SetWalkMode方法中檢查該變量時,您可以設置一個變量(如bool)。

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