ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 11장. 유니런 플레이어 제작
    Unity/레트로의 유니티 게임 프로그래밍 에센스 2020. 11. 15. 11:21

    <여러 이미지를 스프라이트 하나로 다루는 방법>

    <오디오 소스를 사용해 사운드를 재생하는 방법>

    <유한 상태 머신을 사용하여 어떤 애니메이션을 재생할지 결정하는 방법>

    <애니메이터와 애니메이터 컨트롤러>

    <이단 점프를 구현하고, 바닥을 감지하는 방법>

     

    11.1 유니티 2D 프로젝트 열기

        11.1.1 유니티 2D 프로젝트

            - 유니티 프로젝트 생성 이후 얼제든지 2D와 3D 사이에서 전환 가능

            - 2D 프로젝트의 주요 특징

                > 이미지 파일을 스프라이트 타입으로 임포트

               > 기본 생성 카메라가 직교(Orthographic) 모드를 사용

               > 라이팅 설정 중 일부가 비활성화

               > 씬 창이 2D 뷰로 보임

                > 2D 프로젝트의 2D 게임 오브젝트는 위치와 스케일 등을 Vector3로 저장. 원근감이 없으니 z값 무의미.

        11.1.2 Uni-Run 프로젝트 열기

    11.2 시작 지점 만들기

        11.2.1 시작 지점 발판

            - 스프라이트는 2D 그래픽과 UI를 그릴 때 사용하는 텍스처 에셋 (이미지 파일).

            - 하이어라키 창으로 드래그&드롭.

        11.2.2 데드존 만들기

    11.3 캐릭터 스프라이트 편집

        11.3.1 Multiple 스프라이트

            - 스프라이트 시트는 여러 이미지를 하나의 이미지로 합친것. 캐릭터가 연속적으로 움직이는 모습을 한 파일로 합쳐서 관리

            - 유니티 2D 프로젝트에서 기본적으로는 싱글 스프라이트 모드. 하나의 스프라이트 에셋 -> 하나의 스프라이트.

            - 시프라이트 시트를 여러개의 개별 스프라이트로 잘라서 사용하기 위해서는 멀티플 스프라이트 모드를 사용.

                스프라이트 시트 에셋 -> 여러개의 스프라이트

            - 인스펙터 창에서 Sprite Mode -> Multiple

    11.4 2D 캐릭터 게임 오브젝트 준비

        11.4.1 게임 오브젝트 준비하기

            - Discrete : 일정 시간 간격으로 끊어서 감지. -> 감지하는 타이밍이 어긋나면 'Bullet Through Paper'.

            - Continuous : 움직이기 이전 위치와 움직인 다음 위치사이에서 예상되는 충돌까지 함께 감지.

            - Circle Collider 2D를 사용하면 각진 모서리에서 부드럽게 충돌가능.

        11.4.2 오디오 소스

            - 오디오 소스(audio source) 컴포넌트는 게임 오브젝트에 소리를 낼 수 있는 능력을 부여.

            - 오디오 클립에 오디오 파일 연결.

            - Play On Awake. 오디오 소스 컴포넌트가 활성화 되었을 때, 최초 1번만 오디오 자동 재생. 게임 시작과 동시에 오디오 소리가 무조건 재생.

            - 오디오 리스너. 플레이어에게 게임 속 소리를 들을 수 있는 능력을 부여.

            - 씬을 새로 생성하면 자동 추가되는 Main Camera 게임 오브젝트에는 오디오 리스너 컴포넌트가 추가됨.

    11.5 캐릭터 애니메이션 준비하기

        11.5.1 애니메이션 만들기

            - 애니메이션 창. Ctrl+6. 이후 애니메이션 클립 생성.

            - 애니메이션 창에서 타임라인으로 스프라이트 드래그&드롭. 'Samples' 조절.

        11.5.2 유한 상태 머신

        11.5.3 애니메이터 컨트롤러와 애니메이터

            - 프로젝트 창에서 Create > Animator > Controller. 첫 애니메이션 클립 생성하면 자동 생성.

        11.5.4 Player 애니메이터 컨트롤러의 상태

            - Entry : 현재 상태가 진입하는 '입구'. Entry와 연결된 상태가 기본 상태.

            - Exit : 상태 머신의 동작이 동작하는 '출구'. 현재 상태가 이곳으로 전이하면 애니메이터 동작은 완전히 종료. 완전히?? -> 유한 상태 머신 종료? 부동적인 오브젝트로 되나?

            - Any State : 현재 상태가 무엇이든 상관없이 특정 상태로 즉시 전이하게 허용하는 상태. 모든 상태? 피격이나 사망 애니메이션 같은 경우..

        11.5.5 전이 구성하기

            - 설정 : 마우스 오른쪽 클릭 > Make Transition

            - 삭제 : 전이 화살표 클릭 > Delete 키.

            - 파라미터 추가 : 애니메이터 창 > Parameters

            - 파라미터 float, int, bool, trigger. trigger는 셋하는 순간 즉시 true가 되고 곧바로 false가 됨.

            - 전이 구성. 전이 화살표 클릭 > 인스펙터 창에서 Conditions에서 파라미터 추가.

            - Has Exit Time : 해당 전이가 즉시 일어나지 않고. 일정 시간(Exit Time)이 지난 후에 전이가 일어남. Exit Time이 0.5라면 현재 상태의 애니메이션이 0.5는 진행되어야 다음 상태로 (조건 만족 시) 전이.

            - Transition Duration : 현재 애니메이션 클립과 다음 애니메이션 클립을 섞어서(블렌딩) 부드럽게 이어주는 역할.

                => 2D 스프라이트를 사용하는 애니메이션 클립에서는 블렌딩이 정상적으로 동작하지 않고, 전이 시점만 지연됨. -> 3D 애니메이션 클립과 달리 중간 위치를 계산할 '관절'이 존재하지 않기 때문.

            - Fixed Duration : 체크되면 Trasition Duration값 단위를 초(second)로 해석, 체크가 되어 있지 않다면 분수 값으로 해석 0.5 -> 50%.

     

    11.6 PlayerController 스크립트

        11.6.1 PlayerController의 변수

        11.6.2 Start() 메서드

        11.6.3 Update() 메서드

            - Input.GetMouseButtonDown(). 0:마우스 왼쪽 버튼, 1:마우스 오른쪽 버튼, 2:마우스 휠 스크롤 버튼.

            - Input.GetMouseButton(), Input.GetMouseButtonUp(). 누르고 있는 동안, 손을 떼는 순간.

        11.6.4 Die() 메서드

        11.6.5 OnTriggerEnter2D() 메서드

        11.6.6 OnCollisionEnter2D()와 OnCollisionExit2D()

            - OnCollisionEnter2D() : 일반 충돌이 시작되는 순간 실행

            - OnCollisionExit2D() : 충돌한 두 콜라이더가 서로 떨어지는 순간 실행.

            - contacts : ContactPoint 타입의 배열 변수. contacts 배열의 길이는 충돌 지점의 개수.

        11.6.7 PlayerController의 전체 코드

        11.6.8 PlayerController 컴포넌트 설정하기

    11.7 마치며

        - Multiple 모드를 사용하면 하나의 스프라이트를 여러 스트라이트로 잘라 사용할 수 있다.

        - 오디오 소스 컴포넌트는 소리를 재생.

        - 오디오 클립은 재생할 오디오 파일(에셋)

        - 오디오 소스 컴포넌트는 재생할 오디오 클립을 할당해야 소리를 재생할 수 있음.

        - 오디오 소스 컴포넌트가 재생하는 소리는 오디오 리스너 컴포넌트가 들음.

        - 애니메이터 컨트롤러는 유한 상태 머신(FSM)으로 재생할 애니메이션을 결정하는 에셋.

        - 유한 상태 머신은 유한한 개수의 상태 중 한 번에 하나만 현재 상태가 될 수 있지만, 상태와 상태 사이를 전이를 통해 이동할 수 있는 설계 모델.

        - 애니메이터 컴포넌트는 애니메이터 컨트롤러를 사용하여 애니메이션을 재생하는 컴포넌트

        - 애니메이터 창에서 애니메이터가 사용 중인 애니메이터 컨트롤러의 상태도를 편집.

        - 애니메이터 창에서 파라미터를 추가하여 전이의 조건으로 사용할 수 있음.

        - 애니메이터에서 트리거 타입의 파라미터에는 값을 할당하지 않음. 트리거 타입의 파라미터는 트리거를 발동시키는 방식으로 사용.

        - 애니메이터 컴포넌트의 Set 계열 메서드로 파라미터에 새로운 값을 할당할 수 있음.

        - 2D 콜라이더에 대한 충돌 이벤트 메서드는 OnTriggerEnter2D() 같은 2D 버전을 사용해야 함.

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    댓글

Designed by Tistory.