반응형
유니티에서 미사일이나 총알을 발사하거나 몬스터를 일정 시간 간격으로 생성하는 등 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;
}
}화면에 오브젝트가 나타난 뒤, 일정시간 이후 제거하려 한다면 다음과 같은 코드를 사용하면 된다.
3. Coroutine을 이용한 Action 지연 처리
4. 함수 지연 호출
function Start()
{
//Destroy the game object in 5 seconds
Destroy(gameObject, 5);
}
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;
}
}
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이 같은 변수를 수정하고자 하면 찾기 어려운 오류를 발생시킬 수 있습니다.
반응형
'Game > Unity' 카테고리의 다른 글
| [Unity] UI JoyStick 적용하기 (2) | 2017.11.27 |
|---|---|
| [Unity] SkyBox 적용하는 메뉴 위치 (1) | 2017.11.27 |