using System.Collections; using System.Collections.Generic; using UnityEngine; using MuHua; // public class AnimalMachine : StateMachine { // [Header("饥饿度参数")] // public float hunger = 100.0f; // 饥饿度,从0到100 // public float maxHunger = 100.0f; // 最大饥饿度 // public float searchRadius = 10.0f; // 搜索食物的半径 // [Header("控制组件")] // public Movement movement; // 运动控制器 // public Animator animator; // 动画控制器 // private float hungerTimer = 0.0f; // 计时器 // private float chasingCooldownTimer = 0.0f; // 追逐状态冷却计时器 // private const float chasingCooldown = 5.0f; // 追逐状态冷却时间 // protected override void InitializeStates() { // RegisterState("Idle", new AnimalIdleState(this)); // RegisterState("Roaming", new AnimalRoamingState(this)); // RegisterState("Chasing", new AnimalChasingState(this)); // RegisterState("Eating", new AnimalEatingState(this)); // ChangeState("Idle"); // } // protected override void Update() { // base.Update(); // // 更新计时器 // hungerTimer += Time.deltaTime; // chasingCooldownTimer += Time.deltaTime; // if (hungerTimer >= 1.0f) { ConsumeHunger(); } // } // public virtual void ConsumeHunger() { // // 重置计时器 // hungerTimer = 0.0f; // // 每次消耗1点饥饿度 // hunger -= 1.0f; // if (hunger < 0.0f) { hunger = 0.0f; } // // 如果饥饿度低于最大饥饿度的70%,有50%的概率触发Chasing状态 // // 如果饥饿度低于最大饥饿度的30%,有90%的概率触发Chasing状态 // float foraging = hunger < maxHunger * 0.3f ? 0.9f : 0.5f; // bool valid = hunger < maxHunger * 0.7f && Random.value < foraging; // // 如果触发Chasing状态,且冷却时间已过,切换到Chasing状态 // if (valid && chasingCooldownTimer >= chasingCooldown) { // ChangeState("Chasing"); // chasingCooldownTimer = 0.0f; // 重置冷却计时器 // } // } // // 从指定范围内查找指定类型的组件 // public virtual bool Find(out T value) where T : Component { // Collider[] colliders = Physics.OverlapSphere(transform.position, searchRadius); // foreach (Collider collider in colliders) { // T component = collider.GetComponent(); // if (component != null) { // value = component; // return true; // } // } // value = null; // return false; // } // // public override bool UpdateMove(Vector3 position) { // // return movement.UpdateMove(position); // // } // // public override void AnimationTrigger(string value) { // // throw new System.NotImplementedException(); // // } // // public override void AnimationEnd() { // // throw new System.NotImplementedException(); // // } // }