2014-10-22 3 views
2

우선 질문이 너무 사소한 경우 용서해주십시오. 그 이유는 내가 Unity에서 새롭기 때문이며 문서를 작성하는 데 어려움이 있습니다. 내가 원하는 것은 캐릭터를 한 위치에서 다른 움직이는 애니메이션으로 이동시키는 것입니다. 애니메이션은 컨트롤러 애니메이션 "Animator"를 통해 시작됩니다. 문제는 애니메이션을 시작하기위한 트리거를 실행하면 캐릭터가 이전 애니메이션을 멈추게하지 않아서 내가 묻는 애니메이션을 수행 할 때 결과가 동기화 해제됩니다. 캐릭터가 당시의 애니메이션으로 움직이기 시작합니다. 나는 많은 것을 시도했지만 문제를 찾을 수 없습니다. 내가이 enter image description here"Animator"가 애니메이션을 끝내고 원하는 애니메이션을 실행하도록 할 수 있습니까?

을이 드 코드입니다 :

enum AnimTriger {IdleTrigger, SpawnTrigger, RunTrigger, AttackTrigger, DeadTrigger, VictoryTrigger }; 
public class CharacterController : MonoBehaviour { 
    private GameObject target, origin; 
    private bool isWalking = false; 
    private bool isMele = false; 
    private GameObject instigator; 



    public void goAndAttack(GameObject instigator, GameObject target,GameObject origin, bool mele) 
    { 
     this.target = target; 
     this.origin = origin;   
     this.instigator = instigator; 
     isMele = mele; 
     StartCoroutine(AttackAction()); 

    } 

    private IEnumerator AttackAction() 
    { 
     Animator anim = instigator.GetComponent<Animator>(); 

     yield return new WaitForSeconds(anim.GetCurrentAnimatorStateInfo(0).length);   
     if (isMele) 
     { 
      anim.SetTrigger(AnimTriger.RunTrigger.ToString()); 
      yield return new WaitForSeconds(anim.GetCurrentAnimatorStateInfo(0).length); 
      isWalking = true; 
      while (isWalking) 
      { 
       yield return new WaitForFixedUpdate(); 
      } 
      yield return new WaitForSeconds(anim.GetCurrentAnimatorStateInfo(0).length); 

     } 

     anim.SetTrigger(AnimTriger.AttackTrigger.ToString()); 
     if (isMele) 
     { 
      anim.SetTrigger(AnimTriger.RunTrigger.ToString()); 
      target = origin; 
      yield return new WaitForSeconds(anim.GetCurrentAnimatorStateInfo(0).length); 
      isWalking = true; 
      while (isWalking) 
      { 
       yield return new WaitForFixedUpdate(); 
      } 
      yield return new WaitForSeconds(anim.GetCurrentAnimatorStateInfo(0).length); 
     } 
     anim.SetTrigger(AnimTriger.IdleTrigger.ToString()); 

    } 

    void Update() { 
     if (isWalking && isMele) 
     { 
      instigator.transform.position = Vector3.MoveTowards(instigator.transform.position, target.transform.position, 0.1f); 
      isWalking = instigator.transform.position != target.transform.position; 
     } 


    } 


} 

그것이 내가 원하는 애니메이션을 어떤 애니메이션을 종료하고 실행하기 위해 "애니메이터을"강제로 가능 이 애니메이터 수있다?
미리 도움 주셔서 감사합니다.이 문제에 대해 저에게 줄 수 있습니다.

답변

0

대답은 간단하다, 다만 "원자"확인란의 선택을 취소하면 애니메이션을 enter image description here

을 깰 수
0

bi 시간을 마치면 질문이 게시됩니다. 수 있습니다 추가 할 수 있습니다 UpDate 함수는 다른 조건 :

void Update() { 
    if (isWalking && isMele && instigator.GetComponent<Animator>().GetCurrentAnimatorStateInfo(0).IsName("Basic Layer.Run")) 
    { 
     instigator.transform.position = Vector3.MoveTowards(instigator.transform.position, target.transform.position, 0.1f); 
     isWalking = instigator.transform.position != target.transform.position; 
    } 

그러나 이것은 내가 원하는 것이 아닙니다.

관련 문제