OnTriggerEnter Работает всегда
у меня есть несколько скриптов, использующих функцию private void OnTriggerEnter (заметьте - private) Вот их список: ScoreManager
private void OnTriggerEnter (Collider col)
{
if(col.tag == "radiy");
{
score++;
scoreDisplay.Text = score.ToString();
}
}
он висит непосредственно на игроке и по идее, должен срабатывать, когда игрок сталкивается с объектом с тегом radiy
Collect
private void OnTriggerEnter (Collider col)
{
if(col.tag == "Player");
{
Destroy(gameObject);
}
}
Он висит на собираемом объекте и по идее, должен срабатывать, когда объект сталкивается с игроком с ясно каким тэгом
и последний: Enemy
private void OnTriggerEnter (Collider myCol)
{
if(myCol.tag == "Player");
{
SceneManager.LoadScene(sceneIndex);
}
}
Этот скрипт висит на враге и когда игрок сталкивается с игроком, по идее его должно перебросить в главное меню
Но по итогу, когда игрок сталкивается с врагом, до перемещения в меню, видно, как к score прибавляется 1, как при собирании предмета И так постоянно, при столкновении со всеми объектами, на которых висит скрипт с OnTriggerEnter и с коллайдером-триггером, происходит прибавление Как сделать так, чтобы все скрипты действовали отдельно, вроде онтриггер private, но действует ВЕЗДЕ
Помогите пожалуйста(
Ответы (1 шт):
private, public откуда вы это взяли? Разницы нет, юнити вызывает свои функции через рефлексию и ей пофиг какие у них методы доступа.
Касаемо вашей проблемы, вы просто где-то накосячили.
Добавьте в OnTriggerEnter монеты банальный дебаг, чтобы понять, кто с кем на самом деле сталкивается: Debug.Log(gameObject.name+" OnTriggerEnter "+myCol.gameObject.name);
А вообще ваш код хлипкий во всех отношениях.
- tag это строковый литерал, что небезопасно из-за ошибок или опечаток, поэтому сравнивают по наличию компонента.
- сплошные триггеры. И монета триггер, и персонаж триггер, и наверняка еще и не триггер, и одно и то же событие обрабатывается сразу с двух сторон... нафига? Почему нет какой-нибудь сущности типа
GameScore, ссылку на которую имеет каждая монетка и говорит ей при событии "начислиxочков" и имеет ссылкуUI, который подписан на событие изменения, а персонаж об этом знать не знает, потому что это не его зона ответственности. - враги отвечают за менеджмент сцен? Ты у каждого врага проставляешь одну и ту же цифру
sceneIndex? Не его зона ответственности, он должен только фиксировать событие.