第五十一章 Unity Input Manager 输入系统(下)

这篇具有很好参考价值的文章主要介绍了第五十一章 Unity Input Manager 输入系统(下)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本章节我们就来使用水平轴和垂直轴来控制游戏物体的移动和旋转。我们之前大致讲过,游戏物体移动最重要的是方向,速度和时间三个要素,同样旋转也是。接下来,我们将之前创建的地形场景导入进来,如下所示

第五十一章 Unity Input Manager 输入系统(下)

然后将之前的“MecanimDemo”工程里面的模型文件和动画文件拿过来使用,这里可以导入我自定义的“U_Character_Animatiion.unitypackage”资源包文件。

第五十一章 Unity Input Manager 输入系统(下)

 第五十一章 Unity Input Manager 输入系统(下)

然后,我们将“U_Character_REF.fbx”模型拖入到场景中,

第五十一章 Unity Input Manager 输入系统(下)

 第五十一章 Unity Input Manager 输入系统(下)

然后选中相机,点击菜单栏“GameObject”->“Align With View”调整Main Camera位置

第五十一章 Unity Input Manager 输入系统(下)

接下来, 我们创建一个“U_Character_Controller”动画控制器文件,双击打开它

第五十一章 Unity Input Manager 输入系统(下)

然后将我们之前复制过来的两个动画添加进来

第五十一章 Unity Input Manager 输入系统(下)

我们默认动画是Idle休闲,然后在Idle和Run之间彼此建立过渡。接下来,我们创建一个动画参数is_run,类型为bool类型,如下所示

第五十一章 Unity Input Manager 输入系统(下)

接下来,我们设置Idle到Run的过渡条件为is_run = true

第五十一章 Unity Input Manager 输入系统(下)

然后Run到Idle的过渡条件为is_run = false

第五十一章 Unity Input Manager 输入系统(下)

设置完毕后,我们将这个“U_Character_Controller.controller”文件拖拽到Animator组件的Controller项上面去。

第五十一章 Unity Input Manager 输入系统(下)

最后,我们创建一个“MoveScript.cs”脚本文件来控制动画的播放,如下所示

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

public class MoveScript : MonoBehaviour
{
    // 动画播放组件
    private Animator animator;

    // Start is called before the first frame update
    void Start()
    {
        // 获取动画播放组件
        animator = GetComponent<Animator>();
    }

    // Update is called once per frame
    void Update()
    {
        // 按下按键W播放动画
        if (Input.GetKeyDown(KeyCode.W))
        {
            animator.SetBool("is_run", true);
        }
        // 抬起按键W停止播放动画
        if (Input.GetKeyUp(KeyCode.W))
        {
            animator.SetBool("is_run", false);
        }
    }
}

然后,我们将这个脚本附加到“U_Character_REF”游戏对象上面

第五十一章 Unity Input Manager 输入系统(下)

我们Play运行工程查看一下。

第五十一章 Unity Input Manager 输入系统(下)

现在我们的动画播放没有问题了。接下来,我们就开始控制角色的移动。我们之前讲过,这个最好使用“Character Controller”角色控制器组件来实现。

第五十一章 Unity Input Manager 输入系统(下)

 第五十一章 Unity Input Manager 输入系统(下)

接下来,我们就来修改“MoveScript.cs”脚本文件,增加移动代码,如下所示

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

public class MoveScript : MonoBehaviour
{
    // 动画播放组件
    private Animator animator;

    // 角色控制器组件
    private CharacterController controller;

    // 定义移动速度和旋转速度
    private float moveSpeed = 10.0f;
    private float rotateSpeed = 2.0f;
    
    // Start is called before the first frame update
    void Start()
    {
        // 获取动画播放组件
        animator = GetComponent<Animator>();

        // 获取角色控制器组件
        controller = GetComponent<CharacterController>();
    }

    // Update is called once per frame
    void Update()
    {
        // 垂直方向的输入(WS按键)控制移动
        float v = Input.GetAxis("Vertical");
        controller.SimpleMove(transform.forward * moveSpeed * v);

        // 水平方向的输入(AD按键)控制旋转
        float h = Input.GetAxis("Horizontal");
        transform.Rotate(0, rotateSpeed * h, 0);

        // 按下按键W播放动画
        if (Input.GetKeyDown(KeyCode.W))
        {
            animator.SetBool("is_run", true);
        }
        // 抬起按键W停止播放动画
        if (Input.GetKeyUp(KeyCode.W))
        {
            animator.SetBool("is_run", false);
        }
    }
}

接下来,我们就来运行工程。

第五十一章 Unity Input Manager 输入系统(下)

接下来,我们来添加相机跟随角色移动,鼠标控制相机旋转的代码。以前我们是将相机放置到角色的下面(成为角色的子游戏对象),这种方式虽然简单,但是存在一些问题。这里,我们将使用代码来控制相机跟随角色。原理很简单,就是当角色移动的时候,相机也跟随移动。我们创建一个新的脚本“CameraScript.cs”文件,内容如下

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

public class CameraScript : MonoBehaviour
{
    // 游戏角色
    private Transform player;

    // 相机控制参数
    private bool isRotating = false;
    private Vector3 offset;
    private float distance;
    private float rotateSpeed = 2.0f;

    // Start is called before the first frame update
    void Start()
    {
        // 获取游戏角色
        player = GameObject.Find("U_Character_REF").transform;

        // 相机和游戏角色的偏移
        offset = transform.position - player.position;

        // 相机和游戏角色之间的距离
        distance = offset.magnitude;
    }

    // Update is called once per frame
    void Update()
    {
        // 鼠标右键控制相机旋转
        if(Input.GetMouseButtonDown(1)) isRotating = true;
        if(Input.GetMouseButtonUp(1)) isRotating = false;

        // 相机围绕游戏角色旋转
        if (isRotating)
        {
            // 围绕游戏角色的Y轴左右旋转
            transform.RotateAround(player.position, player.up, rotateSpeed * Input.GetAxis("Mouse X"));
            // 围绕相机(也可以试试游戏角色)的X轴上下旋转
            transform.RotateAround(player.position, transform.right, -rotateSpeed * Input.GetAxis("Mouse Y"));
        }

        // 根据滚轮来增加和减小这个距离
        distance += Input.GetAxis("Mouse ScrollWheel") * 1.0f;        
        offset = offset.normalized * distance;

        // 游戏角色移动后,相机跟随移动,保持偏移
        transform.position = player.position + offset;
    }
}

接下来,我们要将这个脚本附加到相机上面。

第五十一章 Unity Input Manager 输入系统(下)

接下来,我们稍微调整一下视角,

第五十一章 Unity Input Manager 输入系统(下)

接下来,我们Play运行整个工程

第五十一章 Unity Input Manager 输入系统(下)

总结:Unity推荐使用Input Manager来获取设备的输入信息。对于方向性输入肯定是使用Input.GetAxis("Horizontal")和Input.GetAxis("Vertical")方法来获取X/Y数值。这些X/Y数值可以直接用来控制游戏角色的移动(后续章节我们会详细介绍)。而对于按钮的输入,可以通过使用Input.GetButtonUp("Fire1")来获取是否按下状态。至于输入轴对应的什么类型的设备的按键,就可以在Input Manager来设置。可以是键盘,鼠标,或者游戏手柄。当然,Unity默认已经给我们添加了18个输入轴的设置。我们也可以继续添加新的设备按键设置输入轴。但是,这些设置对于我们的代码修改则是没有太大的影响。因为我们代码中,不管使用GetAxis方法,还是GetButtonUp方法,它的参数仅仅是输入轴的名称而已。

本课程涉及的内容已经共享到百度网盘:https://pan.baidu.com/s/1e1jClK3MnN66GlxBmqoJWA?pwd=b2id文章来源地址https://www.toymoban.com/news/detail-438035.html

到了这里,关于第五十一章 Unity Input Manager 输入系统(下)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 第五十三章 Unity 移动平台输入(上)

    在移动设备上,Input 类提供对触摸屏、加速度计和地理/位置输入的访问。这里我们简单介绍Input类对于触摸屏的支持。Input.Touches是一个触摸数组,每个数组元素代表着手指在屏幕上的触碰状态Input.Touch。Input.Touch 数据结构表示: fingerId 触摸索引 deltatime 从最后状态到当前状态

    2024年02月03日
    浏览(27)
  • 第四十一章 Unity 输入框 (Input Field) UI

    本章节我们学习输入框 (Input Field),它可以帮助我们获取用户的输入。我们点击菜单栏“GameObject”-“UI”-“Input Field”,我们调整一下它的位置,效果如下 我们在层次面板中发现,这个InputField UI元素包含两个子元素,一个是Placeholder,另一个是Text。如下所示 同样,我们查看

    2024年02月04日
    浏览(27)
  • Unity 新版输入系统(Input System)

    官方教程 注意 新的输入法系统需要 Unity 2019.4+ 和 .NET 4 运行时。它不适用于 .NET 3.5 的项目。 教程版本:Unity 2021.3.26 导航栏 - Window - Package Manager 选择 Unity Registry 在列表中找到 Input System 点击 Install 安装 点击 Yes 启用新版 Input System 等待Unity重新启动 Unity 默认会同时启用旧版和

    2024年04月23日
    浏览(33)
  • 第五十六章 Unity 音频播放

    Unity可以导入大多数标准音频文件格式,精通于在3D 空间中播放声音,还可根据需要提供其他效果。虽然播放声音是一件非常简单的事情,但是为了模拟现实直接中的各种声音效果,Unity会提供各种各样的组件来实现。 首先,我们需要了解“多普勒效应”。他是一名奥地物理

    2024年02月07日
    浏览(29)
  • 【正点原子STM32连载】第十一章 按键输入实验 摘自【正点原子】APM32E103最小系统板使用指南

    1)实验平台:正点原子APM32E103最小系统板 2)平台购买地址:https://detail.tmall.com/item.htm?id=609294757420 3)全套实验源码+手册+视频下载地址: http://www.openedv.com/docs/boards/xiaoxitongban 上一章中介绍了GPIO的输出模式,并用其控制LED的亮灭。在实际的应用尝尽中,还会需要使用到GPIO的

    2024年02月04日
    浏览(43)
  • 【Unity_Input System】Input System新输入系统(一)

    目录 一、导入Input System包 二、使用方式1:直接从输入设备对应类中获取输入 三、使用方式2:用代码创建InputAction获取输入 四、使用方式3:用Player Input组件获取输入 五、使用方式4:用Input Action Asset生成C#代码获取输入 打开包管理器,搜索Input System,点击右下角安装。 安装

    2024年02月08日
    浏览(30)
  • 【Unity_Input System】Input System新输入系统(二)

    目录 六、Action Phase 七、Input Action Asset文件 1.Bindings Mode  1Binding 2PositiveNegative Binding 3UpDownLeftRight Composite 4UpDownLeftRightForwardBackward Composite 5Binding with one modifier 6Binding with two modifier 2.Binding Path 3.Action Type 4.Initial State Check 5.Interaction 1Default Interaction 2Press Interaction 3Hold Inter

    2024年02月03日
    浏览(38)
  • 第五十九章 Unity 发布Android平台

    本章节我们讲解如何打包发布到安卓手机平台。要为 Android 构建和运行应用程序,必须安装 Unity Android Build Support 平台模块。还需要安装 Android 软件开发工具包(SDK)和原生开发工具包(NDK)才能在 Android 设备上构建和运行代码。默认情况下,Unity 会安装基于 OpenJDK 的 Java 开

    2024年02月14日
    浏览(32)
  • 第五十八章 Unity 发布PC平台

    本章节我们介绍一些如何打包游戏到PC平台,这里重点介绍如何制作Windows操作系统下的游戏包。首先,我们创建一个“PcDemo”工程,然后简单布置一下场景内容,如下 想要打包发布Unity项目,我们可以在菜单栏选择“File”→ “Build Settings”菜单命令。 在Platform列表中显然了我

    2024年02月11日
    浏览(28)
  • 【Unity入门计划】基本概念(7)-Input Manager&Input类

    目录 1 Input Manager-Controls 控件 1.1 Key 键 1.2 Button 按钮 1.3 Virtual Axis 虚拟轴(复数:Axels) Name 名称 Ngative Button, Positive Button 负/正值键(按钮) 2 C#中的Input类 2.1 键盘的输入(获取键盘事件) Input.GetKey(string KeyName) Input.GetKeyDown(string KeyName) Input.GetKeyUp(string KeyName) 2.2 鼠标的输入(获取

    2024年02月08日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包