CangJie/Assets/Scripts//PlayerControl.cs

67 lines
2.0 KiB
C#
Raw Normal View History

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
using Sirenix.OdinInspector;
/// <summary>
/// 玩家的控制器部分,玩家主类必须继承这个类才能对控制做出反应
/// </summary>
public class PlayerControl : MonoBehaviour
{
private PlayerC playerC;
/// <summary>
/// 此帧输入方向,-1为左1为右0此帧不输入
/// </summary>
[SerializeField][ReadOnly][Header("此帧输入方向,-1为左1为右0表示此帧不输入")]
protected int inputDir;
2022-03-12 14:54:57 +08:00
protected virtual void Start()
{
playerC = new PlayerC();
//playerC.Enable();
playerC.Normal.Enable();
//为事件订阅方法
//为移动操作订阅方法
playerC.Normal.Move.performed += ctx => OnMove(ctx);
playerC.Normal.Move.canceled += ctx => { inputDir = 0; };
//为攻击操作订阅方法
playerC.Normal.Atk.performed += ctx => OnAtk();
//为跳跃操作订阅方法
playerC.Normal.Jump.performed += ctx => OnJump();
//为交互操作订阅方法
playerC.Normal.Interact.performed += ctx => OnInteract();
}
/// <summary>
/// 当有移动输入的时候触发,因为涉及读值重些的时候记得必须Base
/// </summary>
protected virtual void OnMove(InputAction.CallbackContext ctx){
//根据读值设置记录的输入方向
if(ctx.ReadValue<float>() > 0){
inputDir = 1;
}else if(ctx.ReadValue<float>() < 0){
inputDir = -1;
}
if(ctx.ReadValue<float>().Equals(0f)){
inputDir = 0;
}
}
/// <summary>
/// 按下攻击时触发
/// </summary>
protected virtual void OnAtk(){}
/// <summary>
/// 按下跳跃时触发
/// </summary>
protected virtual void OnJump(){}
/// <summary>
/// 按下交互时触发
/// </summary>
protected virtual void OnInteract(){}
}