프로그래밍-1/Unity3D

Unity3D에서 자주 쓰고 있는 C# 코드 (5) - StartCoroutine (1)

daslyee 2013. 8. 21. 14:11
728x90

유니티에서 아마 시간 지연을 이용해서 무언가를 구현할 때 가장 많이 사용했지 않나 싶을 정도로 많이 사용중인 문법이다.



아래 코드를 살펴보자. 


void OnCollisionEnter(Collision other)
	{
		if(other.transform.tag == "trap" || other.transform.tag =="Bullet"){ //tag가 trap이거나 Bullet라면,
			rigidbody.velocity = Vector3.up * jump * 1.5f *Time.deltaTime; //(rigidbody가 적용된 상태에서) up방향으로 잠시 이동.
			gameObject.transform.collider.enabled = false; //게임오브젝트의 collider를 enabled 시킴.
			
			StartCoroutine(Die(0.01f)); //IEnumerator  Die 실행.
		}

IEnumerator Die(float waitTime){ //float형의 waitTime(지금 여기에선 0.01f)을 읽어들임. 0.01초라고 가정했을때 거의 바로 실행됨.
		yield return new WaitForSeconds(1.0f);  // WaitForSeconds(1.0f)초 후에 게임오브젝트 삭제 및 게임카운트 1개 감소.
		Destroy (gameObject);
		--HeartCnt;
	}

위 코드는 아래 그림을 보면 더욱 이해가 빠를 것이다. 참고하여 보자.


   


응용적으로 사용하자면, 아래와 같이 순차적인 행동을 취할 수 있도록 설정할 수 있다.


IEnumerator 함수이름(float waitTime){
yield return new WaitForSeconds(몇초후에 아래 코드를 실행시킬 것인가);
위 시간이 흐르고 실행 시킬 코드.
yield return new...
....
}


728x90