我已经看过了文档和任何与新输入系统相关的东西。我知道它是相当新的,在1.0.0上有很多变化。
我刚刚开始在统一后,长时间的休息,并开始我一直试图移动一个 * 播放器 * 左右。我得到了它的工作,但它不停止后,释放键盘键。
一开始我没有改变默认的InputActions设置。
我确实试过将交互更改为 Press〉Press & Release,我让它工作了,但如果我按下正确的键,例如,并在改变键(方向)时保持按下它,它会继续向正确的方向移动。我退出了这个,因为它说只需使用“按钮”操作类型,但它改变了WASD的整个设置。
这是我的播放器脚本。它可能与输入系统无关,但与我的代码有关:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
public class PlayerBehaviour : MonoBehaviour
{
private InputActions _controls;
private Vector2 movementInput;
public float _speed = 12f;
void Start()
{
Cursor.lockState = CursorLockMode.Locked;
}
private void OnEnable()
{
_controls = new InputActions();
_controls.Player.Move.performed += ctx => movementInput = ctx.ReadValue<Vector2>();
_controls.Player.Move.Enable();
}
void Update()
{
Debug.Log("transform.position: " + transform.position);
transform.position += new Vector3(movementInput.x * _speed * Time.deltaTime,
0,
movementInput.y * _speed * Time.deltaTime);
}
private void OnDisable()
{
_controls.Player.Move.Disable();
}
}
**更新:我一直在做这个,并添加了更多,但无法通过我的原始问题。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
public class PlayerMovement : MonoBehaviour
{
private InputActions _controls;
private Vector2 movementInput;
public float _speed = 12f;
public CharacterController controller;
public Camera playerCamera;
private Vector2 lookPosition;
private float mouseSensitivity = 50f;
float xRotation = 0f;
void Start()
{
Cursor.lockState = CursorLockMode.Locked;
}
private void OnEnable()
{
_controls = new InputActions();
_controls.Player.Move.performed += ctx => movementInput = ctx.ReadValue<Vector2>();
_controls.Player.Move.Enable();
_controls.Player.Look.performed += ctx => lookPosition = ctx.ReadValue<Vector2>();
_controls.Player.Look.Enable();
}
void Update()
{
float x = movementInput.x;
float z = movementInput.y;
Vector3 move = transform.right * x + transform.forward * z;
controller.Move(move * _speed * Time.deltaTime);
float lookX = lookPosition.x * mouseSensitivity * Time.deltaTime;
float lookY = lookPosition.y * mouseSensitivity * Time.deltaTime;
xRotation -= lookPosition.y;
xRotation = Mathf.Clamp(xRotation, -90f, 90f);
playerCamera.transform.localRotation = Quaternion.Euler(xRotation, 0f, 0f);
transform.Rotate(Vector3.up * lookX);
}
private void OnDisable()
{
_controls.Player.Move.Disable();
_controls.Player.Look.Disable();
}
}
4条答案
按热度按时间bvn4nwqk1#
我遇到了同样的问题。以前我使用PlayerInput和UnityEvents,WASD Move 工作得很好。后来我想改成C#事件,就像你的代码一样:只使用performeddelegate。
深入研究PlayerInput源代码,我注意到UnityEvents在所有三个started/performed/canceled委托中注册。
解决方案:
也不需要添加 Press 操作,它可以在没有它的情况下工作。
snz8szmq2#
所以,是的,正如我提到的,我得到了它的工作添加 * 新闻 * 互动。
我开车离开了这个,因为如果我按下我的方式通过多个WASD键,它保持在第一个键按下的方向移动。
lokaqttq3#
有一个简单的解决方法。只需删除按下和释放,将动作类型设置为值,控制类型设置为任何。如果需要(我非常怀疑),在脚本中更改几行以支持值。
k5hmc34c4#
你需要取消,因为你的矢量正在设置,但没有重置!