Unity 5

킴스코딩클럽·2023년 5월 24일
1

유니티

목록 보기
5/6

Sprite

  • unity에서 2D 그래픽에서 사용되는 이미지 이미지와 속성을 저장

  • sprite 생성 방법 : gameobject에서 sprite renderer 컴포넌트 추가하기 or 2D object 사용

  • SpriteRenderer

    sprite를 실제로 화면에 그리는 것 색상 정렬등을 설정

  • layer

    오브젝트 랜더링 순서 제어 낮은 순서부터 그려짐
    sortingLayerName : 오브젝트가 속한 레이어 이름
    sortingOrder : 순서 결정
    커스터마이징 가능(add sorting layers)

Material

  • 오브젝트 표면의 외관이나 재질의 느낌을 결정
  • 게임 오브젝트에 새로운 재질을 추가
  • 이미지나 그래픽 등의 텍스처를 재질에 적용
  • 재질의 다양한 매개 변수를 조정(색, 반사율, 투명도)
  • shader :shader program을 이용해 랜더링 방식을 제어
  • changeMaterial

    게임 오브젝트에 접근하는 스크립트(오브젝트를 참조)
    게임 오브젝트의 renderer 컴포넌트를 통해 재질을 찾고 변경

void Update()
    {
        _laptime += Time.deltaTime;

        if (_laptime > 2.0f)
        {
            if (_isOn)
            {
                ChangeMaterial(false);
            }
            else
            {
                ChangeMaterial(true);
            }
            _laptime = 0.0f;
        }
    }

Coroutine

  • 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 scale

    Time.timeScale
    유니티 안에서 시간 조절 (실제 시간과 다를 수 있음)
    동영상 배속 조절과 비슷한 개념

Thread vs Coroutine vs Process

  • Process

    독립적 실행 단위로 각자 메모리 공간을 가짐
    독립적인 프로그램 실행이나 오류 격리가 필요할 때

  • Thread

    운영체제 수준에서 동작
    프로세스 안에서 별도의 실행 흐름 단위, 프로세스 메모리를 공유해 동시성 제공

    별도의 실행 흐름을 가지기 때문에 메모리와 스택 사용량이 필요해 오버헤드 고려해야함
    동시 작업 병렬 처리가 필요한 프로그램

  • Coroutine

    단일 스레드 안에서 순차적, 비동기적 동작 구현 일시 중단과 재개가 가능함
    실행 흐름이 여러단계로 분할
    스택이나 메모리 할당이 필요없어 메모리 사용이 적음

프로세스스레드코루틴
정의실행 중인 프로그램 단위프로세스 내에서 실행되는 실행 흐름 단위함수의 실행을 일시 중단하고 재개하는 함수
동작 원리독립적인 메모리 공간을 가짐프로세스의 메모리 공간을 공유단일 스레드 내에서 동작
병행성동시에 여러 프로세스 실행 가능동시에 여러 스레드 실행 가능직렬적인 병행성 제공
리소스 사용메모리, 파일 핸들, 디바이스 등을 독립적으로 소유프로세스 내 자원 공유로 메모리 사용량 감소추가 메모리 할당 없이 동작 가능
동기/비동기동기적 또는 비동기적 동작 가능동기적 또는 비동기적 동작 가능비동기적 동작 구현 가능
오버헤드프로세스 간 컨텍스트 전환에 오버헤드 발생스레드 간 컨텍스트 전환에 일부 오버헤드 발생컨텍스트 전환에 거의 없는 경량 동작
에러 격리한 프로세스의 오류가 다른 프로세스에 영향 없음스레드 간 오류가 전체 프로세스에 영향 가능코루틴 간 오류가 다른 코루틴에 영향 가능
사용 예시독립적인 프로그램 실행, 프로세스 간 통신동시성 요구가 있을 때, 병렬 작업 처리비동기 동작, 작은 단위의 순차적 처리
  • 오류 격리 (Error Isolation)

    독립적인 실행 환경을 가지는 프로세스에서 가능함 한 프로세스에서 발생한 오류가 다른 프로세스에 영향을 주지 않도록 설계 코루틴이나 쓰레드는 영향을 줌

  • 오버헤드 (Overhead)

    동작을 수행하기 위해 추가적으로 필요한 비용이나 작업
    프로세스간 전환 시 메모리 저장 복원 등
    오버헤드가 큰 경우 성능 저하

  • 비동기적 동작 (Asynchronous Operation)

    한 작업이 시작된 후 작업이 완료된 때가지 기다리지 않고 다른 작업 수행하는 방식
    작업이 병렬로 처리되 작업의 완료 여부를 기다리지 않아도 되어 성능 향상이 가능함
    반대로 동기적 동작은 한 직업외 완료된 때까지 다른 작업이 기다리는 것을 의미

profile
공부 기록용

0개의 댓글