Unity新输入系统配置方法

1.设置动作类型和控制类型,WSAD键的移动,使玩家在水平面内移动,是一个二维向量。

Jump是一个button

Look是一个值

2.绑定键盘的WSAD

3.绑定鼠标和手柄的方向键,保存所有配置

4.勾选蓝色字体部分 

5.点击应用后,会出现一个脚本 

6.同时使用新输入系统和旧输入系统会出现错误,导致玩家无法完成跳跃动作。 

 此时应添加using UnityEngine.InputSystem ,并且删去使用旧输入系统的代码(getAxis)

 完整代码:

​
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;

public class PlayerControllerWithNewInputAction : MonoBehaviour
{
    private CharacterController controller;
    [SerializeField] private float moveSpeed = 15f;
    [SerializeField] private float mouseSensitivity = 60f;
    [SerializeField] private Camera playerEyes;
    private float eyesAngleLimit;//眼睛旋转的限制范围
    private Vector3 jumpVector;//跳跃向量
    [SerializeField] private float jumpHeight = 4f;//可修改
    private float gravity = -9.8f;
    private bool isOnGround = true;//判断玩家是否在地面上
    //图层
    [SerializeField] private GameObject groundCheck;
    [SerializeField] public LayerMask layerMask;
    private MyInputActions inputActions;
    private void Start()
    {
        controller = GetComponent<CharacterController>();//获取组件
        inputActions = new MyInputActions();
        inputActions.Enable();//激活
    }

    private void Update()
    {
        //移动
        float horizontalInput = inputActions.Player.Mvoe.ReadValue<Vector2>().x;
        float verticalInput = inputActions.Player.Mvoe.ReadValue<Vector2>().y;
        Vector3 moveDirection = transform.forward * verticalInput + transform.right * horizontalInput;
        controller.Move(moveDirection.normalized * moveSpeed * Time.deltaTime );
        //normalized保留方向,使长度归一,否则长度也会影响速度

        //身体在水平方向旋转
        float mouseX = inputActions.Player.Look.ReadValue<Vector2>().x;
        transform.Rotate(Vector3.up, mouseX * mouseSensitivity * Time.deltaTime);//省略了this

        //眼睛在竖直方向上旋转
        float mouseY = inputActions.Player.Look.ReadValue<Vector2>().y;
        transform.Rotate(Vector3.up, mouseY * mouseSensitivity * Time.deltaTime);

        //以下代码不能合适地控制旋转的角度
        //playerEyes.transform.Rotate(Vector3.left, mouseY * mouseSensitivity * Time.deltaTime);
        eyesAngleLimit -= mouseY * mouseSensitivity * Time.deltaTime;
        eyesAngleLimit = Mathf.Clamp(eyesAngleLimit, -80f, 80f);
        playerEyes.transform.localRotation  = Quaternion.Euler(eyesAngleLimit, 0, 0);
        isOnGround = Physics.CheckSphere(groundCheck.transform.position,0.3f,layerMask);//中心点,半径,检测图层
        
       

        //if (Input.GetButtonDown("Jump") && isOnGround )
        if(inputActions.Player.Jump.triggered && isOnGround )
        {
            jumpVector.y = jumpHeight;
          
        }
        else
        {
            jumpVector.y += gravity * Time.deltaTime;//模仿有重力的下落
        }
        controller.Move(jumpVector * Time.deltaTime);//传到Move()方法中才能移动
    }

}

​

 

  

  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity 输入系统是Unity Technologies在2020年推出的一个功能,致力于提供一个更先进、更灵活的输入处理系统。它是为了解决Unity输入系统在处理输入事件上存在的一些限制和问题而开发的。 输入系统的一个主要特点是对多平台的支持更加全面。它可以在不同的平台上提供一致的输入处理方案,无论是在PC、移动设备还是虚拟现实设备上,开发者都可以使用相同的API来处理输入事件。这使开发者能够更快速、更简洁地编写跨平台的输入代码。 另外,输入系统还提供了更强大的输入事件处理功能。它引入了一个的事件系统,支持更多类型的输入事件,包括键盘、鼠标、触摸、控制器等。开发者可以通过监听这些事件来响应用户的输入,并进行相应的游戏逻辑处理。而且,输入系统还可以灵活地自定义输入配置,使开发者能够根据不同需求灵活地进行输入事件映射和绑定。 另一个重要的优点是输入系统的性能更高效。它经过了优化,能够更有效地处理输入事件,减少资源开销。这对于那些需要处理大量输入事件的游戏尤为重要,能够提高游戏的帧率和性能表现。 总的来说,Unity输入系统是一项令人期待的功能更,它为开发者提供了更先进、更灵活的输入处理工具,大大简化了跨平台开发的难度,并且能够提高游戏性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值