Files
SimUL/Assets/Scripts/Characters/CharacterDescriptor.cs
T
2025-01-07 20:45:53 +02:00

83 lines
1.9 KiB
C#

using UnityEngine;
using UnityEngine.AI;
using UMA;
using UMA.CharacterSystem;
using System.Collections.Generic;
using UnityEngine.UI;
public class CharacterDescriptor : MonoBehaviour
{
public CharacterSex Sex { get; private set; }
private NavMeshAgent _navMeshAgent;
[SerializeField]
private DynamicCharacterAvatar _avatar;
private Dictionary<string, DnaSetter> _dna;
[SerializeField]
private Slider _height;
[SerializeField]
private Slider _belly;
private void Start()
{
_navMeshAgent = GetComponentInParent<NavMeshAgent>();
}
private void OnAnimatorMove()
{
if (_navMeshAgent != null)
{
transform.parent.position = _navMeshAgent.nextPosition;
}
}
private void OnEnable()
{
_avatar.CharacterUpdated.AddListener(Updated);
_height.onValueChanged.AddListener(HeightChange);
_belly.onValueChanged.AddListener(BellyChange);
}
private void OnDisable()
{
_avatar.CharacterUpdated.RemoveListener(Updated);
_height.onValueChanged.RemoveListener(HeightChange);
_belly.onValueChanged.RemoveListener(BellyChange);
}
public void ChangeSex(bool isMale)
{
if (isMale)
{
Sex = CharacterSex.Male;
_avatar.ChangeRace("HumanMale");
}
else
{
Sex = CharacterSex.Female;
_avatar.ChangeRace("HumanFemale");
}
}
private void Updated(UMAData data)
{
_dna = _avatar.GetDNA();
_height.value = _dna["height"].Get();
_belly.value = _dna["belly"].Get();
}
private void HeightChange(float value)
{
_dna["height"].Set(value);
_avatar.BuildCharacter();
}
private void BellyChange(float value)
{
_dna["belly"].Set(value);
_avatar.BuildCharacter();
}
}