Unity(2022.3.38LTS) - 输入

目录

一. 简介

二. 实例

键盘输入:

鼠标输入:

触摸输入:

输入管理器:



一. 简介

在 Unity 中,输入(Input)是用于获取用户输入信息的重要部分。

键盘输入
可以通过 Input.GetKey 、 Input.GetKeyDown 、 Input.GetKeyUp 等方法来检测键盘按键的状态。例如,判断是否按下了“W”键来控制角色向前移动。

鼠标输入
Input.mousePosition 可以获取鼠标在屏幕上的位置。 Input.GetMouseButton 系列方法用于检测鼠标按键的操作。

触摸输入
在支持触摸的设备上,Unity 提供了相应的触摸输入检测方法。

轴输入
可以在 Unity 的输入设置中定义轴(Axes),如水平轴(Horizontal)和垂直轴(Vertical),然后通过 Input.GetAxis 或 Input.GetAxisRaw 来获取轴的值,常用于控制角色的移动或其他连续的操作。

示例应用
在一个射击游戏中,通过鼠标左键点击进行射击,通过键盘的“WASD”键控制角色移动。

在一个跑酷游戏中,利用手机的触摸滑动控制角色的跳跃和转向。

二. 实例

键盘输入

使用 Input.GetKey 方法

void Update()
{
    if (Input.GetKey(KeyCode.W))
    {
        // 执行当 W 键被持续按下时的操作
    }
}

使用 Input.GetKeyDown 方法

void Update()
{
    if (Input.GetKeyDown(KeyCode.W))
    {
        // 执行当w键被按下时的操作
    }
}

使用 Input.GetKeyUp 方法

void Update()
{
    if (Input.GetKeyUp(KeyCode.W))
    {
        // 执行当w键被松开时的操作
    }
}

例如,在一个简单的平台跳跃游戏中:

当持续按下 W 键时,角色向上跳跃;当按下空格键时,角色发动特殊技能;当松开 Esc 键时,暂停游戏。

代码:

using System.ComponentModel.Design;
using UnityEngine;

public class InputTest : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyUp(KeyCode.W))
        {
            // 执行当 W 键被松开时的操作
            Debug.LogError("W被松开");
        }
        if (Input.GetKeyDown(KeyCode.W))
        {
            // 执行当 W 键被按下时的操作
            Debug.LogError("W被按下");
        }
        if (Input.GetKey(KeyCode.W))
        {
            // 执行当 W 键被持续按下时的操作
            Debug.LogError("W持续按下");
        }

    }
}

把这个代码脚本组件,添加到场景内物体上.然后运行游戏,按下键盘的W.

鼠标输入

在 Unity 中,处理鼠标输入有多种方式。

获取鼠标位置
可以使用 Input.mousePosition 来获取鼠标在屏幕上的位置。它返回的是一个 Vector3 类型的值,其中 x 和 y 分别表示鼠标在屏幕上的水平和垂直坐标。

检测鼠标按键按下

  • Input.GetMouseButton(0) :检测鼠标左键是否按下。
  • Input.GetMouseButton(1) :检测鼠标右键是否按下。
  • Input.GetMouseButton(2) :检测鼠标中键是否按下。

检测鼠标按键按下的瞬间

  • Input.GetMouseButtonDown(0) :检测鼠标左键按下的瞬间。
  • Input.GetMouseButtonDown(1) :检测鼠标右键按下的瞬间。
  • Input.GetMouseButtonDown(2) :检测鼠标中键按下的瞬间。

检测鼠标按键松开

  • Input.GetMouseButtonUp(0) :检测鼠标左键松开。
  • Input.GetMouseButtonUp(1) :检测鼠标右键松开。
  • Input.GetMouseButtonUp(2) :检测鼠标中键松开。

以下是一个简单的示例代码,用于在鼠标左键按下时打印信息:

using System.ComponentModel.Design;
using UnityEngine;

public class InputTest : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            Debug.Log("鼠标左键按下位置" + Input.mousePosition);
        }

    }
}

触摸输入:

在 Unity 中处理触摸输入,需要考虑移动端设备(如手机和平板)的触摸操作。

基本的触摸检测方法

Input.touches 数组包含了当前所有触摸的信息。每个 Touch 对象具有位置、阶段(如开始、移动、结束)等属性。

示例代码

using UnityEngine;

public class TouchInputExample : MonoBehaviour
{
    void Update()
    {
        if (Input.touchCount > 0)
        {
            Touch touch = Input.GetTouch(0);

            if (touch.phase == TouchPhase.Began)
            {
                Debug.Log("触摸开始");
            }
            else if (touch.phase == TouchPhase.Moved)
            {
                Debug.Log("正在触摸移动");
            }
            else if (touch.phase == TouchPhase.Ended)
            {
                Debug.Log("触摸结束");
            }
        }
    }
}

多点触摸

如果需要处理多点触摸,可以遍历 Input.touches 数组获取多个触摸的信息。

在游戏中的应用

例如在一个跑酷游戏中,玩家通过手指在屏幕上滑动来控制角色的左右移动和跳跃。

或者在一个策略游戏中,通过手指的缩放操作来控制地图的缩放。

输入管理器:

在 Unity 中,输入管理器(Input Manager)是用于配置和管理各种输入设备输入的工具。

主要功能

  1. 定义输入轴(Axes):您可以创建水平轴(Horizontal)、垂直轴(Vertical)等,并为其指定对应的按键或鼠标操作。
  2. 灵敏度设置:调整输入轴的灵敏度,以控制输入的响应速度。
  3. 反转设置:例如,反转某个轴的输入方向。

配置输入
在 Unity 编辑器的菜单栏中,选择 “Edit” -> “Project Settings” -> “Input” 来打开输入管理器。

应用示例
假设您正在制作一个赛车游戏,您可以创建一个 “Acceleration” 轴,并将其设置为对应键盘的 “W” 和 “S” 键,或者手柄的某个摇杆操作,然后在脚本中通过 Input.GetAxis("Acceleration") 来获取玩家的加速输入值。

优点

  1. 统一管理:方便集中配置和查看所有的输入设置。
  2. 跨平台适配:可以为不同的平台(如 PC、移动设备、主机)进行针对性的输入配置。

属性:功能:
Name用于从脚本中检查此轴的字符串名称。
Descriptive Name独立构建的 Configuration 对话框的 Input 选项卡中显示的正值名称。
Descriptive Negative Name独立构建的 Configuration 对话框的 Input 选项卡中显示的负值名称。
Negative Button用于向负方向推动轴的按钮。
Positive Button用于向正方向推动轴的按钮。
Alt Negative Button用于向负方向推动轴的替代按钮。
Alt Positive Button用于向正方向推动轴的替代按钮。
Gravity未按下按钮的情况下,轴下降到中性点的速度(以单位/秒表示)。
Dead模拟盲区的大小。此范围内的所有模拟设备值都会映射到中性点。
Sensitivity轴向目标值移动的速度(以单位/秒表示)。仅用于数字设备。
Snap如果启用,按下相反方向的按钮时,轴值将重置为零。
Invert如果启用,则负按钮 (Negative Buttons) 将提供正值,反之亦然。
Type将控制此轴的输入类型。
将控制此轴的已连接设备的轴。
Joy Num将控制此轴的已连接游戏杆。
    void Update()
    {
        // 获取水平轴的值(例如:A 键和 D 键,或左摇杆左右移动)
        float horizontal = Input.GetAxis("Horizontal");

        // 获取垂直轴的值(例如:W 键和 S 键,或左摇杆上下移动)
        float vertical = Input.GetAxis("Vertical");

        Debug.Log("水平轴输入: " + horizontal);
        Debug.Log("垂直轴输入: " + vertical);
    }

  • 24
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Unity 2022.3引入了一些新的导航功能,以帮助开发者更方便地为游戏添加导航系统。新版本中的导航系统改进了性能和功能,使其更加强大和灵活。 首先,Unity 2022.3引入了实时路径搜索功能。该功能可以根据场景中的物体位置和碰撞体等信息,在实时场景中进行路径搜索。这意味着开发者可以在游戏运行时动态计算角色或其他游戏实体的路径。这一功能对于实时策略游戏或动态变化的游戏环境非常有用。 其次,新版本的导航系统还改进了自动化的对话框生成功能。开发者可以通过简单的设置,自动生成适应场景的对话框来实现导航指示。这个功能可以大大减轻开发者的负担,并提高游戏中导航的质量。 此外,Unity 2022.3还提供了更多的导航算法选项。不同的游戏场景可能需要不同的导航算法来平衡效率和精度。新版本中的导航系统提供了多种算法选项,让开发者能够根据具体需求选择合适的算法。 最后,Unity 2022.3导航系统的改进还包括了对2D游戏的支持。早期的导航系统主要面向3D游戏,但新版本中加入了对2D游戏的导航支持。这使得开发者能够更方便地为2D游戏创建导航系统,为玩家提供更好的游戏体验。 总的来说,Unity 2022.3版本的导航系统带来了更多强大和灵活的功能,包括实时路径搜索、自动对话框生成、多种导航算法选项以及对2D游戏的支持。这些新功能使得开发者在为游戏添加导航系统时更加便捷,为玩家提供更好的游戏体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一然明月(全栈)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值