首页 > 其他分享 >Unity滚滚车轮计划 之 新输入系统控制2D角色移动动画(俯视)

Unity滚滚车轮计划 之 新输入系统控制2D角色移动动画(俯视)

时间:2024-08-23 22:57:45浏览次数:12  
标签:inputs void Move private 2D Player Unity 系统控制 OnMove

        本系列的初衷是因为很多时候基础代码不得不重复又重复,所以为了更快更好地学习到新的知识,我就把已经掌握的知识造成自己的轮子吧,等用到的时候直接复制就行了

叠甲:虽然不能保证全是原创,有些写法可能烂大街,但肯定是我自己学会了之后可能稍加改动,再敲上去的,知识不就是这么传递下去的吗,嘻嘻

 实现效果:

代码一览 

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混合树,四方向移动

标签:inputs,void,Move,private,2D,Player,Unity,系统控制,OnMove
From: https://blog.csdn.net/2301_77947509/article/details/141401987

相关文章

  • Unity引擎制作球形地面
    Unity引擎制作球形地面3大家好,我是阿赵。  之前有个朋友问我,有些游戏,角色好像走在一个球形的地面上,离角色远的东西会往下沉,直到看不见。  这种效果的做法肯定不止一种的。  最直观的做法,如果本身每张地图的范围很小,是固定只能走一定的圆弧范围的地面。这种......
  • Unity跳过闪屏页
    github上一段代码,跳过UnityLogo启动屏:github链接:https://github.com/psygames/UnitySkipSplash/blob/main/SkipSplash.csUnityAPI文档,Unity暴露了SplashScreen.Stop()停止启动屏的API只需要写个静态方法,使用[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.Bef......
  • 《黑神话:悟空》神话再现,虚幻引擎与Unity/C#谁更强?
    前言在国产游戏领域,《黑神话:悟空》无疑是一颗耀眼的明星,以独特的艺术风格、深厚的文化底蕴以及卓越的技术表现,赢得了国内外玩家的广泛关注。然而,在这款游戏光鲜亮丽的背后,是我们开发者对技术选择的深思熟虑与探索。今天我们就来揭秘《黑神话:悟空》幕后的技术对决—虚幻引擎与Uni......
  • S32的进阶之路->1,S32DS环境安装与Debuge测试
    1,S32DS安装包下载    浏览器搜索“恩智浦”进入NXP官网,或者直接点击下面的NXP官网链接NXP官网https://www.nxp.com.cn/    进入设计中心,点击软件下面的汽车软件,随后进入到汽车电子软件和工具界面,再点击S32DSIDE进行下载,这里我们需要登录NXP的账号,没有的......
  • TA实践分享:材质与渲染——植物与风(Unity+UE)
    【USparkle专栏】如果你深怀绝技,爱“搞点研究”,乐于分享也博采众长,我们期待你的加入,让智慧的火花碰撞交织,让知识的传递生生不息!一、美术分析下面是风格化和写实两种风格的草地效果,看上去是两种不搭边的美术表现形式,但拆解其背后的美术特征和实现原理二者在我们的眼中应该是一......
  • C# x Unity面向对象补全计划 设计模式 之 实现一个简单的有限状态机
    一个简单的有限状态机可以有如下内容1.状态基类(定义基本状态的方法,如进入(Enter)、执行(Execute)和退出(Exit),同时可以在此声明需要被管理的对象)2.具体状态类(定义具体状态,如:跳跃,行走,待机,每个具体状态类继承自状态基类)3.管理状态类(负责管理状态的切换逻辑,确保在不同状态之间进行......
  • Unity的UI设计
    目录创建和布局布局与交互性能优化最佳实践学习资源UnityUIToolkit与uGUI和IMGUI之间的具体区别和适用场景是什么?UnityUIToolkituGUIIMGUI如何在Unity中实现响应式UI设计以适应不同设备尺寸?UnityUI性能优化的最新技术和方法有哪些?在Unity中封装UI组件的最佳实......
  • Unity 麦扣 x 勇士传说 全解析 之 有限状态机(附各模块知识的链接,零基础也包学会的牢弟
            在编码前我一直有个疑问,为什么不是将方法写在一个一个类中,或者用的单例模式写个管理器来继承的方式来做怪物脚本,玩家控制和玩家动画控制的代码混在一起不说,与其他脚本之间的交互,让过于冗杂的代码不易阅读        这节开始应用的有限状态机,似乎一定......
  • Unity 麦扣 x 勇士传说 全解析 之 怪物基类(2)(附各模块知识的链接,零基础也包学会的牢弟)(
    1.怪物的动画逻辑一览2.怪物的受伤死亡逻辑一览usingSystem.Collections;usingSystem.Collections.Generic;usingSystem.Xml;usingUnityEngine;publicclassMonster:MonoBehaviour{[Header("速度")]publicfloatnormalSpeed;publicfloatchas......
  • Unity 中 Color 与 Color32 的区别
    1.存储方式Color用四个浮点数(float)来表示RGBA,取值范围均是0到1举例:varorange=newColor(1f,0.5f,0f,1f);而Color32使用四个字节(byte)表示RGBA,取值范围是0到255举例:varorange=newColor32(255,128,0,255);2.区别由存储方式可以看出,Color32采用字节存储,占......