Meta Avatar SDK 버전이 29 넘게 나온거 알고 계시나요?
24버전과 29버전의 가장 큰 차이는 캐릭터의 비주얼 부분인데요.
좌측 사진이 Meta Avatar 1세대이고, 우측 사진이 Meta Avatar 2세대입니다.
좀 더 사실적인 느낌을 보여주고 있습니다.
Oculus 플랫폼 SDK를 비동기적으로 초기화
Core.AsyncInitialize()
Oculus 플랫폼을 초기화하는 것은 Oculus의 다양한 기능과 서비스에 접근할 수 있도록 하기 위함입니다. Oculus 서비스에는 사용자 인증, 스토어 접근, 소셜 기능, 클라우드 저장소 등이 있습니다.
사용자가 애플리케이션을 사용할 권한이 있는지 확인
Entitlements.IsUserEntitledToApplication()
정품 사용자만이 애플리케이션에 접근할 수 있도록 보장하며, 무단 사용을 방지합니다.
이러한 자격 확인은 애플리케이션의 보안과 라이선스 준수를 유지하는 데 필수적이기에 확인하셔야 합니다.
현재 로그인된 사용자의 정보를 얻는 방법
Users.GetLoggedInUser()
이 함수를 이용하여 user ID, Oculus ID, Display Name 등 사용자와 관련된 데이터를 가져올 수 있습니다.
이러한 정보를 사용하여 사용자 이름을 표시하거나, 친구 목록 조회, 멀티플레이어 매칭 등을 사용할 수 있습니다.
현재 사용자의 액세스 토큰을 가져오는 방법
Users.GetAccessToken()
현재 사용자의 액세스 토큰을 가져오는 데 사용됩니다. Access Token은 사용자 인증 및 권한 부여를 위해 필요하며, 특히 Meta 아바타 시스템과 같은 특정 서비스에 접근하는데 활용됩니다.
예를 들어, 아래에서 다시 언급할 내용이긴 한데, Meta 아바타 시스템에서는 OvrAvatarEntitlement.SetAccessToken 함수를 통해 Access Token을 설정하여 사용자 아바타에 대한 권한을 확인할 수 있습니다.
사용자가 자신의 아바타 데이터에 접근하는 방법
OvrAvatarEntitlement.SetAccessToken
Meta 아바타 시스템에서 사용자 인증을 설정하는 데 사용됩니다. Users.GetAccessToken()을 통해 획득한 액세스 토큰을 Meta 아바타 시스템에 전달하여, 사용자가 자신의 아바타 데이터에 접근하고 사용할 수 있도록 권한을 부여합니다.
전체코드(활용)
using Oculus.Avatar2;
using Oculus.Platform;
using Oculus.Platform.Models;
using Cysharp.Threading.Tasks;
using UnityEngine;
using UnityEngine.SceneManagement;
public class OculusApplication : MonoBehaviour
{
[SerializeField] private string lobbySceneName = "Lobby";
private ulong _userId;
private void Awake()
{
DontDestroyOnLoad(gameObject);
InitializeOculusPlatform();
}
private void InitializeOculusPlatform()
{
Core.AsyncInitialize().OnComplete(OnOculusPlatformInitialized);
}
private void OnOculusPlatformInitialized(Message<PlatformInitialize> message)
{
if (message.IsError)
{
Debug.LogError($"Failed to initialize Oculus Platform: {message.GetError().Message}");
return;
}
Debug.Log("Oculus Platform initialized successfully.");
Entitlements.IsUserEntitledToApplication().OnComplete(OnEntitlementChecked);
}
private void OnEntitlementChecked(Message message)
{
if (message.IsError)
{
Debug.LogError("User is not entitled to use this application.");
return;
}
Debug.Log("User is entitled to use this application.");
Users.GetLoggedInUser().OnComplete(OnLoggedInUser);
}
private void OnLoggedInUser(Message<User> message)
{
if (message.IsError)
{
Debug.LogError($"Failed to retrieve logged-in user: {message.GetError().Message}");
return;
}
_userId = message.Data.ID;
Debug.Log($"<color=red>Logged-in user ID: {_userId}, Name: {message.Data.DisplayName}</color>");
LoadLobbyScene();
//SetUpMetaAvatar();
}
private async void SetUpMetaAvatar()
{
var accessTokenMessage = await Users.GetAccessToken().Gen();
if (accessTokenMessage.IsError)
{
Debug.LogError($"Failed to get access token: {accessTokenMessage.GetError().Message}");
return;
}
OvrAvatarEntitlement.SetAccessToken(accessTokenMessage.Data);
Debug.Log("Meta Avatar entitlement set successfully.");
var hasAvatarTask = OvrAvatarManager.Instance.UserHasAvatarAsync(_userId);
await new WaitUntil(() => hasAvatarTask.IsCompleted);
if (hasAvatarTask.Result == OvrAvatarManager.HasAvatarRequestResultCode.HasAvatar)
{
//Instantiate(simpleAvatar);
Debug.Log("<color=red>User has a Meta Avatar.</color>");
}
else
{
Debug.LogWarning("<color=red>User does not have a Meta Avatar. " +
"Prompting for avatar creation...</color>");
return;
}
LoadLobbyScene();
}
private void LoadLobbyScene()
{
SceneManager.LoadScene(lobbySceneName);
}
}