添加玩家攻击敌人时的转向,让角色可以随时攻击敌人随时朝向敌人,当多个敌人在范围内,允许玩家随时攻击任意敌人,并修复玩家在攻击和点击地面移动时的攻击冷却问题,主要是对stopAttack触发重置。
Fighter:
复制代码 PlayerController
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using RPG.Movement;
- using RPG.Combat;
-
-
-
- //角色的控制
- namespace RPG.Control
- {
-
- public class PlayerController : MonoBehaviour
- {
- private Mover mover;
-
- private void Start()
- {
- mover = GetComponent<Mover>();
- }
-
- private void Update()
- {
- if (InteractWithCombat()) return;
- if (InteractWithMovement()) return;
-
- }
-
-
- // 战斗交互
- private bool InteractWithCombat()
- {
- RaycastHit[] hits = Physics.RaycastAll(GetMouseRay());
- foreach (RaycastHit hit in hits)
- {
- CombatTarget target = hit.transform.GetComponent<CombatTarget>();//被射线击中的物体获取战斗目标组件
- if (!GetComponent<Fighter>().CanAttack(target))
- {
- continue;
- }
-
- if(Input.GetMouseButtonDown(0))//按下左键
- {
- GetComponent<Fighter>().Attack(target);//攻击目标
-
- }
- return true;//射线找到目标
- }
- return false;//射线没有找到目标 ActionScheduler
- }
-
- // 移动和交互
- private bool InteractWithMovement()
- {
- RaycastHit hit;//存储射线碰撞的信息
- bool hasHit = Physics.Raycast(GetMouseRay(), out hit); //通过射线检测是否有接触到碰撞物体
- if (hasHit)//如果有检测到
- {
- if (Input.GetMouseButton(0))//如果按下鼠标左键
- {
- mover.StartMoveAction(hit.point);
-
- }
- return true;
- }
- return false;
- }
-
-
-
- //创建射线
- private static Ray GetMouseRay()
- {
- return Camera.main.ScreenPointToRay(Input.mousePosition);
-
- }
- }
- }
-
复制代码
|