๐ฆ ํฌํค VR, Voice
ํฌํค์ ์ค๋๋ง์ ์ฌ์ฉํ๋ ค๋ ์ฌ์ฉ๋ฒ์ ์๊ธฐ๋ํ๊ณ ๋ณํ ๊ฒ๋ค๋ ์์๋ค.
XR Toolkit๊ณผ ํจ๊ป ํฌํค์ ์ฌ์ฉํ๋ ๋ฒ๊ณผ ์ ๋ฐ์ดํธ๋ ํฌํค ๋ณด์ด์ค ์ฌ์ฉ๋ฒ(์์ ๋ธ๋ก๊น ํ ๋ฐฉ๋ฒ๊ณผ ๋ฌ๋ผ์ง)์ ์ ๋ฆฌํด๋ณด์๋ค.
(Photon ๊ธฐ๋ณธ์ธํ ์ ๋ง์ณค๋ค๋ ๊ฐ์ ํ์ ์์ฑํจ)
- Document
๐ง VR Setting
- XR Origin ์ค๋ธ์ ํธ ์์ฑ
- ์บ๋ฆญํฐ๋ก ์ธ ์ค๋ธ์ ํธ ์์ฑ : VRPlayer
- PhotonView ์ปดํฌ๋ํธ ์ถ๊ฐ
- ์ ์คํฌ๋ฆฝํธ ์ถ๊ฐ : VRPlayer
- ๋น ์ค๋ธ์ ํธ ์์ฑ : Head, LeftHand, RightHand
- Head, LeftHand, RightHand์ PhotonTransformView ์ปดํฌ๋ํธ ์ถ๊ฐ
- Custom Left Hand Model, Custom Right Hand Model์ PhotonAnimatorView ์ปดํฌ๋ํธ ์ถ๊ฐ
- Resources ํด๋๋ก ํ๋ฆฌํนํ
- VRPlayer ํ์ด์ด๋ผํค์์ ์ ๊ฑฐ
- Head : ์บ๋ฆญํฐ ๋จธ๋ฆฌ. XR Origin์ ๋ฉ์ธ์นด๋ฉ๋ผ์ Transform๊ณผ ๋๊ธฐํ์ํฌ ์ค๋ธ์ ํธ.
- LeftHand, RightHand : ๊ฐ ์ปจํธ๋กค๋ฌ์ Transform๊ณผ ๋๊ธฐํ์ํฌ ์ค๋ธ์ ํธ
- ํ์์ ๋ชจ๋ธ์ ๋ฃ์ด์ฃผ์๋ค.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Photon.Pun;
using UnityEngine.XR;
using UnityEngine.XR.Interaction.Toolkit;
public class VRPlayer : MonoBehaviour
{
[SerializeField] private PhotonView m_PhotonView;
[SerializeField] private Transform m_Head;
[SerializeField] private Transform m_LeftHand;
[SerializeField] private Transform m_RightHand;
[SerializeField] private Animator m_LeftHandAnimator;
[SerializeField] private Animator m_RightHandAnimator;
private Transform m_Camera;
private Transform m_LeftHandController;
private Transform m_RightHandController;
public void Start()
{
if (m_PhotonView.IsMine)
{
m_Camera = Camera.main.transform;
m_LeftHandController = GameManager.instance.m_LeftController.transform;
m_RightHandController = GameManager.instance.m_RightController.transform;
m_Head.gameObject.SetActive(false);
}
}
private void Update()
{
if (m_PhotonView.IsMine)
{
MapPosition(m_Head, m_Camera);
MapPosition(m_LeftHand, m_LeftHandController);
MapPosition(m_RightHand, m_RightHandController);
UpdateHandAnimation(InputDevices.GetDeviceAtXRNode(XRNode.LeftHand), m_LeftHandAnimator);
UpdateHandAnimation(InputDevices.GetDeviceAtXRNode(XRNode.RightHand), m_RightHandAnimator);
}
}
void UpdateHandAnimation(InputDevice targetDevice, Animator handAnimator)
{
if (targetDevice.TryGetFeatureValue(CommonUsages.trigger, out float triggerValue))
{
handAnimator.SetFloat("Trigger", triggerValue);
}
else
{
handAnimator.SetFloat("Trigger", 0);
}
if (targetDevice.TryGetFeatureValue(CommonUsages.grip, out float gripValue))
{
handAnimator.SetFloat("Grip", gripValue);
}
else
{
handAnimator.SetFloat("Grip", 0);
}
}
private void MapPosition(Transform target, Transform rigTransform)
{
target.position = rigTransform.position;
target.rotation = rigTransform.rotation;
}
}
- ์คํฌ๋ฆฝํธ ์์ฑ
- Head๋ชจ๋ธ์ ์นด๋ฉ๋ผ์ ๋ถ์ผ๋ฉด ์์ผ๊ฐ ๊ฐ๋ ค์ง๊ธฐ ๋๋ฌธ์ ๋นํ์ฑ์ํจ๋ค.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Photon.Pun;
using UnityEngine.XR.Interaction.Toolkit;
public class GameManager : MonoBehaviourPunCallbacks
{
public static GameManager instance = null;
public Transform XROrigin;
[SerializeField] private Transform[] m_SpawnPoints;
public XRController m_LeftController;
public XRController m_RightController;
private GameObject m_Player;
private void Awake()
{
if (instance == null)
{
instance = this;
}
}
private void Start()
{
Vector3 pos = m_SpawnPoints[PhotonNetwork.CurrentRoom.PlayerCount].position;
Quaternion rot = m_SpawnPoints[PhotonNetwork.CurrentRoom.PlayerCount].rotation;
m_Player = PhotonNetwork.Instantiate("VRPlayer", pos, rot, 0);
XROrigin.transform.position = pos;
XROrigin.transform.rotation = rot;
}
public override void OnLeftRoom()
{
base.OnLeftRoom();
PhotonNetwork.Destroy(m_Player);
}
}
- ์ ์คํฌ๋ฆฝํธ ์์ฑ ํ ํ์ด์ด๋ผํค์ ์ถ๊ฐ : GameManager
- ์ธ์คํํฐ ์ฐ๊ฒฐ
- ๋ก๋น์ฌ์์ ๋ฃธ์ ์ ์ฅํ๊ณ ๋ ํ ํด๋น ์ฌ์ผ๋ก ์ด๋ํ๋๋ก ์ฒ๋ฆฌํด๋จ๊ธฐ ๋๋ฌธ์ OnPlayerEnteredRoom ๋ฉ์๋๊ฐ ์๋ Start ๋ฉ์๋์์ ์บ๋ฆญํฐ๋ฅผ ์์ฑํ๋ค.
- ์ฃผ์์ : ์์ฑํ ์บ๋ฆญํฐ ํ๋ฆฌํน์ XROrigin์ ๋ฃ์ผ๋ฉด ์๋๋ค. XROrigin์ ์ฌ์ ํ๋๋ง ์์ด์ผํ๋ค.
- ์คํฐ ํฌ์ธํธ๋ ํ๋ ์ด์ด๋ฅผ ์ํ๋ ์์น๋ก ์ง์ ํ๊ธฐ ์ํด์ ์ฌ์ฉํ ๋ณ์์ด๋ฏ๋ก ํ์๋ ์๋
๐ง Photon Voice Setting
- photon voice ํจํค์ง ๋ค์ด๋ก๋
- Window > Photon Unity Networking > Highlight Server Settings
- photon ํํ์ด์ง์์ voice ํ๋ก์ ํธ ์์ฑ ํ App Id Voice ์ ๋ ฅ
- ๋น ๊ฒ์์ค๋ธ์ ํธ ์์ฑ ํ ์ปดํฌ๋ํธ ์ถ๊ฐ : VoiceLogger
- ๋น ๊ฒ์ ์ค๋ธ์ ํธ ์์ฑ : VoiceManager
- ์ปดํฌ๋ํธ ์ถ๊ฐ : PunVoiceClient, Recorder
- VRPlayer ํ๋ฆฌํน์ ์ปดํฌ๋ํธ ์ถ๊ฐ : PhtonVoiceView, Speaker, AudioSource
'Unity > Photon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
09. Photon - ์ค์ต 1 (7) Room List (6) | 2021.08.25 |
---|---|
08. Photon - ์ค์ต 1 (6) Photon Nickname (0) | 2021.08.24 |
07. Photon - ์ค์ต 1 (5) Photon Voice (0) | 2021.08.23 |
06. Photon - ์ค์ต 1 (4) Lobby, Custom Property (0) | 2021.08.22 |
05. Photon - ์ค์ต 1 (3) Score (1) | 2021.08.18 |