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

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

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

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

Добавлено через 7 минут
игра под Windows
Unity 5.5
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.03.2017, 23:30
Ответы с готовыми решениями:

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

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

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

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

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

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

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

Не по теме:

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

0
1 / 1 / 0
Регистрация: 21.01.2015
Сообщений: 248
05.03.2017, 10:04  [ТС] 4
Помучившись,сделал вот так.
У меня все работает,если кому-нибудь нужно вот
создал скрипт и повесил его на "дуло"
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 5
Ваш код подразумевает, что на снаряде висит компонент 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
07.03.2017, 19:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.03.2017, 19:11
Помогаю со студенческими работами здесь

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru