add ready player me POC

This commit is contained in:
2024-11-22 07:08:52 +02:00
parent 855639487b
commit 7c4e48f388
1033 changed files with 224048 additions and 28 deletions
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 22cf0662ba294338ba45378a3d307b35
timeCreated: 1669378247
@@ -0,0 +1,34 @@
using ReadyPlayerMe.Core;
using UnityEngine;
namespace ReadyPlayerMe.Samples.AvatarLoading
{
/// <summary>
/// This class is a simple <see cref="Monobehaviour"/> to serve as an example on how to load Ready Player Me avatars and spawn as a <see cref="GameObject"/> into the scene.
/// </summary>
public class AvatarLoadingExample : MonoBehaviour
{
[SerializeField] [Tooltip("Set this to the URL or shortcode of the Ready Player Me Avatar you want to load.")]
private string avatarUrl = "https://models.readyplayer.me/638df693d72bffc6fa17943c.glb";
private GameObject avatar;
private void Start()
{
ApplicationData.Log();
var avatarLoader = new AvatarObjectLoader();
// use the OnCompleted event to set the avatar and setup animator
avatarLoader.OnCompleted += (_, args) =>
{
avatar = args.Avatar;
AvatarAnimationHelper.SetupAnimator(args.Metadata, args.Avatar);
};
avatarLoader.LoadAvatar(avatarUrl);
}
private void OnDestroy()
{
if (avatar != null) Destroy(avatar);
}
}
}
@@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: 5ec678a30bb724ed9999a22a9e41d8af
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 259814
packageName: Ready Player Me Avatar and Character Creator
packageVersion: 7.3.1
assetPath: Assets/Ready Player Me/Core/Samples/AvatarLoadingSamples/AvatarLoading/AvatarLoadingExample.cs
uploadId: 704624
@@ -0,0 +1,14 @@
fileFormatVersion: 2
guid: bb69c446634b2d94585694a1dfcffd7e
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 259814
packageName: Ready Player Me Avatar and Character Creator
packageVersion: 7.3.1
assetPath: Assets/Ready Player Me/Core/Samples/AvatarLoadingSamples/AvatarLoading/AvatarLoadingExample.unity
uploadId: 704624
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: c691bdeea722e4b5b90a0a98b36a1c39
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,20 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3663d6a9358ae4149aad3496e56d4601, type: 3}
m_Name: Avatar Configuration LOD0
m_EditorClassIdentifier:
MeshLod: 0
Pose: 0
TextureAtlas: 1
TextureSizeLimit: 1024
UseHands: 0
MorphTargets: []
@@ -0,0 +1,16 @@
fileFormatVersion: 2
guid: 99552ccf737554f2fab58e864f9416e4
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 0
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 259814
packageName: Ready Player Me Avatar and Character Creator
packageVersion: 7.3.1
assetPath: Assets/Ready Player Me/Core/Samples/AvatarLoadingSamples/AvatarLod/Avatar
Configuration LOD0.asset
uploadId: 704624
@@ -0,0 +1,20 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3663d6a9358ae4149aad3496e56d4601, type: 3}
m_Name: Avatar Configuration LOD1
m_EditorClassIdentifier:
MeshLod: 1
Pose: 0
TextureAtlas: 2
TextureSizeLimit: 512
UseHands: 0
MorphTargets: []
@@ -0,0 +1,16 @@
fileFormatVersion: 2
guid: 1d2a8b01037e24f54b99b6aa9a51f0db
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 0
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 259814
packageName: Ready Player Me Avatar and Character Creator
packageVersion: 7.3.1
assetPath: Assets/Ready Player Me/Core/Samples/AvatarLoadingSamples/AvatarLod/Avatar
Configuration LOD1.asset
uploadId: 704624
@@ -0,0 +1,21 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3663d6a9358ae4149aad3496e56d4601, type: 3}
m_Name: Avatar Configuration LOD2
m_EditorClassIdentifier:
MeshLod: 2
Pose: 0
TextureAtlas: 3
TextureSizeLimit: 256
UseHands: 0
MorphTargets:
- none
@@ -0,0 +1,16 @@
fileFormatVersion: 2
guid: 5fba8af1affda4895895126e539c6165
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 0
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 259814
packageName: Ready Player Me Avatar and Character Creator
packageVersion: 7.3.1
assetPath: Assets/Ready Player Me/Core/Samples/AvatarLoadingSamples/AvatarLod/Avatar
Configuration LOD2.asset
uploadId: 704624
@@ -0,0 +1,122 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using ReadyPlayerMe.Core;
using UnityEngine;
namespace ReadyPlayerMe.Samples.AvatarLoading
{
/// <summary>
/// This class is a simple <see cref="Monobehaviour"/> to serve as an example on how to load a Ready Player Me avatar with multiple LOD's (level of detail) and spawn as a <see cref="GameObject"/> into the scene at runtime.
/// </summary>
public class AvatarLodExample : MonoBehaviour
{
private const string LOD_MESH_SUFFIX = "_LOD";
private const float CULL_TRANSITION = 0.05f;
[SerializeField]
private AvatarLodExampleUI lodExampleUI;
[SerializeField] [Tooltip("Set this to the URL or shortcode of the Ready Player Me Avatar you want to load.")]
private string avatarUrl;
[SerializeField]
private AvatarConfig[] lodConfigs;
private LODGroup lodGroup;
private bool loading;
private GameObject mainAvatar;
private SkinnedMeshRenderer mainMeshRenderer;
private readonly List<SkinnedMeshRenderer> meshRenderersList = new List<SkinnedMeshRenderer>();
private void Start()
{
ApplicationData.Log();
if (lodExampleUI) lodExampleUI.Init();
LoadLodAvatar();
}
/// Loads all the avatar LOD's as per the lodConfigs length and configuration
private async void LoadLodAvatar()
{
var avatarMetadata = new AvatarMetadata();
foreach (var config in lodConfigs)
{
var lodLevel = (int) config.Lod;
var loader = new AvatarObjectLoader();
loader.AvatarConfig = config;
loader.LoadAvatar(avatarUrl);
// use the OnCompleted event to setup the mesh renderers
loader.OnCompleted += (sender, args) =>
{
if (mainAvatar == null)
{
avatarMetadata = args.Metadata;
mainAvatar = Instantiate(args.Avatar);
mainAvatar.name = args.Avatar.name + LOD_MESH_SUFFIX;
mainMeshRenderer = mainAvatar.GetComponentInChildren<SkinnedMeshRenderer>();
var meshTransform = mainMeshRenderer.transform;
meshTransform.name = meshTransform.name += $"{LOD_MESH_SUFFIX}{lodLevel}";
mainMeshRenderer.enabled = false;
meshRenderersList.Add(mainMeshRenderer);
}
else
{
var lodSkinnedMeshRenderer = args.Avatar.GetComponentInChildren<SkinnedMeshRenderer>();
lodSkinnedMeshRenderer.rootBone = mainMeshRenderer.rootBone;
lodSkinnedMeshRenderer.bones = mainMeshRenderer.bones;
lodSkinnedMeshRenderer.transform.name += $"{LOD_MESH_SUFFIX}{lodLevel}";
lodSkinnedMeshRenderer.transform.SetParent(mainAvatar.transform);
lodSkinnedMeshRenderer.transform.SetSiblingIndex(lodLevel);
lodSkinnedMeshRenderer.enabled = false;
meshRenderersList.Add(lodSkinnedMeshRenderer);
}
Destroy(args.Avatar);
loading = false;
};
loading = true;
while (loading)
{
await Task.Yield();
}
}
AddLodGroup();
AvatarAnimationHelper.SetupAnimator(avatarMetadata, mainAvatar);
if (lodExampleUI) lodExampleUI.Show();
}
/// Adds and configures the LODGroup component
private void AddLodGroup()
{
lodGroup = mainAvatar.AddComponent<LODGroup>();
var lods = new LOD[lodConfigs.Length];
for (var i = 0; i < lodConfigs.Length; i++)
{
meshRenderersList[i].enabled = true;
lods[i] = new LOD(CalculateTransitionHeight(i), new Renderer[] { meshRenderersList[i] });
}
lodGroup.SetLODs(lods);
lodGroup.RecalculateBounds();
lodExampleUI.LodGroup = lodGroup;
}
private float CalculateTransitionHeight(int lodConfig)
{
var lodTransition = (lodConfig + 1f) / lodConfigs.Length;
return (1 - lodTransition + CULL_TRANSITION);
}
private void OnDestroy()
{
if (mainAvatar != null)
{
Destroy(mainAvatar);
}
}
}
}
@@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: 707cd498ac29848c587fbf68dc32aa85
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 259814
packageName: Ready Player Me Avatar and Character Creator
packageVersion: 7.3.1
assetPath: Assets/Ready Player Me/Core/Samples/AvatarLoadingSamples/AvatarLod/AvatarLodExample.cs
uploadId: 704624
@@ -0,0 +1,14 @@
fileFormatVersion: 2
guid: 70100edf1a7db4b519c15b52da0e13f2
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 259814
packageName: Ready Player Me Avatar and Character Creator
packageVersion: 7.3.1
assetPath: Assets/Ready Player Me/Core/Samples/AvatarLoadingSamples/AvatarLod/AvatarLodExample.unity
uploadId: 704624
@@ -0,0 +1,70 @@
using System.Linq;
using UnityEngine;
using UnityEngine.UI;
namespace ReadyPlayerMe.Samples.AvatarLoading
{
public class AvatarLodExampleUI : MonoBehaviour
{
private Slider uiSlider;
private Vector3 cameraStartPos;
private Text lodInfoText;
[SerializeField] private Camera mainCamera;
public LODGroup LodGroup { set; get; }
public void Init()
{
QualitySettings.lodBias = 1f;
lodInfoText = GetComponentInChildren<Text>();
uiSlider = GetComponentInChildren<Slider>();
cameraStartPos = mainCamera ? mainCamera.transform.position : Vector3.zero;
uiSlider.onValueChanged.AddListener(UpdatePosition);
}
public void Show()
{
GetComponent<Canvas>().enabled = true;
}
private void UpdatePosition(float value)
{
mainCamera.transform.position = new Vector3(cameraStartPos.x, cameraStartPos.y, cameraStartPos.z + value);
Invoke(nameof(UpdateCurrentLod), 0.1f);
}
private void UpdateCurrentLod()
{
if (LodGroup != null)
{
Transform lodTransform = LodGroup.transform;
foreach (Transform child in lodTransform)
{
var thisRenderer = child.GetComponent<SkinnedMeshRenderer>();
if (thisRenderer != null && thisRenderer.isVisible)
{
var currentLod = child.name.Split('_').Last();
var vertexCount = thisRenderer.sharedMesh.vertexCount;
var textureSize = thisRenderer.sharedMaterial.mainTexture.height;
var morphTargetCount = thisRenderer.sharedMesh.blendShapeCount;
UpdateLodInfoPanel(currentLod, vertexCount, textureSize, morphTargetCount);
}
}
}
}
private void UpdateLodInfoPanel(string currentLod, int vertexCount, int textureSize, int morphTargetCount)
{
lodInfoText.text = "Current LOD\n" + currentLod + "\n" +
"Vertex Count\n" + vertexCount + "\n" +
"Texture Size\n" + textureSize + "\n" +
"Blend Shapes\n" + morphTargetCount;
}
private void OnDisable()
{
uiSlider.onValueChanged.RemoveAllListeners();
}
}
}
@@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: 260ad8794b02546e5b200807e952ba36
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 259814
packageName: Ready Player Me Avatar and Character Creator
packageVersion: 7.3.1
assetPath: Assets/Ready Player Me/Core/Samples/AvatarLoadingSamples/AvatarLod/AvatarLodExampleUI.cs
uploadId: 704624
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 69dcfd12ccd44feb865f4afe67dc5f41
timeCreated: 1669378324
@@ -0,0 +1,85 @@
using System.Collections;
using System.Collections.Generic;
using ReadyPlayerMe.Core;
using UnityEngine;
namespace ReadyPlayerMe.Samples.AvatarLoading
{
/// <summary>
/// This class is a simple <see cref="Monobehaviour"/> to serve as an example on how to load Ready Player Me avatars and spawn as a <see cref="GameObject"/> into the scene.
/// </summary>
public class MultipleAvatarLoadingExample : MonoBehaviour
{
private const int RADIUS = 1;
[SerializeField] [Tooltip("Set this to the URL or shortcodes of the Ready Player Me Avatar you want to load.")]
private string[] avatarUrls =
{
"https://models.readyplayer.me/638df5fc5a7d322604bb3a58.glb",
"https://models.readyplayer.me/638df70ed72bffc6fa179596.glb",
"https://models.readyplayer.me/638df75e5a7d322604bb3dcd.glb",
"https://models.readyplayer.me/638df7d1d72bffc6fa179763.glb"
};
private List<GameObject> avatarList;
private void Start()
{
ApplicationData.Log();
avatarList = new List<GameObject>();
var urlSet = new HashSet<string>(avatarUrls);
StartCoroutine(LoadAvatars(urlSet));
}
/// This method is used to cleanup/destroy avatar <c>GameObject</c>'s when they are no longer needed.
private void OnDestroy()
{
StopAllCoroutines();
if (avatarList != null)
{
foreach (GameObject avatar in avatarList)
{
Destroy(avatar);
}
avatarList.Clear();
avatarList = null;
}
}
/// Loops through all the avatar urls in the <paramref name="urlSet"/> and loads them one after the other.
private IEnumerator LoadAvatars(HashSet<string> urlSet)
{
var loading = false;
foreach (var url in urlSet)
{
loading = true;
var loader = new AvatarObjectLoader();
// use the OnCompleted event setup the animator and run the OnAvatarLoaded method
loader.OnCompleted += (sender, args) =>
{
loading = false;
AvatarAnimationHelper.SetupAnimator(args.Metadata, args.Avatar);
OnAvatarLoaded(args.Avatar);
};
loader.LoadAvatar(url);
yield return new WaitUntil(() => !loading);
}
}
/// This method is called after the avatar has been loadded and setup in the scene and is used to set the position of the <c>GameObject</c> in the scene.
private void OnAvatarLoaded(GameObject avatar)
{
if (avatarList != null)
{
avatarList.Add(avatar);
avatar.transform.position = Quaternion.Euler(90, 0, 0) * Random.insideUnitCircle * RADIUS;
}
else
{
Destroy(avatar);
}
}
}
}
@@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: dc96293c4d89eff4fa7b1ad7dc22deb0
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 259814
packageName: Ready Player Me Avatar and Character Creator
packageVersion: 7.3.1
assetPath: Assets/Ready Player Me/Core/Samples/AvatarLoadingSamples/MultipleAvatarLoading/MultipleAvatarLoadingExample.cs
uploadId: 704624
@@ -0,0 +1,14 @@
fileFormatVersion: 2
guid: 8e059d38b1a8d8343b2a3631d7ae5f18
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 259814
packageName: Ready Player Me Avatar and Character Creator
packageVersion: 7.3.1
assetPath: Assets/Ready Player Me/Core/Samples/AvatarLoadingSamples/MultipleAvatarLoading/MultipleAvatarLoadingExample.unity
uploadId: 704624
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 87509d667496b6f4b9316ad1cbedf5b2
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,100 @@
using System;
using System.Collections;
using System.Collections.Generic;
using ReadyPlayerMe.Core;
using UnityEngine;
using UnityEngine.UI;
namespace ReadyPlayerMe.Samples.AvatarLoading
{
public class MultipleQualityAvatarLoadingExample : MonoBehaviour
{
[SerializeField]
private string avatarUrl = "https://models.readyplayer.me/638df75e5a7d322604bb3dcd.glb";
[SerializeField]
private Transform qualityContainerPrefab;
[SerializeField]
private AvatarConfigData[] avatarConfigs;
private List<GameObject> avatarList;
private void Start()
{
ApplicationData.Log();
avatarList = new List<GameObject>();
StartCoroutine(LoadAvatars());
}
private void OnDestroy()
{
StopAllCoroutines();
if (avatarList != null)
{
foreach (GameObject avatar in avatarList)
{
Destroy(avatar);
}
avatarList.Clear();
avatarList = null;
}
}
private IEnumerator LoadAvatars()
{
var loading = false;
foreach (AvatarConfigData config in avatarConfigs)
{
loading = true;
var loader = new AvatarObjectLoader();
loader.OnCompleted += (sender, args) =>
{
loading = false;
AvatarAnimationHelper.SetupAnimator(args.Metadata, args.Avatar);
OnAvatarLoaded(args.Avatar, config);
};
loader.AvatarConfig = config.Config;
loader.LoadAvatar(avatarUrl);
yield return new WaitUntil(() => !loading);
}
}
private void OnAvatarLoaded(GameObject avatar, AvatarConfigData data)
{
if (avatarList != null)
{
var quality = data.Config.name.Substring("Avatar Config".Length);
Transform container = Instantiate(qualityContainerPrefab);
container.name = quality;
container.position = new Vector3(data.PosX, 0, 0);
container.GetComponentInChildren<Text>().text = "<b>" + quality + "</b>\n" +
"MeshLoad: " + data.Config.Lod + "\n" +
"Texture: " + data.Config.TextureAtlas;
avatar.name = "Avatar";
avatar.transform.SetParent(container, false);
avatarList.Add(container.gameObject);
}
else
{
Destroy(avatar);
}
}
[Serializable]
private struct AvatarConfigData
{
public AvatarConfig Config;
public float PosX;
// TODO Find a fix for ignoring warning
// Had to add this constructor because of "Field is never assigned" warning
public AvatarConfigData(AvatarConfig config, float posX)
{
Config = config;
PosX = posX;
}
}
}
}
@@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: 224f12c77efd85442b0ee207215e2259
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 259814
packageName: Ready Player Me Avatar and Character Creator
packageVersion: 7.3.1
assetPath: Assets/Ready Player Me/Core/Samples/AvatarLoadingSamples/MultipleQualityAvatarLoading/MultipleQualityAvatarLoadingExample.cs
uploadId: 704624
@@ -0,0 +1,14 @@
fileFormatVersion: 2
guid: 03b0ef715be5f0741893a9c75d7712f8
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 259814
packageName: Ready Player Me Avatar and Character Creator
packageVersion: 7.3.1
assetPath: Assets/Ready Player Me/Core/Samples/AvatarLoadingSamples/MultipleQualityAvatarLoading/MultipleQualityAvatarLoadingExample.unity
uploadId: 704624
@@ -0,0 +1,289 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &66221596150849589
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2864682271222091454}
- component: {fileID: 5232411026552460661}
- component: {fileID: 51886015861231641}
- component: {fileID: 6527695666281933317}
m_Layer: 5
m_Name: Canvas
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &2864682271222091454
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 66221596150849589}
m_LocalRotation: {x: -0, y: 1, z: -0, w: 0}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0.001, y: 0.001, z: 0.001}
m_Children:
- {fileID: 958127205910372780}
- {fileID: 1615667814320735963}
m_Father: {fileID: 1853687888834283808}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: -0.0453, y: 2.2233}
m_SizeDelta: {x: 590.6979, y: 216.49927}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!223 &5232411026552460661
Canvas:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 66221596150849589}
m_Enabled: 1
serializedVersion: 3
m_RenderMode: 2
m_Camera: {fileID: 0}
m_PlaneDistance: 100
m_PixelPerfect: 0
m_ReceivesEvents: 1
m_OverrideSorting: 0
m_OverridePixelPerfect: 0
m_SortingBucketNormalizedSize: 0
m_AdditionalShaderChannelsFlag: 0
m_SortingLayerID: 0
m_SortingOrder: 0
m_TargetDisplay: 0
--- !u!114 &51886015861231641
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 66221596150849589}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
m_Name:
m_EditorClassIdentifier:
m_UiScaleMode: 0
m_ReferencePixelsPerUnit: 100
m_ScaleFactor: 1
m_ReferenceResolution: {x: 800, y: 600}
m_ScreenMatchMode: 0
m_MatchWidthOrHeight: 0
m_PhysicalUnit: 3
m_FallbackScreenDPI: 96
m_DefaultSpriteDPI: 96
m_DynamicPixelsPerUnit: 1
--- !u!114 &6527695666281933317
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 66221596150849589}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
m_Name:
m_EditorClassIdentifier:
m_IgnoreReversedGraphics: 1
m_BlockingObjects: 0
m_BlockingMask:
serializedVersion: 2
m_Bits: 4294967295
--- !u!1 &1853687888834283811
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1853687888834283808}
m_Layer: 0
m_Name: QualityContainer
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1853687888834283808
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1853687888834283811}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 2864682271222091454}
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &5405597977882472060
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 958127205910372780}
- component: {fileID: 7121030917185800971}
- component: {fileID: 4569678332020499963}
m_Layer: 5
m_Name: Image
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &958127205910372780
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5405597977882472060}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 2864682271222091454}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &7121030917185800971
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5405597977882472060}
m_CullTransparentMesh: 0
--- !u!114 &4569678332020499963
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5405597977882472060}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 0.27450982, g: 0.26666668, b: 0.25490198, a: 1}
m_RaycastTarget: 1
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
m_Type: 1
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!1 &5502648877521386677
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1615667814320735963}
- component: {fileID: 417389983854223714}
- component: {fileID: 7962115338986911485}
m_Layer: 5
m_Name: Text
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &1615667814320735963
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5502648877521386677}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 2864682271222091454}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &417389983854223714
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5502648877521386677}
m_CullTransparentMesh: 0
--- !u!114 &7962115338986911485
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5502648877521386677}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_FontData:
m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
m_FontSize: 60
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 1
m_MaxSize: 100
m_Alignment: 1
m_AlignByGeometry: 0
m_RichText: 1
m_HorizontalOverflow: 0
m_VerticalOverflow: 0
m_LineSpacing: 1
m_Text: '<b>High</b>
MeshLoad: High
Texture: High'
@@ -0,0 +1,14 @@
fileFormatVersion: 2
guid: 7e49cdc951d802d4d9bfdf45578ca7f8
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 259814
packageName: Ready Player Me Avatar and Character Creator
packageVersion: 7.3.1
assetPath: Assets/Ready Player Me/Core/Samples/AvatarLoadingSamples/MultipleQualityAvatarLoading/QualityContainer.prefab
uploadId: 704624
@@ -0,0 +1,16 @@
{
"name": "ReadyPlayerMe.Samples.AvatarLoading",
"rootNamespace": "",
"references": [
"ReadyPlayerMe.Core"
],
"includePlatforms": [],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [],
"noEngineReferences": false
}
@@ -0,0 +1,14 @@
fileFormatVersion: 2
guid: b7665bce58a1de546a53a59dc2154359
AssemblyDefinitionImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 259814
packageName: Ready Player Me Avatar and Character Creator
packageVersion: 7.3.1
assetPath: Assets/Ready Player Me/Core/Samples/AvatarLoadingSamples/ReadyPlayerMe.Samples.AvatarLoading.asmdef
uploadId: 704624