93 lines
2.1 KiB
C#
93 lines
2.1 KiB
C#
using UnityEngine;
|
|
using UnityEngine.AI;
|
|
using UMA;
|
|
using UMA.CharacterSystem;
|
|
using System.Collections.Generic;
|
|
using UnityEngine.UI;
|
|
using static UnityEngine.Rendering.DebugUI;
|
|
|
|
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;
|
|
|
|
[SerializeField]
|
|
private List<string> _hair;
|
|
|
|
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();
|
|
}
|
|
|
|
public void ChangeSkinColor(Color color)
|
|
{
|
|
_avatar.SetColor("Skin",color);
|
|
_avatar.UpdateColors(true);
|
|
}
|
|
}
|