添加攻击动画,在动画状态机添加名为attack的Trigger,更新代码
Fighter
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using RPG.Movement;
- using RPG.Core;
-
-
- namespace RPG.Combat
- {
- //攻击
- public class Fighter : MonoBehaviour,IAction
- {
- [SerializeField] float weaponRange = 2f;// 武器范围,表示武器可以攻击的最大距离
-
- Transform target;// 当前攻击的目标
-
- private Mover mover;// 用于移动角色的 Mover 组件
- private bool isInRange;// 标记目标是否在攻击范围内
-
- private void Start()
- {
- mover = GetComponent<Mover>();// 获取 Mover 组件
- }
-
- private void Update()
- {
- if (target == null) return;// 如果目标为空,则不进行任何操作
-
-
- if (!GetIsInRange()) // 如果目标不在攻击范围内,则移动到目标位置
- {
- mover.MoveTo(target.position);
-
- }
- else
- {
- mover.Cancel(); // 目标在攻击范围内,取消移动,并触发攻击动画
- AttackBehaviour();
- }
- }
-
- private void AttackBehaviour()
- {
- GetComponent<Animator>().SetTrigger("attack");
- }
-
- private bool GetIsInRange()
- {
- return Vector3.Distance(transform.position, target.position) < weaponRange;// 检查目标是否在攻击范围内
- }
-
- public void Attack(CombatTarget combatTarget)
- {
- GetComponent<ActionScheduler>().StartAction(this); // 启动当前动作并设置目标
- target = combatTarget.transform;
-
- }
-
- public void Cancel()
- {
- target = null;// 取消攻击,清除目标
- }
-
- // 动画事件:攻击时触发的事件
- private void Hit()
- {
- // 在这里实现攻击的具体逻辑
-
- }
- }
- }
复制代码
|