Unity游戏输入系统(新版+旧版)

使用新版还是旧版

在这里插入图片描述
在这里插入图片描述

旧版

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class c5 : MonoBehaviour
{

    void Start()
    {
        
    }

    void Update()
    {
        // 注意要在游戏中 点鼠标键盘进行测试

        // 鼠标
        // 0左键 1右键 2滚轮
        if (Input.GetMouseButtonDown(0))
        {
            Debug.Log("按下");
        }

        // 持续按下鼠标按键
        if (Input.GetMouseButton(0))
        {
            Debug.Log("持续鼠标");
        }
        // 松开鼠标
        if (Input.GetMouseButtonUp(0))
        {
            Debug.Log("松开鼠标");
        }

        // 键盘
        // 按下
        if (Input.GetKeyDown(KeyCode.A))
        {
            Debug.Log("按下A键");
        }
        // 持续
        // if (Input.GetKey(KeyCode.A))  // 写法1
        if (Input.GetKey("a"))           //写法2
        {
            Debug.Log("持续A键");
        }
        // 松开
        if (Input.GetKeyUp(KeyCode.A))
        {
            Debug.Log("松开A键");
        }

    }
}

新版

1、安装

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
安装新版后,在 [编辑-> 项目设置-> 玩家-> 其他设置-> 输入活动 ]处理中设置,新版或者两个。

2、设置

安装后,首先要挂新版的组件 “Playre Input”,使用搜索,输入Input。
在这里插入图片描述

3、新建 Input Aactions

在这里插入图片描述
在这里插入图片描述

4、设置键位

双击新建的文件,出现下面的菜单。
若想使用键盘:keyboard --> By Location of Key(Using US Layout) --> 选择按键。 在这里插入图片描述
在这里插入图片描述
若想使用鼠标:Mouse --> left Button(左键)
在这里插入图片描述
在这里插入图片描述

5、使用设置好的文件

在这里插入图片描述
还需要使用脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// 导入新版 游戏操作系统
using UnityEngine.InputSystem;


public class c6 : MonoBehaviour
{
    // 声明
    PlayerInput input;


    void Start()
    {
        // 获取 新游戏操作系统的组件
        input = GetComponent<PlayerInput>();
        // 如需切换 另一套动作
        // input.SwitchCurrentActionMap("动作名字");
        // 开启该动作
        input.currentActionMap.Enable();
        // 获取 按下动作事件 (跳跃)
        input.actions["Jump"].performed += Jump;
        // 获取 松开动作事件  (跳跃)
        input.actions["Jump"].canceled += Jump;

        // 获取 按下动作事件 (攻击)
        input.actions["Attack"].performed += Attack;


    }

    /*
    private void Update()
    {
        // 获取Move的Vector2向量 (我设置了一个手柄的按键)
        Vector2 v = input.actions["Move"].ReadValue<Vector2>();
        Debug.Log("水平轴:" + v.x + ", 垂直轴:" + v.y);

    }
    */

    // 攻击函数
    private void Attack(InputAction.CallbackContext obj)
    {
        Debug.Log("按下攻击");
    }

    // 跳跃函数
    private void Jump(InputAction.CallbackContext obj)
    {
        if (obj.performed == true)
        {
            Debug.Log("按下跳跃");
        }
        if (obj.canceled == true)
        {
            Debug.Log("松开跳跃");
        }
    }


}

以上完成了,跳跃和攻击的绑定。
效果如下:
在这里插入图片描述

设定上下左右

将4个绑定按键
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
asd就不截图了,都一样。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// 导入新版 游戏操作系统
using UnityEngine.InputSystem;


public class c6 : MonoBehaviour
{
    // 声明
    PlayerInput input;


    void Start()
    {
        // 获取 新游戏操作系统的组件
        input = GetComponent<PlayerInput>();
        // 如需切换 另一套动作
        // input.SwitchCurrentActionMap("动作名字");
        // 开启该动作
        input.currentActionMap.Enable();
        // 获取 按下动作事件 (跳跃)
        input.actions["Jump"].performed += Jump;
        // 获取 松开动作事件  (跳跃)
        input.actions["Jump"].canceled += Jump;

        // 获取 按下动作事件 (攻击)
        input.actions["Attack"].performed += Attack;


    }


    private void Update()
    {
        // 获取Move的Vector2向量 (我设置了一个手柄的按键)
        Vector2 v = input.actions["Move"].ReadValue<Vector2>();
        Debug.Log("水平轴:" + v.x + ", 垂直轴:" + v.y);

    }

    // 攻击函数
    private void Attack(InputAction.CallbackContext obj)
    {
        Debug.Log("按下攻击");
    }

    // 跳跃函数
    private void Jump(InputAction.CallbackContext obj)
    {
        if (obj.performed == true)
        {
            Debug.Log("按下跳跃");
        }
        if (obj.canceled == true)
        {
            Debug.Log("松开跳跃");
        }
    }


}

按键后可观察到,两个轴的数值发生变化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/425784.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java二叉树(1)

&#x1f435;本篇文章将对二叉树的相关概念、性质和遍历等知识进行讲解 一、什么是树 在讲二叉树之前&#xff0c;先了解一下什么是树&#xff1a;树是一种非线性结构&#xff0c;其由许多节点和子节点组成&#xff0c;整体形状如一颗倒挂的树&#xff0c;比如下图&#xff1…

基于springboot+vue的党员教育和管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

Springboot+vue的制造装备物联及生产管理ERP系统(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频&#xff1a; Springbootvue的制造装备物联及生产管理ERP系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot vue前后端分离项 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的制造装备物联及生产管理ERP系统&#xff0c;采用M&#xff…

C++ opencv 学习

文章目录 1、创建窗口2、读取图片3、视频采集4、Mat的使用5、异或操作6、通道分离&#xff0c;通道合并7、色彩空间转换8、最大值、最小值9、绘制图像10、多边形绘制11、随机数12、鼠标实时绘制矩形13、归一化14、resize操作15、旋转翻转16、视频操作17、模糊操作18、高斯模糊操…

力扣110 平衡二叉树 Java版本

文章目录 题目描述代码 题目描述 给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中&#xff0c;一棵高度平衡二叉树定义为&#xff1a; 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 示例 1&#xff1a; 输入&#xff1a;root [3,9,…

LaTeX中的多行数学公式

目录 参考链接 一、gather以及gather*环境编排公式 1、 gather环境 2、 gather*环境 3、 阻止编号 二、align以及align*环境设定公式对齐方式 1、align环境 2、align*环境 三、split环境实现一个公式多行排版 四、cases环境实现分段函数 参考链接 LaTeX中的多行数学…

OpenCV 4基础篇| OpenCV图像的拼接

目录 1. Numpy (np.hstack&#xff0c;np.vstack)1.1 注意事项1.2 代码示例 2. matplotlib2.1 注意事项2.2 代码示例 3. 扩展示例&#xff1a;多张小图合并成一张大图4. 总结 1. Numpy (np.hstack&#xff0c;np.vstack) 语法结构&#xff1a; retval np.hstack(tup) # 水平…

Endnote x9 最快方法批量导入.enw格式文件

按照网上看到的一个方法直接选中所有enw批量拖拽到 All references 附件不行啊&#xff0c; 以为只能写bat脚本方式了 经过一番尝试&#xff0c;惊人的发现拖到下面这个符号的地方就行了&#xff01;&#xff01;&#xff01; 如果不成功的话&#xff0c;可能&#xff1a; 我…

C语言:结构体(自定义类型)知识点(包括结构体内存对齐的热门知识点)

和黛玉学编程呀&#xff0c;大家一起努力呀............. 结构体类型的声明 回顾一下 struct tag { member-list; }variable-list; 创建和初始化 我们知道&#xff0c;在C语言中&#xff0c;对于一些数据是必须初始化的&#xff0c;但是结构体怎么创建并且初始化呢&#xff1…

码垛工作站:食品生产企业的转型助推器

在当今高度自动化的工业生产中&#xff0c;码垛工作站的应用正逐渐成为一种趋势。某食品生产企业在面临市场竞争加剧、人工成本上升等多重压力下&#xff0c;决定引入码垛工作站&#xff0c;以期实现生产流程的升级与变革。 一、码垛工作站引入背景 该企业主要从事休闲食品的…

A股绿色发展报告:2000-2022年指数变化分析

一、有关“绿色发展”的发文趋势和主题分布 运用熵值法测算出企业绿色发展指数 二、数据来源&#xff1a;企业年报等&#xff0c;企业财务相关数据 三、时间跨度&#xff1a;2000-2022年 四、数据范围&#xff1a;A股上市公司 五、数据指标 股票代码 FE法全要素生产率 支付给…

STM32 中断流程介绍

STM32可以产生中断的事件多种多样&#xff0c;比如&#xff1a;定时器时间结束、串口接收到数据、某个GPIO检测到电平变化等等等等。 1、STM32 gpio 中断处理流程介绍 1、从引脚进入的高低电平首先由输入驱动器处理&#xff0c;如下图 2、经过输入驱动器处理后的信号会进…

栈与队列力扣经典例题20. 有效的括号1047. 删除字符串中的所有相邻重复项150. 逆波兰表达式求值

对于栈与队列&#xff0c;我们首先要搞清楚&#xff0c;栈是先入后出&#xff0c;而队列是先入先出&#xff0c;利用这个特性&#xff0c;我们来判断题目用什么STL容器&#xff0c;便于我们去解决问题 20. 有效的括号 这道题&#xff0c;首先我们要知道哪些情况&#xff0c;是会…

IDEA丢失 此窗口 新窗口 打开项目怎么办?

IDEA丢失 此窗口 新窗口 打开项目怎么办&#xff1f; 出现的问题如下&#xff1a;我的这个页面没有了&#xff0c;直接提示是不是关闭当前的进程。 解决的方法&#xff1a;

Unity TMP文字移动效果

前言 看见很多游戏有很特殊的波浪形文字效果&#xff0c;于是来尝试一下控制TMP文字顶点的方式达到类似效果。 原理 挂载tmp text&#xff0c;在里面随便放入非空格字符。 tmp text组件开放了textInfo接口&#xff0c;也就是GetComponent<TextMeshProUGUI>().textInfo…

Linux:线程控制和原生线程库

文章目录 线程的id和LWP线程的终止线程的返回值问题关于原生线程库问题 本篇总结的内容主要是关于线程的控制专题 线程的id和LWP 对于获取线程的id来说&#xff0c;在Linux系统中存在这样的调用 这个调用就可以获取返回当前线程的id 先写出下面的实例代码 #include <ios…

设计模式学习笔记 - 设计原则 - 8.迪米特法则(LOD)

前言 迪米特法则&#xff0c;是一个非常实用的原则。利用这个原则&#xff0c;可以帮我们实现代码的 “高内聚、松耦合”。 围绕下面几个问题&#xff0c;来学习迪米特原则。 什么是 “高内聚、松耦合”&#xff1f;如何利用迪米特法则来实现 高内聚、松耦合&#xff1f;哪些…

【Python】FastAPI 项目创建 与 Docker 部署

文章目录 前言&需求描述1. 本地FastAPI1.1 Python 环境准备1.2 本地 Pycharm 创建FastAPI项目 2. Python FastAPI 部署2.1 服务器配置Python环境2.2.1 下载与配置Git、Pyenv等工具2.2.2 下载与配置Python 2.2 FastAPI 打包成镜像2.2.1 项目准备所需环境文件2.2.2 编写Docke…

Java基于SpringBoot的在线文档管理系统的设计与实现论文

摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;在线文档管理当然也不能排除在外。在线文档管理系统是以实际运用为开发背景&#xff0c;运用软件工程原理和开发方法&am…

合并两个有序链表

题目 题目链接 合并两个排序的链表_牛客题霸_牛客网 题目描述 代码实现 class Solution { public:/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规定的值即可** * param pHead1 ListNode类 * param pHead2 ListNode类 * return …