Unity 使用新输入系统New Input System实现简单移动

本文介绍了如何在Unity中安装并使用新输入系统NewInputSystem,包括安装步骤、添加PlayerInput组件、配置输入动作以及编写脚本实现基础移动和持续移动功能。
摘要由CSDN通过智能技术生成

源码:https://drive.aerwen.net/d/aerwen/unity%E6%BA%90%E7%A0%81/NewInputSystem/NewInputSystem_SimplyMove.unitypackage

使用Unity的新输入系统

【Unity动画系统详解 预备知识】使用Unity的新输入系统(New Input System)控制动画状态机【Unity开发入门教程21】_单机游戏热门视频 (bilibili.com)

要点:
1. 安装 New Input System

我们打开Unity上方工具栏中的Window =>Package Manager打开Unity插件包管理界面

img

2.点击右上角Package选项中Unity Registry,然后在右侧搜索栏中搜索Input

img

3.找到InputSystem插件,点击安装

img

2. 添加 Player Input 组件
  • 选择玩家角色(Player)为ta添加 Player Input组件

我们需要在场景中在我们需要的对象上添加PlayerInput组件

img

3. 新建输入配置文件
  • Assets文件夹下创建Setting文件夹

  • 点击 Create Actions 按钮,输入配置文件命名为Locomotion,存放在刚刚创建的Setting文件夹

  • 将组件选项Behavior选为Invoke Unity Events(系统检测到我们的输入即WASD时,就会调用我们写好的方法)

        

  1. 编写脚本(移动初尝试)

  • 创建一个PlayerMoveTest的脚本

public class PlayerMove : MonoBehaviour
{
    // 移动速度
    public float moveSpeed = 0.2f;
    // 角色控制器
    private CharacterController characterController;


    void Start()
    {
        characterController = GetComponent<CharacterController>();
    }

    void Update()
    {

    }

    /// <summary>
    /// 角色移动(按下时监听 按一下动一下)
    /// </summary>
    /// <param name="callbackContext"></param>
    public void PlayerMovement(InputAction.CallbackContext callbackContext)
    {
        // 获取 Horizontal(横向) 和 Vertical(纵向) 的值  --- 0到1
        Vector2 moveVector2 = callbackContext.ReadValue<Vector2>();

        // 移动方向
        Vector3 moveDir = new(moveVector2.x, 0, moveVector2.y);

        // 控制角色移动
        characterController.Move(moveDir * Time.deltaTime * moveSpeed);
    }

}
  • Player Input组件展开Events再展开Player,在Move方法上挂载PlayerMovement脚本的方法

  1. 编写脚本(持续移动)

  • 勾选InputSystem 的 Generate C#Class

  • 新建一个`PlayerKeepMove`的脚本

public class PlayerKeepMove : MonoBehaviour
{
    public float moveSpeed = 0.2f;

    private MoveInputAction moveInputAction;
    private CharacterController characterController;


    private void Awake()
    {
        //实例化我们刚刚生成的moveInputAction脚本
        moveInputAction = new MoveInputAction();
    }
    void OnEnable()
    {
        //使用前需要将该moveInputAction开启
        moveInputAction.Enable();
    }
    void OnDisable()
    {
        //使用完需要将该moveInputAction关闭
        moveInputAction.Disable();
    }


    void Start()
    {
        characterController = GetComponent<CharacterController>();
    }

    void Update()
    {
        GetMoveInput();
    }


    private void GetMoveInput()
    {
        Vector2 moveVector2 = moveInputAction.Player.Move.ReadValue<Vector2>();

        if (moveVector2 != Vector2.zero)
        {
            PlayerMove(moveVector2.x, moveVector2.y);
        }
    }


    private void PlayerMove(float horizontal, float vetical)
    {
        characterController.Move(new Vector3(horizontal, 0, vetical) * Time.deltaTime * moveSpeed);
    }

}

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现这个功能,可以按照以下步骤: 1. 创建一个场景,并在场景中放置一个需要拖拽的物体,例如一个立方体。 2. 将该物体添加一个Box Collider组件,以便它能够被点击。 3. 创建一个的材质,并将其赋予给该物体。在材质的颜色属性中设置一个初始颜色。 4. 创建一个的脚本,并将其添加到物体上。在脚本中,定义一个变量来存储初始颜色,并定义一个变量来存储当前颜色。 5. 在脚本中,使用OnMouseDown函数来检测鼠标是否点击了该物体。如果点击了,将当前颜色设置为一个的颜色,并将该颜色赋值给物体的材质。 6. 在脚本中,使用OnMouseDrag函数来检测鼠标是否正在拖拽该物体。如果正在拖拽,使用鼠标的位置来移动物体的位置。 下面是一个示例脚本: ``` using System.Collections; using System.Collections.Generic; using UnityEngine; public class DragAndChangeColor : MonoBehaviour { // 初始颜色 public Color initialColor = Color.white; // 当前颜色 private Color currentColor; // 鼠标点击时调用 private void OnMouseDown() { // 设置当前颜色为随机颜色 currentColor = new Color(Random.value, Random.value, Random.value, 1.0f); // 将当前颜色赋值给物体的材质 GetComponent<Renderer>().material.color = currentColor; } // 鼠标拖拽时调用 private void OnMouseDrag() { // 获取鼠标在屏幕上的位置 Vector3 mousePosition = new Vector3(Input.mousePosition.x, Input.mousePosition.y, 10.0f); // 将鼠标位置转换为世界坐标 Vector3 objectPosition = Camera.main.ScreenToWorldPoint(mousePosition); // 移动物体到鼠标位置 transform.position = objectPosition; } // 初始化时调用 private void Start() { // 设置初始颜色 GetComponent<Renderer>().material.color = initialColor; // 设置当前颜色为初始颜色 currentColor = initialColor; } } ``` 将该脚本添加到需要拖拽的物体上即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值