Форум программистов, компьютерный форум, киберфорум
Unity, Unity3D
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
C# .NET Программист
 Аватар для Ислам2001
34 / 22 / 5
Регистрация: 11.11.2016
Сообщений: 426

Гаубица (Rigidbody.velocity по окружности)

04.08.2017, 23:51. Показов 3172. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. У меня к вам 2 вопроса:

1) Есть у меня танк, из которого вылетает пуля. С помощью Rigidbody.velocity, AddForce она летит по прямой. Как мне сделать так, чтобы она полетела как "по дуге" по кругу в цель. Чтобы летела не прямо, а долетела прямо вверх, потом опустилась в точку. Артиллерия. Пытался сложить 2 вектора Vector3.forward + Vector3.up, не выходит, летит по диагонали и не падает.

Вот код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using UnityEngine;
using System.Collections;
 
public class Point : MonoBehaviour {
 
    private Transform point;
 
    public Rigidbody force;
    public GameObject effect;
    public Transform to;
 
    void Start () {
        force.transform.position = transform.position;
    }
 
    void Update () {
        Vector3 dir = (to.transform.position - force.transform.position + transform.up);
        force.AddForce (dir);
    }
}
2) Есть турель, её пушка прицеливается на объект, который вошёл в радиус её зрения, как только подходит другой, она сразу начинает переключаться на него (это мне нужно убрать). Как сделать так, чтобы пушка нацелилась на тот объект, который вошёл в радиус её зрения, но не переключалась на другой до тех пор, пока не добъёт первый. Чтобы куча объектов к ней подходило, а она не переключалась на другой, пока не добъёт первый. Как уничтожит, сразу переходит у другому. И если тот объект, который был в радиусе её зрения (атакуемый), вышел с её поля зрения, она сразу начинает переключаться на другой.

Вот код:
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
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
 
public class Tower : MonoBehaviour {
 
    public Transform spawn;
    public Rigidbody bullet;
    public float delay = 0.5f;
 
    private List<GameObject> target;
    private GameObject unit;
    private bool can_shoot = true;
    private float shoot_timer = 0.0f;
    private float distance;
 
    void Attack() {
        target = new List<GameObject> ();
        target.AddRange(GameObject.FindGameObjectsWithTag("Unit"));
        foreach (GameObject t in target) {
            float distance = Vector3.Distance (transform.position, t.transform.position);
            if (distance < 25) {
                Vector3 dir = t.transform.position - transform.position;
                transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.LookRotation(dir), Time.deltaTime * 15.0f);
            }
        }
        Ray ray = new Ray (spawn.position, transform.forward);
        RaycastHit hit;
        if (Physics.Raycast (ray, out hit)) {
            if (hit.collider.tag == "Unit") {
                hit.collider.gameObject.GetComponent<Unit> ().health -= 1.0f;
            }
        }
        Rigidbody go = (Rigidbody)Instantiate (bullet, spawn.position, Quaternion.identity);
        go.velocity = transform.forward * 16.0f;
        can_shoot = false;
    }
 
    void Update () {
        if (!can_shoot) {
            shoot_timer += Time.deltaTime;
            if (shoot_timer >= delay) {
                shoot_timer = 0.0f;
                can_shoot = true;
            }
        }
        if (can_shoot) {
            Attack ();
        }
    }
}
Жду ваших ответов.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.08.2017, 23:51
Ответы с готовыми решениями:

Rigidbody.velocity по локальной оси forward. Как правильно прилагать силу в локальной оси объекта ?
двигаю объект вот таким образом rb.velocity = speedRb * transform.forward; но сила воздействует с глобальных координатах. поворот...

Kinematic Rigidbody vs no rigidbody
Есть ли какая то разница с точки зрения обработки столкновений, если у объекта есть rigidbody с isKinematic true, или если у объекта нет...

Гаубица, прошу замечания
Модель в блендере + ренд.

4
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
05.08.2017, 07:44
1)
Цитата Сообщение от Ислам2001 Посмотреть сообщение
force.AddForce (dir);
Зачем добавлять силу каждый кадр?
2)
А не надо в атаке искать ближайшего врага. Я уже говорил как сделать.
0
C# .NET Программист
 Аватар для Ислам2001
34 / 22 / 5
Регистрация: 11.11.2016
Сообщений: 426
05.08.2017, 19:04  [ТС]
Цитата Сообщение от Cr0c Посмотреть сообщение
А не надо в атаке искать ближайшего врага. Я уже говорил как сделать.
Мне необязательно искать ближнего врага (я это сделал уже). Проблема с переключением решена. Но появилась другая,пушка, не уничтожив объект, поворачивается на другой. Мне нужно чтобы она не поворачивалась на другой до тех пор, пока не уничтожит текущий. Логику я понял, мне нужен код. Это раз.

Цитата Сообщение от Cr0c Посмотреть сообщение
Зачем добавлять силу каждый кадр?
ОК, можно с булевой. Ты мне просто скажи, как сделать так, чтобы пуля полетела как у артиллерии. Непрямо, а по дуге.

Добавлено через 4 часа 41 минуту
Короче, никто. Ладно.

Добавлено через 5 часов 17 минут
И как всегда сам решил проблему (на второй вопрос).
Вот код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
bool nav = true;
    if (nav == true) {
        for (int i = 0; i < target.Count; i++) {
            float distance = Vector3.Distance (transform.position, target [i].transform.position);
            if (distance < 25 && nav == true) {
                current = target [i];
                nav = false;
            }
        }
    }
    Vector3 dir = current.transform.position - transform.position;
    transform.rotation = Quaternion.Lerp (transform.rotation, Quaternion.LookRotation (dir), Time.deltaTime * 15.0f);
Причина: неправильно использовал логическую переменную.
Остался первый вопрос.
0
1 / 1 / 0
Регистрация: 15.04.2020
Сообщений: 2
18.05.2020, 15:06
ВОТ И ОТВЕТ!


короче создай обьект с помощью ПУЛИ на его скрипте на позиций в котором БЫЛА сама ПУЛЯ, он же летит. , и сразу же наблюдаем СОЗДАННЫМ обьектом за нашей ПУЛЕЙ , то есть получается наш созданный обьект сзади летящий пули ,смотрит на него, на ПУЛЮ. потом Его угол поворота Rotation присваеваем к самой ПУЛЕ ,это будет выглядит более менее релистично,


А при столкновений отключай это присвоение)
0
109 / 81 / 37
Регистрация: 13.01.2016
Сообщений: 409
19.05.2020, 00:26
По первому вопросу: Один раз приложи силу при выстреле (не в каждом кадре), пуля полетит. Силу можно высчитать из уравнения броска тела под углом (из начальной скорости). Направление снаряда (по вектору скорости, то есть, смотрит туда, куда летит всегда) можно получить из вектора скорости, используя rigidbody.velocity. Это если требуется всё сделать физикой.
По опыту могу сказать, что описать это движение кодом проще, чем делать через физику. Используя всё то же уравнение движения тела под углом к горизонту, задав начальную скорость и взяв в параметрической форме уравнения за параметр время.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.05.2020, 00:26
Помогаю со студенческими работами здесь

Velocity.js
Уже все мозги сломал, не могу понять почему не работает код http://jsfiddle.net/7xE77/11/. Полностью повторил код у себя на Денвере. Уже...

Velocity не двигает
Доброго времени суток, в общем, решил разобратся в движениее через velocity, но сразу же пришел к проблеме, на всех форумах пишут что этот...

Velocity vs AddForce in 2D
Доброго времени суток ! Собственно не понятно стало когда в 2D передвигать персонажа следует через изменение Velocity а когда через...

Rigidbody
Есть модель автомобиля. На модельке Rigidbody и mesh colider. Пытаюсь написать скрипт езды(С#). Не могу понять как заставить машину...

Rigidbody
Форумчанам привет! Нужна помощь! Есть куб и есть плоскость, на куб повешен rigidbody, но куб не падает а двигаеться кнопками,...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера 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. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru