У меня есть 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();
}
}
}
Также, если я удалю, control.Disable() в OnDisable () у меня все будет нормально
но в консоли будет много ошибок, поэтому я думаю, что это неправильный путь
Подробнее здесь: https://stackoverflow.com/questions/790 ... nteraction