using System.Collections; using System.Collections.Generic; using UnityEngine; public class CitizenCrowdMember : MonoBehaviour { public enum SelectableAnimation { Afraid, Cheering }; private Dictionary m_AnimationLenght = new Dictionary(){ {SelectableAnimation.Afraid, 920f/30}, {SelectableAnimation.Cheering, 237f/60} }; public GameObject[] m_villagerPrefabs; public GameObject m_placeholderToRemove; public RuntimeAnimatorController m_animationController; public SelectableAnimation m_currentAnimation = SelectableAnimation.Afraid; public float m_blendingTime = 1;// Seconds public float m_animationSpeedModificator = 1f; private GameObject m_model; private Animator m_modelAnimator; private float m_blendingState = 0f; private float m_animationTime = 0f; // Start is called before the first frame update void Start() { Destroy(m_placeholderToRemove, 0f); m_model = Instantiate(m_villagerPrefabs[Random.Range(0, m_villagerPrefabs.Length)], this.transform); m_model.transform.parent = this.transform; m_modelAnimator = m_model.GetComponent(); m_modelAnimator.runtimeAnimatorController = m_animationController; m_animationTime = Random.Range(0f, 1f); } // Update is called once per frame void Update() { if(m_currentAnimation == SelectableAnimation.Afraid){ m_blendingState = Mathf.Max(0, m_blendingState - (Time.deltaTime / m_blendingTime)); } else { m_blendingState = Mathf.Min(1, m_blendingState + (Time.deltaTime / m_blendingTime)); } m_modelAnimator.SetFloat("Blend", m_blendingState); m_animationTime = (m_animationTime + (Time.deltaTime * m_animationSpeedModificator)/ m_AnimationLenght[m_currentAnimation]) % 1f; m_modelAnimator.SetFloat("Time", m_animationTime); } }