Форум программистов, компьютерный форум, киберфорум
Unity, Unity3D
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/25: Рейтинг темы: голосов - 25, средняя оценка - 4.76
1 / 1 / 0
Регистрация: 21.01.2015
Сообщений: 248

Сделать, чтобы снаряд вылетал из дула прямо, но со временем падал

03.03.2017, 23:30. Показов 4739. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
есть танк) у него меняется угол наклона ствола
как сделать,чтобы снаряд вылетал из дула прямо,со временем падая?чтобы было похоже на реальность
Unity 2D

Добавлено через 7 минут
игра под Windows
Unity 5.5
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.03.2017, 23:30
Ответы с готовыми решениями:

Через сколько времени снаряд вылетел из дула после начала движения?
снаряд вылетел из пушки со скоростью 1000 метров в секунду расстояние которое он пролетел в стволе 1 метр через сколько времени снаряд...

Как сделать так, чтобы запуск из *.exe не вылетал!
Из командной строки все работает нормально, но запуск файла *.exe (этот файл я сам создовал, он откомпилированный!) не получается(( Как...

Сделать так, чтобы при открытии нового окна webbrowser не вылетал IE, а выходило окно моей программы
Подкажите, как сделать так, чтобы при открытии нового окна (используя webbrowser) не вылетал IE, а выходило окно моей программы с требуемой...

4
2 / 2 / 0
Регистрация: 08.03.2014
Сообщений: 46
04.03.2017, 15:46
Создаете префаб боеприпаса, на него вешаете скрипт полета по баллистической траектории и уничтожения при попадании в цель.
Если ствол идет отдельным объектом, то добаляете на конец ему дочерний объект пустышку (это будет точкой респа снаряда).
В контроллере танка при выстреле создаете объект при помощи Instantiate, в качестве оригинала передаете префаб на боеприпас, в качестве трансформа родителя - трансформ этой пустышки в дуле. Как то так.

Добавлено через 6 минут
можно еще сделать пул снарядов, если снаряды будут часто создаваться

Добавлено через 3 минуты
Цитата Сообщение от Rainy Посмотреть сообщение
в качестве трансформа родителя - трансформ этой пустышки в дуле
тут я ошибся,
в качестве стартовой позиции передавать позицию пустышки.
0
04.03.2017, 15:51

Не по теме:

Beetlejuice541, запомните раз и навсегда - патроны летают, только если их рукой кинуть. тему переименовал.

0
1 / 1 / 0
Регистрация: 21.01.2015
Сообщений: 248
05.03.2017, 10:04  [ТС]
Помучившись,сделал вот так.
У меня все работает,если кому-нибудь нужно вот
создал скрипт и повесил его на "дуло"
C#
1
2
public GameObject bullet;
public GameObject sprite;
Bullet-снаряд
sprite-пустой объект(как написали выше)
C#
1
2
3
4
5
6
7
8
9
10
if (Input.GetButtonDown("Jump"))
        {
            Vector3 bulletPosition = sprite.transform.position;
            Vector2 bulletForce;
            float x = sprite.transform.position.x - transform.position.x;
            float y = sprite.transform.position.y - transform.position.y;
            bulletForce = new Vector2(x, y);
            GameObject createBullet = Instantiate(bullet, bulletPosition, transform.rotation) as GameObject;
            createBullet.GetComponent<Rigidbody2D>().AddForce(bulletForce * speed, ForceMode2D.Impulse);
        }
вот как то так,думаю,тема закрыта.
Спасибо за помощь
0
2 / 2 / 0
Регистрация: 08.03.2014
Сообщений: 46
07.03.2017, 19:11
Ваш код подразумевает, что на снаряде висит компонент RigidBody2D, что на мой взгляд излишне в этом случае. Я нашел вариант получше, запускать снаряд по кривой безье.
C#
1
2
3
4
5
6
Vector3 GetCurrentPosition(float _p)
{
        return new Vector3(StartPosition.x * Mathf.Pow(1 - _p, 2) + 2 * MiddlePosition.x * (1 - _p) * _p + TargetPosition.x * Mathf.Pow(_t, 2),
                           StartPosition.y * Mathf.Pow(1 - _p, 2) + 2 * MiddlePosition.y * (1 - _p) * _p + TargetPosition.y * Mathf.Pow(_p, 2),
                           StartPosition.z * Mathf.Pow(1 - _p, 2) + 2 * MiddlePosition.z * (1 - _p) * _p + TargetPosition.z * Mathf.Pow(_p, 2));
}
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
bool Flight(Vector3 _targetPos)
{
     if (Vector3.Distance(transform.position, _targetPos) >= 0.1f)
     {
            count += Speed * Time.deltaTime * GameMode.TimeSpeedMultyplier;
            transform.position = CurrentPosition(count);
            return true;
     }
     else
            return false;
}
void Update ()
{
   if (!moveToTarget(Target.transform.position))
   {
           Attack();
   }
}
Для построения кривой безье нужны начальная точка, она же точка появления снаряда; точка, находящаяся между началом и концом кривой, она определяет излом кривой и конечная точка, ее можно рассчитать на основании дальности атаки(или величины силы передаваемой снаряду при выстреле) танка и угла поворота башни.
Сейчас сам занимаюсь чем-то похожим, поэтому копаюсь в инете в поиске еще лучшего решения, еще есть вариант с параболой. Он даже лучше подходит для вашей ситуации, так как у вас не известна заранее конечная точка выстрела а приходится ее рассчитывать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.03.2017, 19:11
Помогаю со студенческими работами здесь

Rigidbody2D импульс AddForce() Как сделать, чтобы после импульса объект не падал назад?
Здравствуйте! Даю импульс объекту: rBD.AddForce (new Vector2 (_impulseForce, 0), ForceMode2D.Impulse); Но, когда импульс...

Надо сделать так, чтобы JToolTip выдавался прямо поверх строчки в выпадающем меню JCombobox
надо сделать так, чтобы JToolTip выдавался прямо поверх строчки в выпадающем меню JCombobox - есть метод JComponent : Point...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru