unity에서 2D 그래픽에서 사용되는 이미지 이미지와 속성을 저장
sprite 생성 방법 : gameobject에서 sprite renderer 컴포넌트 추가하기 or 2D object 사용
SpriteRenderer
sprite를 실제로 화면에 그리는 것 색상 정렬등을 설정
layer
오브젝트 랜더링 순서 제어 낮은 순서부터 그려짐
sortingLayerName : 오브젝트가 속한 레이어 이름
sortingOrder : 순서 결정
커스터마이징 가능(add sorting layers)
게임 오브젝트에 접근하는 스크립트(오브젝트를 참조)
게임 오브젝트의 renderer 컴포넌트를 통해 재질을 찾고 변경
void Update()
{
_laptime += Time.deltaTime;
if (_laptime > 2.0f)
{
if (_isOn)
{
ChangeMaterial(false);
}
else
{
ChangeMaterial(true);
}
_laptime = 0.0f;
}
}
routine
프로그래밍 실행 가능한 단위 보통 함수(메서드)
보통 작업을 순차적으로 실행하는 루틴
coroutine
이런 루틴들을 비동기적으로 실행할 수 있는 기능
이전에는 호출된 함수가 종료될 때까지 기다려야했음
코루틴은 실행 중인 함수가 중지되고 후에 다시 재개될 수 있도록 함 => 실행 흐름 제어 비동기 작업 처리에 유용
coroutine 사용 예시
시간이 많이 소요되거나 대기 시간이 필요한 작업이나 다른 이벤트에 응답하는 작업 처리에 유용
애니메이션 전환, 캐릭터의 단계별 이동
IEnumerator yield return 구문을 이용한 coroutine
void Start()
{
IEnumerator testIEnumerator = TestIEnumerator();
//열거자 : 에서 movenext함수를 실행하면 1까지 실행
Debug.Log(testIEnumerator.Current == null ? "null" : "");
testIEnumerator.MoveNext();
Debug.Log("yield value="+testIEnumerator.Current);
testIEnumerator.MoveNext();
Debug.Log("yield value="+testIEnumerator.Current);
testIEnumerator.MoveNext();
Debug.Log("yield value="+testIEnumerator.Current);
testIEnumerator.MoveNext();
Debug.Log("yield value="+testIEnumerator.Current);
}
IEnumerator TestIEnumerator()
{
Debug.Log("1번째 반환:");
yield return 1;
Debug.Log("2번째 반환:");
yield return 2;
Debug.Log("3번째 반환:");
yield return 3;
Debug.Log("반환끝");
}
void Start()
{
ChangeMaterial(true);
StartCoroutine("playChangeMaterial");
}
//coroutine을 사용하면 while문에서 실행=> 대기하는 동안 다른 것이 처리 그뒤에 1초뒤에 돌아와서 실행
private IEnumerator playChangeMaterial()
{
while (true)
{
yield return new WaitForSeconds(1.0f); //1초 대기 (time sacle에 영향 받음)
//yield return null; //1 프레임 대기
// yield return new WaitForSecondsRealtime(1.0f); //실제 시간 1초동안 대기
//yield return new WaitForFixedUpdate(); //다음 fixedupdate가 끝날때 까지 대기
//yield return new WaitForEndOfFrame(); //다음 frame의 update와 모든 랜더링이 끝날때까지 대기
if(_isOn)
{
ChangeMaterial(false);
}
else
{
ChangeMaterial(true );
}
}
}
Time.timeScale
유니티 안에서 시간 조절 (실제 시간과 다를 수 있음)
동영상 배속 조절과 비슷한 개념
독립적 실행 단위로 각자 메모리 공간을 가짐
독립적인 프로그램 실행이나 오류 격리가 필요할 때
운영체제 수준에서 동작
프로세스 안에서 별도의 실행 흐름 단위, 프로세스 메모리를 공유해 동시성 제공
각
별도의 실행 흐름을 가지기 때문에 메모리와 스택 사용량이 필요해 오버헤드 고려해야함
동시 작업 병렬 처리가 필요한 프로그램
단일 스레드 안에서 순차적, 비동기적 동작 구현 일시 중단과 재개가 가능함
실행 흐름이 여러단계로 분할
스택이나 메모리 할당이 필요없어 메모리 사용이 적음
프로세스 | 스레드 | 코루틴 | |
---|---|---|---|
정의 | 실행 중인 프로그램 단위 | 프로세스 내에서 실행되는 실행 흐름 단위 | 함수의 실행을 일시 중단하고 재개하는 함수 |
동작 원리 | 독립적인 메모리 공간을 가짐 | 프로세스의 메모리 공간을 공유 | 단일 스레드 내에서 동작 |
병행성 | 동시에 여러 프로세스 실행 가능 | 동시에 여러 스레드 실행 가능 | 직렬적인 병행성 제공 |
리소스 사용 | 메모리, 파일 핸들, 디바이스 등을 독립적으로 소유 | 프로세스 내 자원 공유로 메모리 사용량 감소 | 추가 메모리 할당 없이 동작 가능 |
동기/비동기 | 동기적 또는 비동기적 동작 가능 | 동기적 또는 비동기적 동작 가능 | 비동기적 동작 구현 가능 |
오버헤드 | 프로세스 간 컨텍스트 전환에 오버헤드 발생 | 스레드 간 컨텍스트 전환에 일부 오버헤드 발생 | 컨텍스트 전환에 거의 없는 경량 동작 |
에러 격리 | 한 프로세스의 오류가 다른 프로세스에 영향 없음 | 스레드 간 오류가 전체 프로세스에 영향 가능 | 코루틴 간 오류가 다른 코루틴에 영향 가능 |
사용 예시 | 독립적인 프로그램 실행, 프로세스 간 통신 | 동시성 요구가 있을 때, 병렬 작업 처리 | 비동기 동작, 작은 단위의 순차적 처리 |
오류 격리 (Error Isolation)
독립적인 실행 환경을 가지는 프로세스에서 가능함 한 프로세스에서 발생한 오류가 다른 프로세스에 영향을 주지 않도록 설계 코루틴이나 쓰레드는 영향을 줌
오버헤드 (Overhead)
동작을 수행하기 위해 추가적으로 필요한 비용이나 작업
프로세스간 전환 시 메모리 저장 복원 등
오버헤드가 큰 경우 성능 저하
비동기적 동작 (Asynchronous Operation)
한 작업이 시작된 후 작업이 완료된 때가지 기다리지 않고 다른 작업 수행하는 방식
작업이 병렬로 처리되 작업의 완료 여부를 기다리지 않아도 되어 성능 향상이 가능함
반대로 동기적 동작은 한 직업외 완료된 때까지 다른 작업이 기다리는 것을 의미