RPG游戏《黑暗之光》流程介绍与代码分析之(十三):角色攻击系统的实现

十三章:角色攻击系统

角色攻击是杀怪时的核心功能,攻击模式又可细分为普通攻击和技能攻击,其中技能攻击的信息存储在SkillInfoInList,本章节只涉及普通攻击部分。
为Magician添加一个PlayerAttack脚本,控制攻击
public enum PlayerState{
    normalWalk,
    normalAttack,
    skillAttack
}

    PlayerState state = PlayerState.normalWalk;    //默认为Walk状态,在PlayerMove脚本中也要通过Walk状态控制普通状态下的移动,当状态为Walk时,才能进行移动。
    public string aniName_normalAttack;    //攻击动画,这些属性与小狼类似
    public float normalPlayerAttackTime;
    private float playerAttackTimer = 0;
    public float minPlayerAttackDistance = 5;
    private Transform normalAttackTarget;    //攻击目标

    void Update()
    {
        if (Input.GetMouseButtonDown (1))    //点击右键攻击
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);    //与主角移动类似,参考(链接)
            RaycastHit hitInfo;
            bool isCollider = Physics.Raycast(ray,out hitInfo);
            if(isCollider && hitInfo.collider.tag == Tags.enemy)    //目标为enemy
            {
                normalAttackTarget = hitInfo.collider.transform;    //传递目标
                state = PlayerState.normalAttack;    //切换攻击状态
            }
            else    //若点击别的地方,则切换为Walk状态
            {
                state = PlayerState.normalWalk;    
                normalAttackTarget = null;
            }
        }

    }

13.1 普通攻击状态

清楚了基本的角色攻击状态后,本节实现当state == PlayerState.normalAttack时的攻击状态。
首先当主角进行攻击时,要判断主角和怪物的距离。若超出攻击距离,主角进行移动并攻击;若未超出,直接攻击。在PlayerAttack脚本中
        if(normalAttackTarget != null)    //选定目标后,判断距离
        {
            float distance = Vector3.Distance(transform.position,normalAttackTarget);
            if(distance > minPlayerAttackDistance)
            {
                 PlayerMove._instance.SimpleMove(normalAttackTarget.position);    //从PlayerMove中调用移动方法

            }
            else
            {
                  //直接攻击
            }
        }
其中SimpleMove()函数实现如下
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值