Unity: вражеские объекты, проходящие через коробочный коллайдер по краям фона - PullRequest
0 голосов
/ 05 октября 2019

Я разрабатываю простую 2D-игру Unity (которую я очень новичок, к сожалению, если это глупый вопрос!), В которой мой игрок может съесть своих врагов, столкнувшись с ними. Это прекрасно работает, так как я просто выбираю компонент «является триггером» для врагов и использую этот код в своем классе Player:


    private void OnTriggerEnter2D(Collider2D other)
    {
        Debug.Log("Hit detected");
        Destroy(other.gameObject);
        transform.localScale += new Vector3(x, y, z);
    }

Однако это означает, что коллайдеры размещены вокруг границы моего фонового изображенияне остановить врагов. Как лучше всего это исправить?

Ответы [ 3 ]

0 голосов
/ 05 октября 2019

Из того, что я понял, вы хотите обнаруживать только триггеры между игроком и врагами, но вы все равно хотите, чтобы они сталкивались с физическими объектами в вашей сцене, такими как фоновые коллайдеры.

Один из возможных способов достижения этого - создать дочерний объект для объекта игрока с компонентом коллайдера с установленной опцией триггера и прикрепить к нему скрипт для обработки триггеров. Затем, используя слои, чтобы сгруппировать игрока и вражеские объекты, вы можете снять коллизию между ними следующим образом: Правка -> Настройки проекта -> Физика 2D: «Матрица столкновения слоев».

0 голосов
/ 05 октября 2019

Вы можете назначить скрипт любому врагу, проверяя расстояние с игроком в каждом кадре. Тогда вы можете снять флажок «это триггер»

Vector2.Distance

0 голосов
/ 05 октября 2019

Я не очень хорошо понимаю ваш вопрос. Однако кажется, что ваши столкновения не работают. Итак, помните, что для того, чтобы в вашей игре действительно происходили столкновения, вам нужно использовать коллайдеры, и что один из двух элементов, участвующих в столкновении, должен иметь компонент твердого тела.

Это заставит физику работать вдвигатель, который запускает не. Чтобы проверить, работает ли это, вы можете выполнить отладку:

// called on collision
 void OnCollisionEnter2D(Collision2D col)
 {
      Debug.Log("OnCollisionEnter2D");
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...