2016-10-15 4 views
0

두 가지 기능이 있습니다. harmPlayer()는 Update() 함수에서 매 5 초마다 호출해야합니다. 하지만 update() 함수에서 수백 번 실행됩니다. 나는() 함수는 각 프레임에서 실행지고 그리고 매번 harmPlayer을 (호출) 후, 나는 대기를 구현하는 방법 업데이트를 이해하기위한 오초 '여기Coroutine이 초를 기다리지 않습니다.

IEnumerator HarmPlayer() 
    { 
     Debug.Log("Inside Harm Player"); 
     yield return new WaitForSeconds(5); 
     Debug.Log("Player Health is the issue"); 

    } 

내 업데이트() 함수

void Update() { 

     transform.LookAt(target); 
     float step = speed * Time.deltaTime; 
     distance = (transform.position - target.position).magnitude; 
     if (distance < 3.5) 
     { 
      animator.SetFloat("Attack", 0.2f); 
      StartCoroutine("HarmPlayer"); 
     }  
    } 
+0

. InvokeRepeating을 사용 해보십시오 –

답변

0

코 루틴 기능이 제대로 작동하고 있습니다. 문제는 당신이 Update 함수에서 호출하고 있으며, 몇 초에 여러 번 호출된다는 것입니다. boolean 변수를 사용하여 동시 루틴 기능이 실행 중인지 확인할 수 있습니다. 실행중인 경우 공격하거나 새 코 루틴을 시작하지 마십시오. 그렇지 않다면 코 루틴을 시작할 수 있습니다.

coroutine 함수의 끝에서 해당 변수를 false으로 설정하십시오. 이것을하는 다른 방법이 있지만 이것이 가장 쉬운 방법 인 것 같습니다. 당신의 코 루틴이 5 초 대기 후가 호출 모든 시간의 코 루틴을 처리하는 모든 업데이트를 호출하기 때문이다

bool isAttackingPlayer = false; 
IEnumerator HarmPlayer() 
{ 
    Debug.Log("Inside Harm Player"); 
    yield return new WaitForSeconds(5); 
    Debug.Log("Player Health is the issue"); 
    isAttackingPlayer = false; //Done attacking. Set to false 
} 

void Update() 
{ 

    transform.LookAt(target); 
    float step = speed * Time.deltaTime; 
    distance = (transform.position - target.position).magnitude; 
    if (distance < 3.5) 
    { 
     if (isAttackingPlayer == false) 
     { 
      isAttackingPlayer = true; //Is attacking to true 
      animator.SetFloat("Attack", 0.2f); 
      StartCoroutine("HarmPlayer"); 
     } 
    } 
} 
+1

감사합니다 프로그래머, 대단하네요. 감사합니다. u :-) –

+0

당신은 환영합니다! – Programmer

관련 문제