Code: Select all
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);
}
}
Ich verwende das Tutorial und bevor ich auf das neue Eingabesystem umgestiegen bin, funktioniert alles einwandfrei.
Jetzt waren die Protokolle mit der Bewegungseingabe korrekt (Änderung von 0 auf 1 und von 1 auf 0, wenn die Taste gedrückt oder losgelassen wurde).
Aber ich kann meinen Spieler nicht bewegen, weil in „Fest“ Beide Werte aktualisieren waren immer 0.
Was im falsch machen?
Ich habe andere Themen überprüft, aber diese Lösungen funktionieren bei mir nicht, weil sie starre Körper verwenden. Ich möchte es in diesem Fall nicht verwenden.
#Bearbeiten
Ich habe etwas Ähnliches erreicht, indem ich es folgendermaßen gemacht habe:
Code: Select all
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);
}
}