목표 : 유니티 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. 컨트롤러 상호작용 효과음 추가
참고로 해당 영상에서 쓴 오디오 파일은 제공되지 않아 알아서 찾아서 써야합니다.
상호 작용했을 때 효과음 나면 좋겠는 오브젝트 하위에 새로운 오브젝트를 생성한 후 아래와 같이 컴포넌트를 설정해줍니다. 하지만 아래를 보면 theme 항목과 interactable source 항목이 빈 것을 볼 수 있습니다.
그 다음, 에셋에서 create > affordance theme > audio affordance theme 를 생성해줍니다.
저희는 특정 물건을 선택했을 때, 효과음이 나길 원하기에 grab audio theme 이라 이름을 붙여주고 selected 할 때 특정 소리가 나도록 넣어줍니다.
그러고 난 후, 다시 돌아가서 아까 비었던 부분에 생성한 theme 을 넣어줍니다.
그 다음, 비어있는 interactable source 항목을 채우기 위해 일일이 넣어주기는 보다 다른 오브젝트에도 편히 사용할 수 있도록 스크립트를 통해 자동으로 부모객체에서 찾아오게 만들어 봅시다.
새로운 스크립트를 아래와 같이 생성해줍니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR.Interaction.Toolkit;
using UnityEngine.XR.Interaction.Toolkit.AffordanceSystem.State;
public class AutoFindingInteractableAffordance : MonoBehaviour
{
// Start is called before the first frame update
void Awake()
{
GetComponent<XRInteractableAffordanceStateProvider>().interactableSource = GetComponentInParent<XRBaseInteractable>();
}
}
그리고 아래와 같이 붙여준 후 실행하면,
자동으로 잘 찾아오는 것을 확인할 수 있습니다.
이제 해당 객체를 프리팹으로 만들어서 상호작용 객체 하위에 넣어주면 됩니다.
추가적인 팁으로는 아래와 같이 설정하면 현재 프리팹에서 추가된 설정이 기본 설정이 될 수 있도록 바꿔 줄 수 있습니다.
2. AudioManager 세팅하기
그 다음으로 컨트롤러와 상호작용하는 물체 외 효과음(문 열리는, 엔진) 등을 편하게 넣기 위해
audio manager 라는 오브젝트를 만든 후 audio manager 라는 스크립트를 붙여줍니다.
audio manager 는 기존에 import 한 환경 에셋에서 제공하는 스크립트입니다.
만약 해당 에셋을 안 쓸 경우, 아래처럼 스크립트를 직접 생성해서 붙여줍니다.
using UnityEngine.Audio;
using System;
using UnityEngine;
//Credit to Brackeys youtube tutorial on Audio managers, as the majority of this code and learning how to use it was made by him.
[System.Serializable]
public class Sound
{
public string name;
public AudioClip clip;
[Range(0, 1)]
public float volume = 1;
[Range(-3, 3)]
public float pitch = 1;
public bool loop = false;
public bool playOnAwake = false;
public AudioSource source;
public Sound()
{
volume = 1;
pitch = 1;
loop = false;
}
}
public class AudioManager : MonoBehaviour
{
public Sound[] sounds;
public static AudioManager instance;
//AudioManager
void Awake()
{
instance = this;
foreach (Sound s in sounds)
{
if (!s.source)
s.source = gameObject.AddComponent<AudioSource>();
s.source.clip = s.clip;
s.source.playOnAwake = s.playOnAwake;
if (s.playOnAwake)
s.source.Play();
s.source.volume = s.volume;
s.source.pitch = s.pitch;
s.source.loop = s.loop;
}
}
public void Play(string name)
{
Sound s = Array.Find(sounds, sound => sound.name == name);
if (s == null)
{
Debug.LogWarning("Sound: " + name + " not found");
return;
}
s.source.Play();
}
public void Stop(string name)
{
Sound s = Array.Find(sounds, sound => sound.name == name);
s.source.Stop();
}
}
소리가 날 장소에 대해 각각 audio source 를 붙여주고 3d 로 설정해줍니다.
그 다음 아까 audio manager 에서 + 를 눌려서 소리를 아래와 같이 추가해줍니다.
해당 스크립트는 싱글톤으로 되어있어 어디서든 제어가 가능합니다.
고로 모든 음악에 대해 아래처럼 추가해줍니다.
이제 위에서 넣은 음악을 실행시키고 멈추기 위해서는 아래와 같이 AudioManager.instance.play / stop 으로 제어 가능한 것을 볼 수 있습니다.
위에서는 총을 아래서는 문을 타이밍에 맞게 설정해줍니다.
엔진 관련된 소리 제어 코드입니다.
이후에 테스트해보면, 상황에 맞게 효과음 소리가 잘 나오는 것을 확인할 수 있습니다.
'IT' 카테고리의 다른 글
[유니티/MR] 오브젝트 생성 및 물건 배치, 물리 작용 (0) | 2024.02.14 |
---|---|
[유니티/VR 콘텐츠 제작] 11. 최적화 및 빌드 (0) | 2024.02.06 |
[유니티/VR 콘텐츠 제작] 9. 게임 시작 화면 만들기 (1) | 2024.02.06 |
[유니티/VR 콘텐츠 제작] 8. 타임 라인을 이용한 튜토리얼 제작하기 (0) | 2024.02.06 |
[유니티/VR 콘텐츠 제작] 7. 사용자가 잡고 올라갈 수 있는 사다리 설치 + 핸들, 조종석 상호작용 만들기 (0) | 2024.02.06 |
댓글