您的位置:首页 > 新闻 > 资讯 > 便宜建站方法_微博官网入口_软文推广媒体_加盟

便宜建站方法_微博官网入口_软文推广媒体_加盟

2025/2/25 4:17:38 来源:https://blog.csdn.net/ababla/article/details/145525165  浏览:    关键词:便宜建站方法_微博官网入口_软文推广媒体_加盟
便宜建站方法_微博官网入口_软文推广媒体_加盟

日志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);
    }


}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com