Мой персонаж не двигается после включения взаимодействия с удержанием.C#

Место общения программистов C#
Anonymous
Мой персонаж не двигается после включения взаимодействия с удержанием.

Сообщение Anonymous »

У меня проблема с InputActions
У меня есть Actions MoveX с привязкой 1D оси с удержанием взаимодействия
В моей игре на сцене 4 персонажа
но активен только один, и вы можно переключаться между ними
Итак, проблема в том, что когда я отключаю своего персонажа, а затем включаю его, пока моя кнопка D или A все еще активна, мой персонаж останавливается, и для перемещения мне нужно снова нажать эту кнопку
И у меня есть понятия не имею, как это исправить (

Код: Выделить всё

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CharacterController : MonoBehaviour
{
private StateManager stateManager;
[SerializeField] private string name;

private CharacterMovement movement;
private CharacterJump jump;

public Animator anim;
public Rigidbody2D rb;
private SpriteRenderer spriteRenderer;

private InputActions controls;

public float horizontal;

public bool flipOnMove;

public bool isGround;

void Awake()
{
controls = new InputActions();

controls.Main.MoveX.performed += ctx =>
{
horizontal = ctx.ReadValue();
};

controls.Main.MoveX.canceled += ctx =>
{
horizontal = 0;
};

controls.Main.Jump.started += ctx => JumpStart();
controls.Main.Jump.canceled += ctx => JumpEnd();

stateManager = FindObjectOfType();

anim = GetComponent();
rb = GetComponent();
spriteRenderer = GetComponent();

movement = GetComponent();
jump = GetComponent();

}

void Update()
{
if(flipOnMove)
{
switch(horizontal)
{
case -1:
spriteRenderer.flipX = true;
break;
case 1:
spriteRenderer.flipX = false;
break;
}
}
}

void FixedUpdate()
{
Move(horizontal);
}

void OnEnable()
{
controls.Enable();

stateManager.currentGameObject = gameObject;
stateManager.currentStatesName = name;

if(stateManager.lastGameObjectTs != null) // зберігання позиції
{
gameObject.transform.position = stateManager.lastGameObjectTs.position;
if(name == "Human") // Якщо людина то спавнити вище
gameObject.transform.position += new Vector3(0f,0.4f,0f);
gameObject.transform.rotation = stateManager.lastGameObjectTs.rotation;
}

if(stateManager.lastGameObjectRb != null) // Зберігання фізики
{
Rigidbody2D rb = gameObject.GetComponent();
rb.velocity = stateManager.lastGameObjectRb;
}

}

void OnDisable()
{
controls.Disable();
}

public void Move(float direction)
{
if(movement != null)
{
movement.Move(direction);
}
}

public void JumpStart()
{
if(jump != null)
{
jump.Jump();
}
}

public void JumpEnd()
{
if(jump !=  null)
{
jump.StopJumpAnim();
}
}
}

Я пытался проверить нажатие кнопки в методе Update, но он все равно не работает.
Также, если я удалю, control.Disable() в OnDisable () у меня все будет нормально
но в консоли будет много ошибок, поэтому я думаю, что это неправильный путь

Подробнее здесь: https://stackoverflow.com/questions/790 ... nteraction

Вернуться в «C#»