본문 바로가기
IT

[유니티/VR 콘텐츠 제작] 8. 타임 라인을 이용한 튜토리얼 제작하기

by 배애앰이 좋아 2024. 2. 6.
반응형

 

목표 : 유니티 VR 콘텐츠 제작하는 방법에 대해 알아봅시다.

 

https://www.youtube.com/watch?v=pm9W7r9BGiA&list=PLpEoiloH-4eM-fykn_3_QcJ-A_MIJF5B9&index=3

영상을 기반으로 작성된 글입니다.

사용한 유니티 버전 : 2022.3.16f
사용한 VR 기기 : meta quest 3

 

 

1. 타임 라인을 이용한 튜토리얼 제작하기

 

먼저 영상에서 제공한 음성을 받아줍니다.

https://drive.google.com/file/d/1TFskpaX2SmWOqOu0exTii364TMxLB4UN/view

 

그 다음, package manager 에 들어가서 time line 이 설치되었는지 확인해줍니다.

 

아래와 같이 새로운 오브젝트를 생성한 후 아래 컴포넌트처럼 설정해줍니다.

 

window 에서 아래에서 time line 창을 열어줍니다.

 

그럼 하단과 같은 창이 생성되는 것을 확인할 수 있습니다.

 

위에서 받은 소리를 순서대로 넣어줍니다.

 

나레이션 순서에 따라 돌을 소환하기 위해 돌 오브젝트를 끌어다가 놓고 active 로 설정해줍니다.

 

이때, 타임라인 길이는 마우스 휠 키로 조정 가능합니다

딱 돌이 나타났으면 하는 위치에 조정해줍니다.

 

영상에서는 작은 돌, 큰 돌을 아래와 같이 설정해주었습니다.

그 다음은 오른쪽 마우스 키를 눌려 singal track을 선택해줍니다. 

 

그럼 아래처럼 생기는데 라인에 오른쪽 키를 누르고 해당 부분을 선택하면 특정 이벤트를 설정할 수 있습니다.

 

생기는 키를 누르면 오른쪽처럼 뜨고 해당 부분에서 crate를 눌려서 이벤트를 생성해줍니다.

 

문이 열리는 이벤트를 받기 위해 이름을 door UnLock 으로 생성해주었으면 아래 메세지를 보면 현재 오브젝트가 할당 안된 것을 볼 수 있습니다.

 

door UnLock 에 해당되는 버튼을 눌렸을 때 이벤트를 받기 위해 버튼 오브젝트에 아래와 같은 컴포넌트를 추가하고 설정해준 후 아까 빈 타임라인에 넣어줍니다.

 

따로 이벤트를 넣어줬기 때문에 기존 이벤트는 해제해주고 다음과 같이 설정해줍니다.

 

그 다음은 블랙홀 애니메이션 실행 영상을 틀어주기 위해 녹화를 해줍니다. vortex를 타임라인에 끌어다가 놓고 animation을 선택해줍니다 그러면 아래와 같이 생기는데 이때 빨간 버튼을 눌려 녹화할 수 있습니다.

 

녹화 버튼을 누르고 난 후, 해당 오브젝트의 상태를 바꿔주면 그에 대한 표시가 생기는 것을 확인할 수 있습니다. 영상에서는 Scale 를 0에서 8로 바꿔주었습니다.

 

원하는 상태를 추가했다면 오른쪽 마우스 키를 눌려 convert to clip 눌려줍니다.

 

그럼 아래와 같이 영상이 만들어진 것을 확인할 수 있습니다. 

 

추가적으로 돌이 테이블에 놓여있는 것보다 위에서 떨어지게 하고 싶음으로 

쓰레기통을 복사해서 배출구를 위에 만들어주고 돌을 안으로 넣어줍니다.

 

여기까지 한 후 테스트를 하면 시간에 따른 안내 음성이 나오는 것을 확인할 수 있으나 사용자가 해당 동작을 수행했는지 따로 확인없이 흘러갑니다. 이를 방지하고 사용자가 특정 행동을 했을 때, 다음 스텝으로 넘어갈 수 있게 바꿔봅시다. 

 

이제 본격적인 타임 라인에 따른 튜토리얼을 만들기 위해 아래와 같이 singal track 을 생성해서 narrtion story 을 다음과 같이 설정해줍니다.

 

이때 새롭게 stop timeLine 을 생성해서 넣어줍니다.

 

각 분기별로 이벤트를 설정해줍니다. (돌을 쓰레기 통에 버리는 거, 레이저 총으로 돌을 부수는 거, 부순 돌에서 나온 에너지 돌을 소켓과 상호작용하는 거, 조종석에 가는 거, 조종해서 블랙홀 근처에 가는 거)

 

새롭게 스크립트를 생성해줍니다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Playables;

public class PlaySteps : MonoBehaviour
{
    PlayableDirector director;
    public List<Step> steps;

    // Start is called before the first frame update
    void Start()
    {
        director = GetComponent<PlayableDirector>();
    }

    [System.Serializable] // 인스펙터 창에 보이게 만들어 줌
    public class Step
    {
        public string name;
        public float time;
        public bool hasPlayed = false;
    }

    public void PlayStepIndex(int index){
        Step step = steps[index];
        if(!step.hasPlayed){
            step.hasPlayed = true;
            director.Stop();
            director.time = step.time;
            director.Play();
        }
    }
}

 

 narrtion story에 해당 스크립트를 붙여준 후 이벤트에 대해 정의 해줍니다.

 

아래서부터는 각 이벤트에 맞게 사용자가 특정 행동을 했는지 확인하고 그 특정 행동을 했다면 다음 스텝으로 넘어갈 수 있게 했다고 알려줄 수 있도록 설정해줍니다. 

1번째 "돌을 쓰레기 통에 버리는 거" 에 대한 설정을 아래와 같이 해줍니다.

 

2번째 " 레이저 총으로 돌을 부수는 거"에 대한 설정은 기존에 작성했던 스크립트를 수정해줍니다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;

public class Breakable : MonoBehaviour
{
    public List<GameObject> breakablePieces;
    public float timeToBreak = 2;
    public float timer = 0;
    public UnityEvent OnBreak;

    // Start is called before the first frame update
    void Start()
    {
        foreach(var item in breakablePieces){
            item.SetActive(false);
        }
    }

    public void Break(){
        timer += Time.deltaTime;
        if(timer > timeToBreak){
            foreach(var item in breakablePieces){
                item.SetActive(true);
                item.transform.parent = null;
            }
            OnBreak.Invoke();
            gameObject.SetActive(false);
        }
    }
}

 

스크립트 수정 후 컴포넌트를 아래와 같이 설정합니다.

 

3번째 " 부순 돌에서 나온 에너지 돌을 소켓과 상호작용하는 거 "에 대한 설정을 아래와 같이 해줍니다.

 

4번째 " 사용자가 조종석에 가는 거 "에 대해 감지하기 위해 아래와 같이 사용자 객체의 태그를 바꿔줍니다.

 

그리고 난 후, 조종석에 trigger 큐브를 만들어서 아래와 같이 설정해줍니다.

 

5번째 " 사용자가 조종해서 블랙홀 근처에 가는 거 "에 대해 감지하기 위해 위와 비슷하게 블랙홀 근처에 감지하는 큐브를 만들어서 다음과 같이 설정해줍니다.

 

설정이 다 끝났습니다!

이제 테스트하면 안내 음성이 나오고 멈췄다가 사용자가 특정 행동을 하면 다음 안내음성이 나오는 것을 확인할 수 있습니다. 

반응형

댓글