Unity_ Coroutine, Prefab

Nubox·2024년 3월 5일

Unity

목록 보기
6/7

Coroutine

게임을 구현하다보면 버프나 디버프, 혹은 게임의 순환시간과 다르게 흘러가는 것을 볼 수 있다.
유니티에서는 대부분의 순환은 Update() 메소드가 호출되는 것으로 상태가 업데이트 된다.
하지만 이 순환과 별개로 다른 상황에서 다른 조건으로 순환을 만들어야하는 상황이 있다.
이럴 때 사용하는 것이 Coroutine이다.

https://docs.unity3d.com/kr/2022.3/Manual/Coroutines.html

유니티 공식 문서에도 나와있는 말로 코루틴은 쓰레드가 아니다. 같은 메인 쓰레드에서 작업되며, 만약 코루틴이 너무 많이 생성될 경우, 메인 쓰레드에 걸리는 부하가 매우 커질 수 있다.

그래서 코루틴은 HTTP 통신, 파일 I/O, 에셋로드 등 게임의 메인 작업과 별개로 비동기 작업으로 이루어지는 경우에 사용하는 것이 좋다.

private IEnumerator Move()
{
	while(true)
    {
		transform.position += Vector3.forward*1.0f*Time.deltaTime;
        yield return null;
        // 실행을 일시정지하고 다음 프레임에서 밑의 코드가 실행된다.        
        transform.Rotate(Vector3.forward*1.0f*Time.deltaTime);
        
        yield return new WaitforSeconds(1.0f);
        //다음 루틴 시작을 1초 지연시간을 부여할 수 있다.
        
    }
}


private void Update()
{
	if(Input.MouseButtonDown(0))
    {
    	StartCoroutine(Move());
        // 마우스 왼클릭 시 코루틴 시작
    }
    if(Input.MouseButtonDown(1))
    {
    	StopCoroutine(Move());
        // 우클릭 시 코루틴 종료
    }
}

Prefab

여러가지 씬을 만들 때, 다양한 오브젝트를 만들어서 투입할 수 있다. 하지만 상황에 따라 같은 오브젝트를 여러 번 재사용해야 할 수도 있다. 이럴 때 Prefab 시스템을 이용해서 먼저 오브젝트를 만들어 놓은 다음, 필요할 때 씬에 새로운 프리펩 인스턴스를 만들어 주는 시스템이다.

project 윈도우에서 새로운 프리펩을 생성할 수 있다.


생성한 프리펩을 클릭하면 다음과 같이 화면이 바뀌게 된다.
여기서 원하는 형태의 오브젝트를 만들어 줄 수 있고, 이후에 원하는 상황에 해당 프리펩을 가져다 사용할 수 있다.

profile
게임 개발을 하면서 배워가는 것들을 조금씩 기록하는 곳입니다

0개의 댓글