UNITY : CUT SCENE

Alpha, Orderly·2023년 7월 16일
0

UNITY

목록 보기
2/3

Quick Look

Timeline

  • 애니메이션 트랙

Cinemachine

  • 카메라

빠르게 기본 물체 생성하기

GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
큐브를 생성하고 저장.

카메라가 플레이어를 향하도록 조정하기

transform.LookAt(_player.transform);
  • transform.LookAt

메쉬 렌더러 머티리얼 색상 지정

gameObject.GetComponent<MeshRenderer>().material.SetColor("_TintColor", Color.red);

Awake 함수

  • Awake는 스크립트와 연결된 개체(GameObject)가 인스턴스화 되거나, 스크립트가 처음 로드 될 때 호출 된다.
  • 게임 오브젝트 자체가 게임에 나오자 마자 실행된다!

컷신 스킵 기능

  • 컷신을 종료 직전 시간으로 설정하면 된다.
  • PlayableDirector 를 가져와서 time 프로퍼티를 끝부분으로 설정한다.

UI 선택

  • Raycast Target 설정이 있으면 클릭이 가능하다.

로딩화면

로딩 바

  • Image Type을 Filled 로 한 뒤 Fill Amount 를 설정해 로딩 정도를 설정가능하다.

로딩 정도 가져오기

IEnumerator LoadScene()
    {
        yield return null;

        // 지정한 화면 로딩 시작
        AsyncOperation asyncOperation = SceneManager.LoadSceneAsync("Scene3");
        // 바로 로딩 되지 않도록 설정함
        asyncOperation.allowSceneActivation = false;
        Debug.Log("Pro :" + asyncOperation.progress);
        // 로딩이 끝날때까지 아래 코드 실행
        while (!asyncOperation.isDone)
        {
            // asyncOperation.progress 를 통ㅇ해 현재 진행 상태를 확인한다.
            m_Text.text = "Loading progress: " + (asyncOperation.progress * 100) + "%";

            // Check if the load has finished
            if (asyncOperation.progress >= 0.9f)
            {
                // 씬이 준비되었음을 알리는것
                m_Text.text = "Press the space bar to continue";
                // 스페이스바를 눌러 씬 활성화
                if (Input.GetKeyDown(KeyCode.Space))
                    // 로딩이 끝나면 바로 씬 로딩하도록 설정
                    asyncOperation.allowSceneActivation = true;
            }

            yield return null;
        }
    }

텍스쳐 입히기

Shader

  • Shader 부분의 Albedo 왼쪽의 작은 구를 선택하면 텍스쳐를 입힐수 있다.

투명 텍스쳐

  • Material 생성
  • Shader를 UI/Unit/Transparent 로 설정
  • Tint를 통해 색을 설정하면 된다.

서브메쉬

  • 하나의 오브젝트는 여러개의 서브메쉬로 이루어질수 있다.
  • 각각의 서브메쉬에 머티리얼/텍스쳐를 입힐수 있다.

3개의 서브메쉬로 이루어진 오브젝트의 예시


오클루젼 맵

  • 가짜 그림자를 만들수 있게 해준다.
  • 검은색 : 주변광을 받지 않음, 하얀색 : 주변광을 받음
  • 검은색은 어두워지고, 흰색은 밝아짐


빛나는 물체 만들기

  • 머티리얼의 Emission 을 지정한다.

라이트 매핑

  • 빛의 정보를 텍스쳐 형태로 저장하는 기법
  • 실시간 혹은 계산 이후 확인 가능하다.

Light probe group

  • 빛을 내는 오브젝트들을 여러개 설정할수 있다.
  • 이후 Light 컴포넌트를 추가해 빛이 나게 할수 있다.

스카이박스

  • Skybox/6-sided 머티리얼을 만든다.

  • Window > Rendering > Lighting setting 에서 적용한다.


Reflection Probe

  • 해당 오브젝트를 배치하여 구역 내에 주변 static오브젝트들을 캡처하여 큐브 맵 데이터로 활용하는 기능.

컷신 만들기

  • 게임 내 에셋은 숨기고 컷신의 에셋을 드러낸다.

시네머신

  • 가상 카메라를 만들수 있다.
  • Cinemachine > Create Virtual Camera
    • 오브젝트로 CM vcam1 이 생긴다.

카메라가 보는 방향을 설정하기

  • GameObject > AlignWithView
    • Ctrl + Shift + F 로도 가능하다.
  • Lookat / Follow 를 통해 카메라가 특정 오브젝트를 따라가게 할수도 있다.

Aim Setting

  • 카메라가 따라가는 물체가 데드존에 있으면 회전하지 않는다.
  • 카메라가 따라가는 물체가 소프트존에 있으면 물체가 화면의 조준점에 오도록 회전한다.
  • 카메라가 주시하는 물체는 소프트존을 벗어나지 않는다.

카메라 우선순위

  • 각각의 카메라는 우선순위 ( Priority ) 를 가지며, 우선순위가 높은것이 우선시 된다.

컷신 게임 오브젝트

  • Actors : 컷신에 등장하는 오브젝트들
  • CM Virtual Cameras : 컷신에 사용되는 가상 카메라
  • 위들로 구성된 빈 게임오브젝트를 만든다.
Add 버튼

  • 이 버튼 누르라는 말임

타임라인

  • Window > Timeline
    • 타임라인 창이 나타난다.
  • CM Virtual Cameras 를 선택하고 타임라인의 Create를 누른다.
  • CM Virtual Cameras에 Playable Director 가 생긴다.C
  • Add > Cinemachine Timeline > Timeline Track 을 누르면 Cinemachine brain 을 넣을수 있다.
    • 여기에 메인 카메라를 드래그/드롭 한다.

샷 추가하기

  • 타임라인 우클릭 > Add Cinemachine Shot
  • Inspector를 통해 각각의 Shot이 사용하는 카메라를 정할수 있다.
  • 두 샷을 겹치면 일종의 카메라 무브가 생긴다.
    • 두 샷의 카메라가 자연스럽게 이동한다.

액터 애니메이션 실행하기

  • Add > Animation Track
  • Actors 를 트랙에 드래그-드롭
  • 타임라인 우클릭 후 Add Animation clip

카메라 패닝

  • 피사체의 움직임을 따라가며 찍는것
  • 애니메이션 트랙 추가 > 특정 카메라를 애니메이션 트랙에 추가
  • 녹화 버튼을 누르고 키프레임을 녹화

LookAt 사용하기

  • 특정 위치에 위치한 Empty GameObject 를 LookAt으로 설정하여 따라가도록 설정할수 있다!
  • Lookat 설정시 카메라에 대상이 노란색 점으로 표기된다.

애니메이션 세부설정


애니메이터 하단의 Curves 를 선택해 설정 가능하다.

애니메이션과 게임오브젝트 연동

  • Activation Track 을 추가한다.
  • 위 트랙에 사라져야 하는 오브젝트를 추가한다.
  • Active 라고 적혀있는 부분에서는 오브젝트가 존재하나, 이 외에는 사라지게 된다.

카메라 페이드 인/아웃

  • UI 이미지를 전체화면으로 두고 알파값을 조절해 구현할수 있다.

Dolly Track

  • 카메라가 이동할 경로를 설정하는것
  • Cinemachine > Create Dolly Track
  • 웨이포인트를 설정해 경로를 정한다.
  • 웨이포인트의 위치를 정하는 점과 각도를 정하는 점이 따로 있다.
  • 가상 카메라의 Body를 Tracked Dolly 로 변경후 설정한다.
  • 애니메이션 트랙을 추가하고 카메라를 추가한다.
  • 녹화버튼을 누르고 Path Position 을 변경해 키포인트를 생성한다.

컷신에 오디오 추가하기

  • 개별 컷신에 빈 게임 오브젝트로 Audio 를 추가한다.
  • 타임라인에 오디오트랙 추가 및 Clip을 타임라인에 드래그-드롭 한다.

클릭시 움직이는 플레이어 움직임

  • Window > AI > Navigation
  • 바닥 지점을 누르고 Bake > Bake 누르기
  • 지정된 바닥으로만 이동할수 있다.

플레이어 지정

  • 플레이어 게임 오브젝트에 Nav Mesh Agent 컴포넌트 를 추가한다.

포인트 & 클릭

  • Nev Mesh Agent 컴포넌트를 사용해 스크립트를 구현한다.
  • 마우스가 클릭한 지점에 이동하게 할 것인데, 이를 구현하기 위해 마우스에서 레이저가 발사되는것을 가정한다.
  • 마우스가 발사한 레이저가 우리가 지정한 바닥에 닿으면 플레이어를 그곳에 이동시킨다.
  • Nev Mesh Agent 를 스크립트에서 가져온 뒤 사용한다.
  • 장애물들을 통과한다면, 장애물들을 static game object로 변환후 Navigation을 다시 bake 한다.
    NavMeshAgent _navMeshAgent;

    void Start()
    {
        _navMeshAgent = GetComponent<NavMeshAgent>();
        if(_navMeshAgent == null)
        {
            Debug.Log("Nav mesh is NULL");
        }
        
        // Nav Mesh Agent 컴포넌트를 가져온다.
    }

    // Update is called once per frame
    void Update()
    {
        if(Input.GetMouseButtonDown(0))
        // 좌클릭 시
        {
            Ray rayOrigin = Camera.main.ScreenPointToRay(Input.mousePosition);
            // 메인카메라를 기준으로 마우스의 위치에 Ray 를 쏘겠다는 의미.
            RaycastHit hitInfo;
            // 충돌 정보를 가져올 변수
            if(Physics.Raycast(rayOrigin, out hitInfo))
            // 충돌시 if 아래 코드를 실행한다.
            {
                _navMeshAgent.SetDestination(hitInfo.point);
                // nav mesh를 이용해 플레이어를 지정한 바닥 지점으로 이동시킨다.
            }
        }
    }

profile
만능 컴덕후 겸 번지 팬

2개의 댓글

comment-user-thumbnail
2023년 7월 16일

잘봤습니다.

답글 달기
comment-user-thumbnail
2023년 7월 17일

저도 개발자인데 같이 교류 많이 해봐요 ㅎㅎ! 서로 화이팅합시다!

답글 달기