Mam problem z drzwiami w Unity

0
using System.Collections.Generic;
using UnityEngine;

public class TriggerDoorController : MonoBehaviour
{

public GameObject hud;
public GameObject hud2;

[SerializeField] private Animator myDoor = null;

[SerializeField] private bool openTrigger = false;
[SerializeField] private bool closeTrigger = false;

[SerializeField] private string doorOpen = "OpenRight";
[SerializeField] private string doorClose = "DoorClose";

private void OnTriggerEnter(Collider other)
{
    if (other.CompareTag("Player"))
    {
        hud.SetActive(true);

        if (Input.GetKeyDown(KeyCode.E))
        {
            hud2.SetActive(true);
        }
    }
}
}`

Witam.
Pracuje w unity i mam problem z drzwiami chciałbym żeby nie otwierały się automatycznie tyko wtedy gdy nacisnę E i tylko w okolicznościach gdzie gracz będzie stał na triggerze ale nie wiem jak, ktoś wie? (Problem w tym że jak klikam E to nic się nie dzieje. Prosiłbym też o proste wytłumaczenie, ponieważ jestem nowy w temacie programowania i dopiero się uczę.
2

Ten kod wykona się tylko w zdarzeniu OnTriggerEnter. Twoja logika mówi że ma coś zrobić gdy gracz wejdzie na trigger z wciśniętym klawiszem E. Potem już klawisz nie jest sprawdzany. Prawdopodobnie chcesz sprawdzać klawisz E w każdej klatce - OnUpdate, za to w OnTriggerEnter możesz sobie tylko gdzieś na boku zapisać że player jest w zasięgu triggera

https://answers.unity.com/questions/554003/check-if-player-is-colliding-with-a-trigger.html

Możesz też zapewne sprawdzić klawisz w OnTriggerStay

3
obscurity napisał(a):

Możesz też zapewne sprawdzić klawisz w OnTriggerStay

Nie, nie powinien tego robić w OnTriggerStay bo OnTriggerStay nie jest wywoływane w każdej klatce więc czasem mogłoby nie zadziałać.

Dodatkowe wytłumaczenie.
OnTriggerEnter wywołuje się w jednej klatce w momencie zderzenia 2 colliderów gdzie co najmniej jeden ma zaznaczone isTrigger.
Input.GetKeyDown również wykonuje się tylko w jednej klatce (tj, zwraca wartość true tylko w klatce w której zostało wciśnięte)
Żeby Twój kod zadziałał musiałbyś wcisnąć "E" dokładnie w tej samej klatce w której dochodzi do kolizji.

OnTriggerStay z kolei wykonuje się niemal w każdej klatce podczas kolizji, po wywołaniu OnTriggerEnter

Tak jak obscurity mówi, powinieneś sprawdzać Input w Update i w trigger możesz przestawiać np. boola który powie ci czy znajdujesz się w zasięgu drzwi.
Ogólnie polecam odpowiedzialnością za tego typu rzeczy jak otwieranie drzwi obarczyć playera, a nie drzwi. Będziesz miał mniej MonoBehaviourów na scenie (lepsza wydajność) i łatwiej będzie tym zarządzać z jednego miejsca.

0

Dziękuję wszystkim za pomoc problem rozwiązany :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1