日志2025.2.8
1.增加了近战敌人攻击类型
public struct AttackData
{
public string attackName;
public float attackRange;
public float attackIndex;
public float animationSpeed;
public float moveDistance;
public AttackType_Melee attackType;
}
public enum AttackType_Melee
{
Close, Charge
}
public class AttackState_Melee : EnemyState
{
private Enemy_Melee enemy;
private Vector3 moveDestination;
private float lastTime;
public AttackState_Melee(Enemy enemyBase, EnemyStateMachine stateMachine, string animBoolName) : base(enemyBase, stateMachine, animBoolName)
{
enemy = (Enemy_Melee)enemyBase;
}
public override void Enter()
{
enemy.animator.SetFloat("AttackAnimationSpeed", enemy.attackData.animationSpeed);
enemy.animator.SetFloat("AttackIndex", enemy.attackData.attackIndex); SetDestination();
base.Enter();
SetDestination();
lastTime = Time.time;
enemy.agent.isStopped = true;
}
public override void Exit()
{
base.Exit();
SetUpNextAttack();
}
public override void Update()
{
base.Update();
if (triggerCalled)
{
stateMachine.ChangeState(enemy.recoveryState);
return;
}
if(Time.time - lastTime > 0.5f)
{
AttackMove();
}
}
private void SetUpNextAttack()
{
int recoveryIndex = enemy.PlayerClose() ? 1 : 0;
enemy.animator.SetFloat("RecoveryIndex", recoveryIndex);
enemy.attackData = GetAttackData();
Debug.Log(enemy.attackData.attackName);
}
//随机获取攻击方式
private AttackData GetAttackData()
{
List<AttackData> validAttackList = new List<AttackData>(enemy.attackList);
//如果玩家足够近,则删去冲锋攻击
if (enemy.PlayerClose())
{
validAttackList.RemoveAll(parameter => parameter.attackType == AttackType_Melee.Charge);
}
int random = Random.Range(0, validAttackList.Count);
return validAttackList[random];
}
private void SetDestination()
{
Vector3 dir = enemy.playerTransform.position - enemy.transform.position;
dir.y = 0;
dir.Normalize();
moveDestination = enemy.transform.position + dir * enemy.attackData.moveDistance;
}
private void AttackMove()
{
enemy.transform.position = Vector3.Lerp(enemy.transform.position, moveDestination, Time.deltaTime * 2);
}
}