Part55:Moving crystal

Part55:Moving crystal(P84)

1:效果和操作

操作:水晶可以自动找到最靠近的enemy并能对目标敌人打击效果
效果:当按下F键时,触发skill.crystal.CanUseSkill(),进而创造水晶预知键为实体,进而Crystal_Skill脚本用SetupCrystal用FIndClosestEnemy()(利用了父脚本Skill脚本的FIndClosestEnemy方法)将所得到的最近敌人作为构造方法参数传递给Crystal_Skill_Controller,进而使用Update中的MoveTowards将水晶移动至最近敌人所在位置,且在距离达到设定距离后FinishCrystal水晶进行爆炸操作(该方法绑定在动画的爆炸帧节点上),与此同时,Crystal_Skill在UseSkill还设定了水晶检测,只有在非canMoveToEnemy情况下才能使用水晶和player位置互换方法

在这里插入图片描述

2:代码改变

//Clone_Skill_Controller脚本修改
//将最近敌人检测方法转移到skill脚本中
  
  private void AttackTrigger()
    {
        Collider2D[] colliders = Physics2D.OverlapCircleAll(attackCheck.position, attackCheckRadius);//创建一个碰撞器组,保存所有圈所碰到的碰撞器
        foreach (var hit in colliders)
        {
            if (hit.GetComponent<Enemy>() != null)
            {
                // hit.GetComponent<Enemy>().DamageImpact();
                // player.stats.DoDamage(hit.GetComponent<CharacterStats>());
                player.stats.DoDamage(hit.GetComponent<CharacterStats>());
            }
        }
    }
//Clone_Skill脚本修改
        newClone.GetComponent<Clone_Skill_Controller>().SetupClone(_clonePosition,cloneDuration,canAttack,_offset,FIndClosestEnemy(newClone.transform),player);//添加新参数FIndClosestEnemy(newClone.transform)
//Crystal_Skill_Controller脚本修改
 		public void SetupCrystal(float _crystalDuration, bool _canExplode, bool _canMove, float _moveSpeed, Transform _closetTarget)//属性设置
    {
        crystalExitTimer = _crystalDuration;
        canExplode = _canExplode;
        canMove = _canMove;
        moveSpeed = _moveSpeed;
        closestTarget = _closetTarget;
    }

    private void Update()
    {
		if (canMove)
        {
            // Debug.Log("10086");
            transform.position = Vector2.MoveTowards(transform.position, closestTarget.position, moveSpeed * Time.deltaTime);

            if (Vector2.Distance(transform.position, closestTarget.position) < 1)
            {
                FinishCrystal();
                canMove = false;
            }
    }
        }
//Crystal_Skill脚本修改
 public override void UseSkill()
    {
      base.UseSkill();
 
        if (currentCrystal == null)
        {
           ....
        }    
        else
        {
            if (canMoveToEnemy)//使得在进行水晶移动时,玩家不能和敌人改变位置
                return;
          ....

    		}
//Skill脚本修改
   protected virtual Transform FIndClosestEnemy(Transform _checkTransform)
    {
        Collider2D[] colliders = Physics2D.OverlapCircleAll(_checkTransform.position, 25);//检测以_checkTransform为检测点,25为半径的圆圈的碰撞检测
 
        float closestDistance = Mathf.Infinity;
        Transform closestEnemy = null;
 
        foreach (var hit in colliders)
        {
            if (hit.GetComponent<Enemy>() != null)
            {
                float distanceToEnemy = Vector2.Distance(_checkTransform.position, hit.transform.position);
                if (distanceToEnemy < closestDistance)/
                {
                    closestDistance = distanceToEnemy;
                    closestEnemy = hit.transform;
                }
            }
        }
 
        return closestEnemy;
    }

      

3:效果图

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值