Форум программистов, компьютерный форум, киберфорум
Unity, Unity3D
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
 Аватар для NotGoodEnough
34 / 30 / 8
Регистрация: 22.02.2017
Сообщений: 404

Не определяет попадание объектов друг за другом

01.10.2018, 09:28. Показов 1033. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть пара кубов размерами (0.2, 0.2, 0.05).
Товарищ Storm23 помог мне со скриптом пули (полёт, пробитие и т.д.), но есть проблема с определением пробития нескольких преград подряд.
То есть:

и - игнор
п - попадание

преграды:
| | | | - пуля
и и и п

в первую преграду пуля всегда попадает, а в последующие нет, она просто пролетает их.

Пробовал использовать Linecast так же.
Хотел сделать с помощью RaycastAll, но не получается(попадания определяются, но если пуля застряла, она останавливается не в точке застревания, а за 5 м от этой точки).

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
        private void FixedUpdate()
        {
            DrawTrack();
 
            if (_impactType == ImpactType.Destruction || _impactType == ImpactType.Stuck)
                return; //Do not move bullet because it is not active
 
            //Get delta time
            var dt = Time.fixedDeltaTime;
 
            //Add gravity acceleration
            _velocity += (float3)Physics.gravity * dt;
 
            //Air drag
            _velocity *= 1 - dt + dt * math.exp(-Drag);
 
            //Next pos
            _nextPos = (float3)transform.position + _velocity * dt;
 
            /*var hits = Physics.RaycastAll(transform.position, Vector3.Normalize(_velocity), Vector3.Magnitude(nextPos - (float3)transform.position)).OrderBy(h => h.distance);
 
            foreach (var hit in hits)
            {
                if (CalcImpact(hit) == ImpactType.Hole)
                {
                    CreateHole(GreenHit, hit);
                }
                else return;
            }*/
            
            //Check collisions
            if (Physics.Raycast(transform.position, Vector3.Normalize(_velocity), out var hit, Vector3.Magnitude(_nextPos - (float3)transform.position)))
            {
                if (hit.collider != _lastCollider)//to avoid double collision with same collider
                {
                    _lastCollider = hit.collider;
                    _nextPos = hit.point;
                    
                    Debug.Log(hit.transform.name);
                    CreateHole(GreenHit, hit);
                    
                    var enemyVitals = hit.transform.GetComponent<EnemyVitals>();
                    if (enemyVitals)
                        enemyVitals.ApplyDamage(math.abs(_velocity.z / 10));
                    else CalcImpact(hit);
                }
            }
 
            //Set position and rotation of bullet
            transform.position = _nextPos;
            if (Vector3.SqrMagnitude(_velocity) > 0)
                transform.forward = _velocity;
        }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.10.2018, 09:28
Ответы с готовыми решениями:

Циклическая анимация нескольких объектов друг за другом
Доброго времени суток) Есть 5 объектов, для каждого из них настроен анимационный эффект. воспроизводятся они друг за другом. Как сделать...

Отрисовка объектов друг за другом в цикле, не стирая предыдущие.
Есть часть кода. цикл в function S_render() отрисовывает массив объектов. Я задал смещение через переменю которая изменяется в другом...

Cоздать класс для объектов и сравнить объекты с друг другом
Надо создать 2 объекта, создать класс для объектов и сравнить объекты с друг другом, вот такое задание, не могу правильно сделать, всегда...

4
115 / 83 / 43
Регистрация: 19.01.2018
Сообщений: 484
01.10.2018, 13:06
Цитата Сообщение от NotGoodEnough Посмотреть сообщение
а за 5 м от этой точки
попробуй в начале
C#
1
Time.fixedTime = 0.001f;
У меня так проверку на столкновения в несколько раз ускорилась, правда при забитом FixedUpdate может тормозить, так что побалуйся с значениям
0
 Аватар для NotGoodEnough
34 / 30 / 8
Регистрация: 22.02.2017
Сообщений: 404
01.10.2018, 15:16  [ТС]
RostikTawer, На самом деле не хотелось бы менять время между кадрами(это же оно?).

Добавлено через 4 минуты
RostikTawer, и кстати, Time.fixedTime нельзя установить, так как он не имеет set'а
0
115 / 83 / 43
Регистрация: 19.01.2018
Сообщений: 484
01.10.2018, 15:39
Цитата Сообщение от NotGoodEnough Посмотреть сообщение
и кстати, Time.fixedTime нельзя установить, так как он не имеет set'а
прошу прощения, вот так нужно
C#
1
Time.fixedDeltaTime = 0.001f;
Добавлено через 2 минуты
Цитата Сообщение от NotGoodEnough Посмотреть сообщение
между кадрами(это же оно?).
между кадрами? Впервые слышу, хотя могу ошибаться, но нет, это то время с какой частотой будет проверяться физика (и в частности вызываться FixedUpdate, на простой апдейт никак не повлияет), в стандартном проекте оно равно 0.02, т.е. 50 раз в секунду, но можно это сделать чаще, конечно при 0.001 оно не будет 1к раз в секунду, но максимум вынесет.

Не по теме:

Если застряла на 5м дальше то можно переместить на -5м :D

0
 Аватар для NotGoodEnough
34 / 30 / 8
Регистрация: 22.02.2017
Сообщений: 404
01.10.2018, 16:14  [ТС]
RostikTawer, работает через раз. Такое себе решение, так как нужно подстраивать под разную скорость.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.10.2018, 16:14
Помогаю со студенческими работами здесь

Написать программу, которая определяет, попадание точки с заданными координатами в область
Написать программу, которая определяет, попадание точки с заданными координатами в область, закрашенную на рисунке четрным цветом.

Воспроизведение аудио друг за другом
Дорогие форумчане, не могу воспроизвести музыку друг за дружком, проиграла первая, сразу началась другая, и так по кругу, как это сделать?...

Взаимодействие пользователей друг с другом
Всем доброго времени суток. Не могу понять каким образом обеспечить взаимодействие пользователей друг с другом. Имеется ввиду, что когда...

Столкновение QGaphicsItem друг с другом
использую данную функцию для определения столкновению между айтемами bool cMap::Collaps(QGraphicsItem* item){ QList...

Не конфликтует ли железо друг с другом?
Процессор Intel Pentium G3220 OEM Материнская плата MSI H81M-P33 Видеокарта MSI GeForce GT 730 Оперативная память Kingston HyperX...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru