2014년 5월 15일 목요일

unity3d script : 시간 경과에 따른 로직 처리

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함수 반복 호출
}



4. 언제 coroutine을 사용할까?
coroutine은 Update함수의 내용이 너무 복잡해지는걸 원치 않을때 유용하게 사용될 수 있습니다.
주의 : 여러개의 coroutine이 같은 변수를 수정하고자 하면 찾기 어려운 오류를 발생시킬 수 있습니다.






댓글 없음:

댓글 쓰기