日志2025.2.9
1.增加了敵人揮砍類型
2.增加了敵人的死亡狀態
在敵人身上添加Ragdoll,死后激活布偶模式
public class EnemyRagdoll : MonoBehaviour
{
? ? private Rigidbody[] rigidbodies;
? ? private Collider[] colliders;
? ? private void Awake()
? ? {
? ? ? ? rigidbodies = GetComponentsInChildren<Rigidbody>();
? ? ? ? colliders = GetComponentsInChildren<Collider>();
? ? ? ? SetRagdollActive(false);
? ? }
? ? //如果是布偶狀態,則設置鋼鐵不為運動學。若為正常狀態,將剛體設為運動學
? ? public void SetRagdollActive(bool active)
? ? {
? ? ? ? foreach (Rigidbody rb in rigidbodies)?
? ? ? ? {?
? ? ? ? ? ? rb.isKinematic = !active;
? ? ? ? }
? ? }
? ? //設置碰撞體是否為激活狀態
? ? public void SetColliderActive(bool active)
? ? {
? ? ? ? foreach(Collider collider in colliders)?
? ? ? ? {?
? ? ? ? ? ? collider.enabled = active;
? ? ? ? }
? ? }
}
public class DeadState_Melee : EnemyState
{
? ? private Enemy_Melee enemy;
? ? private EnemyRagdoll ragdoll;
? ? private bool hasDisapear;
? ? public DeadState_Melee(Enemy enemyBase, EnemyStateMachine stateMachine, string animBoolName) : base(enemyBase, stateMachine, animBoolName)
? ? {
? ? ? ? enemy = (Enemy_Melee)enemyBase;
? ? }
? ? public override void Enter()
? ? {
? ? ? ? base.Enter();
? ? ? ? enemy.agent.isStopped = true;
? ? ? ? enemy.animator.enabled = false;
? ? ? ? ragdoll = enemy.GetComponent<EnemyRagdoll>();
? ? ? ? if (ragdoll != null)?
? ? ? ? {?
? ? ? ? ? ? ragdoll.SetRagdollActive(true);
? ? ? ? }
? ? ? ? stateTimer = 5f;
? ? }
? ? public override void Exit()
? ? {
? ? ? ? base.Exit();
? ? }
? ? public override void Update()
? ? {
? ? ? ? base.Update();
? ? ? ? if(stateTimer < 0 && !hasDisapear)
? ? ? ? {
? ? ? ? ? ? hasDisapear = true;
? ? ? ? ? ? ragdoll?.SetColliderActive(false);
? ? ? ? }
? ? }
}
3.增加了簡單的血量系統
? ? public override void GetHit()
? ? {
? ? ? ? base.GetHit();
? ? ? ? if(healthPoint <= 0)
? ? ? ? ? ? stateMachine.ChangeState(deadState);
? ? }
4.增加了帶盾牌的特殊敵人
public class EnemyShield : MonoBehaviour
{
? ? [SerializeField] private int durability;
? ? private Enemy enemy;
? ? private void Awake()
? ? {
? ? ? ? enemy = GetComponentInParent<Enemy>();
? ? }
? ? public void ReduceDurability()
? ? {
? ? ? ? durability--;
? ? ? ? if(durability <= 0)
? ? ? ? {
? ? ? ? ? ? enemy.animator.SetFloat("ChaseIndex", 0);
? ? ? ? ? ? Destroy(gameObject);
? ? ? ? }
? ? }
}
? ? //初始化一些特殊的敵人功能
? ? private void InitializeSpeciality()?
? ? {?
? ? ? ? if(meleeType == EnemyType_Melee.Shield)
? ? ? ? {
? ? ? ? ? ? animator.SetFloat("ChaseIndex", 1);
? ? ? ? ? ? shieldTransform.gameObject.SetActive(true);
? ? ? ? }
? ? }