MvC
Просветленный
(36650)
5 месяцев назад
using UnityEngine;
public class DoorOpener : MonoBehaviour
{
public GameObject doorToOpen; // Перетащите сюда конкретную дверь в инспекторе
private void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Player")) // Проверка, что в триггер вошел игрок
{
doorToOpen.SetActive(false); // Открыть дверь
}
}
}
doorToOpen - это переменная, в которую вы должны перетащить конкретный объект двери в инспекторе Unity.
OnTriggerEnter - это метод, который срабатывает, когда в триггер входит другой коллайдер. В этом случае, если объект с тегом "Player" входит в триггер, указанная дверь будет открыта.
Убедитесь, что у каждой двери в вашей сцене есть свой собственный экземпляр скрипта DoorOpener, и что в каждом из них в поле doorToOpen перетащена соответствующая дверь. Таким образом, каждый скрипт будет открывать только свою дверь.
А так легче и быстрее исп готовый шаблон для дверей.
Иван КурочкинУченик (234)
5 месяцев назад
Этот способ решает проблему, но есть ли вариант, чтобы дверь не просто становилась неактивной, а использовать анимации с bool переменной?
Xttx
Мыслитель
(9002)
5 месяцев назад
Когда ты смотришь в одну дверь, то скрипты на ВСЕХ дверях проходят проверку, потому, что ты проверяешь хит по тэгу, и прверка проходит (ты же на дверь смотришь), но у тебя нет проверки _на_какую_именно_ дверь ты смотришь, соответственно по Е они открываются все.
Попробуй добавить после первого рейкаста (кстати, зачем рейкастить два раза подряд?):
if (hit.collider.gameObject != gameObject) return;
Вот код: Заранее большое спасибо.