Сделать дверь в юнити2d

Хочу сделать калитку, открывающуюся на кнопку E, если дистанция от игрока до калитки меньше 1.5.

При открытии калитки должен поменяться спрайт, и отключиться компонент BoxCollider2D. На эту же кнопку калитка должна закрыться: BoxCollider2D включиться, а спрайт поменяться обратно.

Вот код двери:

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

public class DoorSetActive : MonoBehaviour
{
   public void OpenDoor()
    {
        gameObject.SetActive(false);

    }

    public void CloseDoor()
    {
        gameObject.SetActive(true);

    }
    void Update()
    {
        
    }
}

А вот триггер нажатий:

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

public class DoorTriggerButton : MonoBehaviour
{
    [SerializeField] private DoorSetActive door;

    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.F))
        {
            door.OpenDoor();
        }
        if (Input.GetKeyDown(KeyCode.G))
        {
            door.CloseDoor();
        }
    }
    }


Ответы (1 шт):

Автор решения: Максим Фисман

Я точно помню, что уже такой вопрос задавался и я сам на него развернуто отвечал. Если получше погуглите, возможно, найдете его.

Главная проблема вашего вопроса в том, что вы не указали, что у вас не работает. Поэтому будем отталкиваться от нуля:

Используемые функции:

Возможный код:

[RequireComponent(typeof(SpriteRenderer))]
[RequireComponent(typeof(BoxCollider2D))]
[DisallowMultipleComponent]
publiс class Gate : MonoBehaviour
{
    private const float OPENABLE_DISTANCE = 1.5f;
    private bool isOpened;
    private SpriteRenderer rend;
    private BoxCollider2D collider;

    [SerializeField] private Sprite OpenedGate, ClosedGate;

    private void Awake () {
        rend = GetComponent<SpriteRenderer>();
        collider = GetComponent<BoxCollider2D>();
    }
    private void Update () {
        if (Input.GetKeyDown(KeyCode.E)) {
            float dist = Vector3.Distance(transform.position, Player.transform.position);
            if (dist <= OPENABLE_DISTANCE) {
                MoveGate(!isOpened);
            }
        }
    }
    private void MoveGate (bool open) {
        if (open) {
            rend.sprite = OpenedGate;
            collider.enabled = false;    
        }
        else {
            rend.sprite = ClosedGate;
            collider.enabled = true;
        }
    }
}

P.S. Где Player - ссылка на игрока

→ Ссылка