摇杆方式的移动控制

采用 MoveControl 和 AttackControl 控制
移动采用摇杆,摇杆使用UGUI原生组件,继承IPointerDownHandler, IPointerUpHandler, IDragHandler
定义三个事件,按下(无参数),滑动(方向),抬起(无参数)
在按下时,更新背景UI的anchoredPosition
通过:

RectTransformUtility.ScreenPointToLocalPointInRectangle(this.selfRectTransform, eventData.position, eventData.pressEventCamera, out Vector2 anchorPos);

而HandleUI的anchoredPosition恢复到Vector2.zero
滑动的时候,获取PointerEventData的delta,代表和上一次滑动的差值,直接对anchoredPos进行+=操作
也要针对半径进行限制
通过:

Vector3.ClampMagnitude(this.pointRectTransform.localPosition, this.radius);

移动采取,旋转+移动的方式。
先通过:

this._entityBase.selfRotateTransform.rotation = Quaternion.LookRotation(dir);

再通过:

Vector3 motion = moveSpeed * Time.deltaTime * this._entityBase.GetForward();
if (!this._characterController.isGrounded)
{
    motion.y = this.gSpeed * Time.deltaTime;
}
this._characterController.Move(motion);

对于CharacterController
Move:不包括重力的所以需要通过isGrounded进行判断,返回具体的碰撞信息
SimpleMove:以米/秒为单位,重力自动应用的(效果不好),返回值是bool,代表是否接触地面

对于技能攻击的移动,也是一样的,在武器数据里面配置
attackMoveTimes每次攻击的移动时间,attackMoveDistances每次攻击的移动距离
都是数组,因为带连招的,每次攻击的动画不一样,表现也不一样
移动速度 = 移动距离 / 时间,再通过上方的移动控制进行正常的移动

对于被击的移动,也是一样的。

攻击的同时,调用animControl的攻击动画的方法,同时调用moveControl的攻击移动方法。
也同时调用被击者的animControl的被击动画,同时调用moveControl被攻击击退方法。

设置状态需要有一个统一的接口,之前是拆开的
SetIdle、SetDead、SetMove、SetAttack
需要在每一个方法里面加判断,如果死了,就不进行下面的操作。
现在只需要一个SetState(EStateType type),只需添加一次判断即可

你可能感兴趣的:(摇杆方式的移动控制)