Sage

[Unity] 딜레이 주는 방법 본문

Project/Unity

[Unity] 딜레이 주는 방법

Naram 2017. 11. 15. 14:09

유니티에서 미사일이나 총알을 발사하거나 몬스터를 일정 시간 간격으로 생성하는 등 delay(시간 지연)를 줘야하는 경우가 있다.

여러 가지 방법을 정리해보았다.


1. 특정 시간 경과 이후 특정 작업 반복 실행하기 
Coroutines으로 작업이 가능하지만 단순한 지연 이벤트를 처리하기는 Coroutines의 처리로직이 복잡해질 수 있다. Time.deltaTime을 사용하는 방법
float timer;
int waitingTime;

void Start()
{
  timer = 0.0;
  waitingTime = 2;
  inside = false;
}

void Update()
{
  timer += Time.deltaTime;
  
  if(timer > waitingTime)
  {
    //Action
    timer = 0;
  }
}



2. 오브젝트가 생성된 이후 특정 시간이 경과한 뒤에 destroy시키기 
화면에 오브젝트가 나타난 뒤, 일정시간 이후 제거하려 한다면 다음과 같은 코드를 사용하면 된다.
function Start()
{
  //Destroy the game object in 5 seconds
  Destroy(gameObject, 5);
}



3. Coroutine을 이용한 Action 지연 처리
using UnityEngine;
using System.Collections;

public class Wait : MonoBehaviour
{
  public bool check =true;
  int i =0;

 void Update ()
 {
   if(Input.GetKeyDown(KeyCode.A)&&check)
   {
     check = false;
     print("Inside" + i++);
     StartCoroutine(WaitForIt());
   }
 }
  
 IEnumerator WaitForIt()
 {
   yield return new WaitForSeconds(2.0f);
   check=true;
 }
}



4. 함수 지연 호출
public Rigidbody projectile;

void LaunchProjectile()
{
  Rigidbody instance = Instantiate(projectile);
  instance.velocity = Random.insideUnitSphere * 5;

  // CancelInvoke(“LaunchProjectile”); // 필요할 경우 Invoke 취소처리
}

void Start()
{
  Invoke("LaunchProjectile", 2); // 2초뒤 LaunchProjectile함수 호출
  Invoke("LaunchProjectile", 2, 0.3f); // 2초뒤 0.3초주기로 LaunchProjectile함수 반복 호출
}




5. 언제 Coroutine을 사용할까? 

Coroutine은 Update함수의 내용이 너무 복잡해지는걸 원치 않을때 유용하게 사용될 수 있습니다.


※ 주의 : 여러개의 Coroutine이 같은 변수를 수정하고자 하면 찾기 어려운 오류를 발생시킬 수 있습니다.



'Project > Unity' 카테고리의 다른 글

[Unity] UI JoyStick 적용하기  (2) 2017.11.27
[Unity] SkyBox 적용하는 메뉴 위치  (1) 2017.11.27
Comments