#c# #unity3d
#c# #unity3d
Вопрос:
Эй, итак, я создаю 2d-игру, которая очень похожа на flappy bird (вы прыгаете при нажатии на экран). Смысл игры состоит в том, чтобы поймать зеленые квадраты, идущие к вам.
Проблема, с которой я сталкиваюсь, заключается в том, что когда мой плеер попадает в зеленый квадрат, кажется, что он сталкивается с ним (он отбрасывает игрока в каком-то случайном направлении или даже останавливается на месте, как будто он врезался в стену), даже если при столкновении зеленый квадрат уничтожается. Поэтому всякий раз, когда игрок попадает в сборный зеленый квадрат, он увеличивает счет и уничтожает квадрат, но иногда, когда я прыгаю прямо перед попаданием в квадрат, он останавливается, как будто он столкнулся с ним вместо того, чтобы просто пройти прямо.
В сборке player есть компонент rigidbody и 2d-квадратный коллайдер.
К сборке green square подключен только компонент 2d square collider.
Я новичок в Unity, и это первая игра, которую я начал разрабатывать. Если вам нужна дополнительная информация, пожалуйста, не стесняйтесь спрашивать.
Вот настройки жесткого тела игрока и 2d-коллайдера
Вот настройки 2D-коллайдера green square
Возможно, эта картина игрового процесса может помочь. Представьте, что синий квадрат — это игрок, а зеленые квадраты — это точки, которые вы должны поразить, красные вещи — это просто враги, которые убивают вас, поэтому не обращайте на них внимания. Игрок стоит на месте, а к сборному элементу green square прикреплен скрипт, который добавляет к ним постоянную силу. Надеюсь, это сделало его намного понятнее.
Комментарии:
1. должны ли зеленые элементы физически сталкиваться друг с другом или с чем-то еще? Если нет, вы могли бы использовать триггеры «Коллайдер, настроенный как триггер (с использованием свойства Is Trigger), не ведет себя как сплошной объект и просто позволяет другим коллайдерам проходить».
2. Можете ли вы предоставить скриншоты конфигурации ваших игровых объектов, в основном жесткого тела и квадратного коллайдера?
3. Хорошо, чтобы сделать вещи немного более понятными, к зеленым предметам прикладывается постоянная сила, чтобы переместиться к игроку со стороны экрана. Они взаимодействуют только с игроком, а не друг с другом или другими игровыми объектами.
Ответ №1:
Существует действительно полезная функция Unity, которая определяет, когда коллайдер касается другого коллайдера.
Это: void OnCollisionEnter(...)
Вы также должны передать Collider
или Collider2d
. Таким образом, это будет выглядеть:
void OnCollisionEnter(Collider col)
- или
void OnCollisionEnter(Collider2D col)
Конечно, у вас также должны быть необходимые инструкции импорта для движка Unity вверху.
Ответ №2:
Возможно, вы захотите использовать триггер для своих зеленых квадратов. тогда bird разрешено передавать true, но square активирует ваш код OnTriggerEnter в вашем скрипте.
итак, что вы можете попробовать, это:
public void OnTriggerEnter(Collider other)
{
if (other.tag == "Player")
{
//Run your code here!!!
//for example
Rigidbody rb = other.gameObject.GetComponent<Rigidbody>();
rb.AddForce(new Vector3(1, 1, 1));
}
}
это добавит силы вашему игроку / птице. но вы можете запустить любой код в этом методе.
Комментарии:
1. Эй, я все еще не совсем понимаю разницу между OnTriggerEnter и OnCollisionEnter, не могли бы вы, пожалуйста, объяснить это мне. В моем коде я использовал OnCollisionEnter.
2. @Tudoraster Можете ли вы поделиться кодом? Трудно обеспечить достойное решение вашей проблемы, не видя код, в котором есть проблема.
Ответ №3:
OnTriggerEnter и OnCollisionEnter запускаются оба, когда объект сталкивается с жестким телом. но с помощью OnTriggerEnter вы можете проходить через объект. потому что на него не влияют другие физические объекты. но OnCollision обычно срабатывает, если вы не фиксируете его на месте.
примечание OnTriggerEnter выполняется в FixedUpdate, поэтому он запускается в конце каждого кадра
Комментарии:
1. Спасибо, и если я проверю флажок триггера is на коллайдере, это означает, что я должен использовать функцию OnTriggerEnter правильно?
2. ДА. если вы проверите isTrigger, он запускается OnTriggerEnter.
3. Я рекомендую использовать OnTriggerEnter, когда объект должен быть статичным и / или объект не может взаимодействовать с помощью физики. как коллайдер для контрольной точки. но ваша проблема должна быть решена с помощью этого решения.