Tanoda
AvatarLoader.cs
Go to the documentation of this file.
1#pragma warning disable 649
2using TriLibCore.Extensions;
3using TriLibCore.General;
5using UnityEngine;
6
7namespace TriLibCore.Samples
8{
11 {
15 [SerializeField] private GameObject _wrapper;
16
20 public void LoadAvatarFromFile()
21 {
22 LoadModelFromFile(_wrapper);
23 }
24
30 protected override void OnMaterialsLoad(AssetLoaderContext assetLoaderContext)
31 {
32 base.OnMaterialsLoad(assetLoaderContext);
33 if (assetLoaderContext.RootGameObject != null)
34 {
35 var existingInnerAvatar = AvatarController.Instance.InnerAvatar;
36 if (existingInnerAvatar != null) Destroy(existingInnerAvatar);
37 var controller = AvatarController.Instance.Animator.runtimeAnimatorController;
38 var bounds = assetLoaderContext.RootGameObject.CalculateBounds();
39 var factor = AvatarController.Instance.CharacterController.height / bounds.size.y;
40 assetLoaderContext.RootGameObject.transform.localScale = factor * Vector3.one;
41 AvatarController.Instance.InnerAvatar = assetLoaderContext.RootGameObject;
42 assetLoaderContext.RootGameObject.transform.SetParent(AvatarController.Instance.transform, false);
43 AvatarController.Instance.Animator = assetLoaderContext.RootGameObject.GetComponent<Animator>();
44 AvatarController.Instance.Animator.runtimeAnimatorController = controller;
45 }
46 }
47
49 protected override void Start()
50 {
51 base.Start();
52 AssetLoaderOptions = AssetLoader.CreateDefaultLoaderOptions();
53 AssetLoaderOptions.AnimationType = AnimationType.Humanoid;
54 AssetLoaderOptions.HumanoidAvatarMapper =
55 Resources.Load<HumanoidAvatarMapper>("Mappers/Avatar/MixamoAndBipedByNameHumanoidAvatarMapper");
56 var bounds = AvatarController.Instance.InnerAvatar.CalculateBounds();
57 var factor = AvatarController.Instance.CharacterController.height / bounds.size.y;
58 AvatarController.Instance.InnerAvatar.transform.localScale = factor * Vector3.one;
59 }
60
64 private void Update()
65 {
66 if (Input.GetMouseButtonDown(1))
67 Cursor.lockState = Cursor.lockState == CursorLockMode.None
68 ? CursorLockMode.Locked
69 : CursorLockMode.None;
70 if (Cursor.lockState == CursorLockMode.Locked) UpdateCamera();
71 }
72 }
73}
TriLibCore.AssetLoaderOptions AssetLoaderOptions
Definition: TriLibLoader.cs:9
Represents a base class used in TriLib samples.
void LoadModelFromFile(GameObject wrapperGameObject=null, Action< AssetLoaderContext > onMaterialsLoad=null)
Shows the file picker for loading a model from local file-system.
void UpdateCamera()
Updates the Camera based on mouse Input.
Represents a class used to control an avatar on TriLib samples.
static AvatarController Instance
The Avatar Controller Singleton instance.
CharacterController CharacterController
Avatar character controller.
Animator Animator
Avatar animator.
GameObject InnerAvatar
Game object that wraps the actual avatar.
Represents a TriLib sample which allows the user to load and control a custom avatar.
Definition: AvatarLoader.cs:11
override void OnMaterialsLoad(AssetLoaderContext assetLoaderContext)
Event triggered when the Model (including Textures and Materials) has been fully loaded.
Definition: AvatarLoader.cs:30
void LoadAvatarFromFile()
Shows the file picker so the user can load an avatar from the local file system.
Definition: AvatarLoader.cs:20
override void Start()
Configures the avatar loading and adjusts avatar size factor based on the existing avatar.
Definition: AvatarLoader.cs:49