Unity使用新输入系统InputSystem制作飞机大战Demo

这篇具有很好参考价值的文章主要介绍了Unity使用新输入系统InputSystem制作飞机大战Demo。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

inputsystem实现玩家按住移动,unity,学习,游戏引擎

@作者 : SYFStrive

@博客首页 : HomePage

📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗

📌:觉得文章不错可以点点关注 👉:专栏连接🔗

💃:程序员每天坚持锻炼💪

inputsystem实现玩家按住移动,unity,学习,游戏引擎
inputsystem实现玩家按住移动,unity,学习,游戏引擎
inputsystem实现玩家按住移动,unity,学习,游戏引擎

👉 飞机大战专栏(🔥)

UI背景制作

添加Quad

使用Unity创建3D Object 👉 Quad

如 👇

inputsystem实现玩家按住移动,unity,学习,游戏引擎

inputsystem实现玩家按住移动,unity,学习,游戏引擎

实现背景移动

注意❗:背景图片的WrapMode模式改为 Repeat

如 👇

inputsystem实现玩家按住移动,unity,学习,游戏引擎

创建材质球添加对应的背景图片

inputsystem实现玩家按住移动,unity,学习,游戏引擎

利用材质球的偏移量使背景动起来

代码如 👇

//private显示
[SerializeField] Vector2 bgVecMove;

//获取背景材质组件
private Material material;

private void Awake()
{
    //获取material组件
    material = GetComponent<MeshRenderer>().material;
}

private void Update()
{
    //利用材质球的偏移量使背景移动
    material.mainTextureOffset+=bgVecMove * Time.deltaTime;   
}

效果

inputsystem实现玩家按住移动,unity,学习,游戏引擎

新输入系统使用InputSystem

InputSystem详细使用可以至我的博客👉 链接 学习

下载步骤:Window 👉 Package Manager 👉 输入InputSystem

创建步骤:右键 👉 Create 👉 InputActions

如 👇

inputsystem实现玩家按住移动,unity,学习,游戏引擎
添加键的说明如 👇

inputsystem实现玩家按住移动,unity,学习,游戏引擎

InputActions与角色串联起来(关键代码PlayerInput)

   PlayerInput

实现共能: 添加系统事件 👉 使系统事件与新输入系统绑定

脚本如 👇

using UnityEngine;
using UnityEngine.Events;
using UnityEngine.InputSystem;

[CreateAssetMenu(menuName ="Player Input")]
public class PlayerInput : ScriptableObject, InputActions.IGameplayActions
{

    //使用系统事件
    private event UnityAction<Vector2> onMove; //= delegate { }判空的1种方法(一开始初始化)
    private event UnityAction onStopMove;

    //初始化实例InputAction
    private InputActions inputActions;


    private void Awake()
    {
        //实例InputAction
        inputActions=new InputActions();    
        //登记动作表的回调函数 如我现在只有一个动作表就登记一个
        inputActions.Gameplay.SetCallbacks(this);   
    }

    //Play时执行
    private void OnEnable()
    {
        
    }

    //推出游戏执行
    private void OnDisable()
    {
        EntranceSceneInhibitoryInput();
    }


    /// <summary>
    /// 进入场景时禁止输入设备一系列操作
    /// </summary>
    private void EntranceSceneInhibitoryInput()
    {
        //禁止输入
        inputActions.Gameplay.Disable();
    }


    /// <summary>
    /// 限制鼠标与输入设备输入
    /// </summary>
    private void AstrictImport()
    {
        //理解:操作玩家 👉 启动动作表
        inputActions.Gameplay.Enable();

        //确定硬件指针是否可见。
        Cursor.visible = false;

        //Cursor.lockState对应的参数如 👇三种
        //1、不加锁定
        //CursorLockMode.None;
        //2、锁定光标
        //CursorLockMode.Locked;
        //3、将光标限制在屏幕内
        //CursorLockMode.Confined;
        Cursor.lockState = CursorLockMode.Locked;
    }

    public void OnMove(InputAction.CallbackContext context)
    {
        //按下及按住时执行
        if (context.phase == InputActionPhase.Performed)
        {
            //执行事件
            //判断空的第二种方法
            //if(onMove!=null) 

            //判断空的第三种方法
            //传入输入动作读取到的二维向量的值 👉 将其作为参数 
            //当按下按键的时候 调用onMove方法 👉 同时将读取到的二维向量值作为参数
            onMove?.Invoke(context.ReadValue<Vector2>()); 
        }

        //当松开按键时执行
        if(context.phase== InputActionPhase.Canceled)
        {
            //执行事件
            onStopMove?.Invoke();
        }
    }
}

使玩家移动

Player

实现共能:初始化时绑定事件 与 游戏停止时移除事件(控制玩家的移动)

代码如 👇

using UnityEngine;

//运行时自动添加Rigidbody组件
[RequireComponent(typeof(Rigidbody2D))]
public class Player : MonoBehaviour
{
    //private显示
    [SerializeField]PlayerInput playerInput;

    //获取刚体
    private new Rigidbody2D rigidbody;

    //移动的速度
    [SerializeField] float moveSpeed=10;

    private void Awake()
    {
        //获取刚体组件
        rigidbody=GetComponent<Rigidbody2D>();    
    }
    private void Start()
    {
        //初始化重力为0
        rigidbody.gravityScale = 0f;
        //初始化激活动作表
        playerInput.AstrictImport();
    }

    private void OnEnable()
    {
        //订阅事件
        playerInput.onMove += Move;
        playerInput.onStopMove += StopMove;
    }

    private void OnDisable()
    {
        //移除事件
        playerInput.onMove -= Move;
        playerInput.onStopMove -= StopMove;
    }

    /// <summary>
    /// 移动
    /// </summary>
    private void Move(Vector2 moveInput)
    {
        //好理解先接受移动的值
        var moveSpeedS = moveInput * moveSpeed;
        //刚体移动
        rigidbody.velocity= moveSpeedS;
    }

    /// <summary>
    /// 停止移动
    /// </summary>
    private void StopMove()
    {
        //刚体移动
        rigidbody.velocity = Vector3.zero;
    }
}

玩家与新输入系统绑定

绑定如 👇

inputsystem实现玩家按住移动,unity,学习,游戏引擎

实现效果如 👇

inputsystem实现玩家按住移动,unity,学习,游戏引擎

最后

inputsystem实现玩家按住移动,unity,学习,游戏引擎
本文到这里就结束了,大佬们的支持是我持续更新的最大动力,希望这篇文章能帮到大家💪

 

                 相关专栏连接🔗
inputsystem实现玩家按住移动,unity,学习,游戏引擎

下篇文章再见ヾ( ̄▽ ̄)ByeBye

inputsystem实现玩家按住移动,unity,学习,游戏引擎文章来源地址https://www.toymoban.com/news/detail-782537.html

到了这里,关于Unity使用新输入系统InputSystem制作飞机大战Demo的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Unity全新的输入系统InputSystem

    在Unity中,默认使用的是旧的输入管理器(InputSystemOld) 在脚本中,利用Input类可以获得用户的输入操作,以及访问移动设备的多点触控或加速感应数据,Input类可以读取输入管理器中设置的按键,在Updata函数中监测用户的输入。 1.虚拟轴 在项目设置中可以看到虚拟轴的相关设

    2024年02月05日
    浏览(54)
  • Unity之新版输入系统InputSystem入门

    最近Unity版本全面升级到Unity2021了,着色器也全面使用URP,接下来毫无疑问,输入系统也要全面升级InputSystem,这也是Unity官方希望我们做的,毕竟现在都2023年了,我们的技术是需要跟上时代的步伐。 老版本的InputSysten系统,其实就一个Input静态类,官方给我们预定了一些常用

    2024年02月16日
    浏览(42)
  • Unity之新版输入系统InputSystem如何自定义InputActions

    上一篇文章,我们介绍了如何使用新版本的InputSystem,我们知道了InputActionsAsset给我们提供了更多的灵活性,扩展性和复用性。那么这篇文章我们就来介绍一下如何创建自定义InputActionAsset Input Action Asset 包含输入 Actions及其关联的Bindings和Control Schemes 的资源。这些资源文件扩展

    2024年02月11日
    浏览(53)
  • python---简单游戏制作(飞机大战)

    1.开发软件 pycharm 编程软件 pygame 第三方库 sprite Group 2.技术介绍      pycharm: PyCharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制。此外,该IDE提供

    2024年02月12日
    浏览(48)
  • 回忆童年游戏,完美利用Python制作飞机大战(爷青回~)

    名字:阿玥的小东东 学习:python、C/C++ 博客链接:阿玥的小东东的博客_CSDN博客-pythonc++高级知识,过年必备,C/C++知识讲解领域博主 目录 pygame包的安装 添加python环境变量 创建飞机大战窗口 飞机照片

    2024年02月08日
    浏览(41)
  • 【python】 pygame学习示例 --飞机大战小游戏制作

    python版本:3.8.5 所需模块:pygame random os pygame版本:20.1 开发环境:pycharm专业版 硬件环境:win11 8G内存以上 使用python的第三方库–pygame 制作飞机大战小游戏 小游戏的内容包括: 玩家player的移动 子弹的发射 陨石的随机掉落(包括旋转 大小 下落角度) 玩家 子弹 陨石的碰撞交互

    2024年02月04日
    浏览(55)
  • Unity简单操作:InputSystem获取WASD键盘输入 移动人物

      目录 安装InputSystem  在编辑的脚本中使用 InputSystem生成的脚本 Unity版本:2019.2.3f1 菜单栏/Window/Package Manager/Input System  工程面板内 右键--创建Input Actions   选中New Controls改名为PlayerControls 然后属性 面板按下Edit asset  Action Maps添加:PlayerMovement   Actions添加:New action 改名为

    2024年02月16日
    浏览(38)
  • javascript打飞机程序8x8x飞机大战js打飞机程序,飞机大战知识点包含了JavaScript面向过程的全部知识点,包括变量、运算符、判断、循环、数组、自定义函数、系统函数、事件等。...

    讲解了JavaScript编程语言制作游戏界面,添加游戏控制、制作元素动画、制作多元素场景,添加碰撞功能、制作精灵动画等功能 源码如下: html:

    2024年02月16日
    浏览(66)
  • unity制作简单的植物大战僵尸

    简单制作植物大战僵尸游戏。 协程实现各种相机动画 卡片填充方式修改为:“已填充”,实现植物恢复 事件系统实现拖拽植物 植物子弹实现对象池 这段代码是一个Unity游戏中的太阳类(Sun),实现了天上掉落的太阳落下的功能。具体实现如下: isSkySun:bool 类型的变量,用

    2024年02月05日
    浏览(45)
  • 我的第一个NPM包:panghu-planebattle-esm(胖虎飞机大战)使用说明

    好家伙,我的包终于开发完啦   欢迎使用胖虎的飞机大战包!! 为你的主页添加色彩 这是一个有趣的网页小游戏包,使用canvas和js开发 使用ES6模块化开发 效果图如下:  (觉得图片太sb的可以自己改) 代码已开源!! Git: https://gitee.com/tang-and-han-dynasties/panghu-planebattle-esm.git NPM: panghu-pla

    2023年04月19日
    浏览(42)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包