本系列的初衷是因为很多时候基础代码不得不重复又重复,所以为了更快更好地学习到新的知识,我就把已经掌握的知识造成自己的轮子吧,等用到的时候直接复制就行了
叠甲:虽然不能保证全是原创,有些写法可能烂大街,但肯定是我自己学会了之后可能稍加改动,再敲上去的,知识不就是这么传递下去的吗,嘻嘻
实现效果:
代码一览
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
public class PlayerMove : MonoBehaviour {
#region 基础变量部分
// 组件
private HereReplace inputs; // 新输入系统的对象
private Rigidbody2D rb;
private Animator playerAnimator;
//人物控制
[Tooltip("移动速度")]
[SerializeField] private float playerSpeed;
[Tooltip("二元变量")]
private Vector2 wasd;
#endregion
#region 初始化和退出脚本部分
private void Awake() {
// 初始化变量
playerSpeed = 200f;
inputs = new HereReplace();
rb = GetComponent<Rigidbody2D>();
playerAnimator = GetComponent<Animator>();
// 输入启用和订阅
EnableInputs();
}
private void OnDisable() {
// 输入退出和取消订阅
DisableInputs();
}
//输入系统启用函数
private void EnableInputs() {
inputs.Enable();
inputs.Player.Move.started += OnMove;
inputs.Player.Move.performed += OnMove;
inputs.Player.Move.canceled += OnMove;
}
//输入系统退出函数
private void DisableInputs() {
inputs.Player.Move.started -= OnMove;
inputs.Player.Move.performed -= OnMove;
inputs.Player.Move.canceled -= OnMove;
inputs.Disable();
}
#endregion
//逻辑部分
private void Update() {
#region 控制动画
playerAnimator.SetFloat("X", rb.velocity.x);
playerAnimator.SetFloat("Y", rb.velocity.y);
playerAnimator.SetFloat("idle2walk", wasd.magnitude);
#endregion
}
//物理逻辑部分
private void FixedUpdate() {
rb.velocity = wasd.normalized * playerSpeed * Time.deltaTime;
}
// 二元变量赋值
private void OnMove(InputAction.CallbackContext context) {
wasd = context.ReadValue<Vector2>();
}
}
提示
HereReplace是你的InputAction生成的C#脚本名,也就是类名可自行修改
动画一览
切换变量
2D混合树,四方向移动