Код: Выделить всё
using UnityEngine;
using UnityEngine.InputSystem;
public class Mover : MonoBehaviour
{
[SerializeField] private float moveSpeed = 5f;
private Vector2 moveInput;
public void OnMove(InputAction.CallbackContext context)
{
moveInput = context.ReadValue();
Debug.Log($"Move Input (performed): {moveInput}");
}
private void FixedUpdate()
{
MovePlayer();
Debug.Log($"Move Input in Update: {moveInput}");
}
void MovePlayer()
{
Vector3 move = new Vector3(moveInput.x, 0, moveInput.y) * moveSpeed * Time.deltaTime;
transform.Translate(move, Space.World);
}
}
Я использую учебник, и перед переключением на новую систему ввода все работает нормально.
Теперь - журналы с вводом перемещения были правильными (менялись с 0 на 1 и с 1 на 0 при нажатии или отпускании кнопки).
Но я не могу заставить своего игрока двигаться, потому что в фиксированном режиме Обновите оба значения, всегда равные 0.
Что я делаю не так?
Я проверил другие темы, но эти решения у меня не работают, потому что они используют твердое тело. Я не хочу использовать его в этом случае.
#Edit
Я добился чего-то похожего, сделав это следующим образом:
Код: Выделить всё
using UnityEngine;
using UnityEngine.InputSystem;
public class Mover : MonoBehaviour
{
[SerializeField] float moveSpeed = 6f;
private Vector2 moveInput;
private InputAction moveAction;
void Awake()
{
moveAction = GetComponent
().actions["Move"];
}
void Update()
{
moveInput = moveAction.ReadValue();
MovePlayer();
Debug.Log($"Move Input in Update: {moveInput}");
}
void MovePlayer()
{
Vector3 move = new Vector3(moveInput.x, 0, moveInput.y) * moveSpeed * Time.deltaTime;
transform.Translate(move);
}
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... put-system
Мобильная версия