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

Стрельба из лазерной пушки

17.05.2022, 19:31. Показов 1813. Ответов 9

Студворк — интернет-сервис помощи студентам
Мне нужно стрелять из лазерной пушки, которая установлена на машине. Сделала LineRenderer, написал скрипт чтобы по нажатию кнопки был выстрел, но есть 2 проблемы. Первая состоит в том что луч летит неправильно, я направляю его вперед по оси z относительно указанного объекта, в какие то моменты он летит вперед, а в какие то в начало координат, то есть точку 0 0 0, в чем может заключаться проблема? И Второе луч после выстрела остается на месте траектории полета, как его потом убирать?
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
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class Gun : MonoBehaviour
{
    public float range = 100f;
    public float laserDuration = 0.05f;
    public GameObject shootPoint;
 
    public LineRenderer laserLine;
 
    void Start()
    {
        laserLine.enabled = true;
        laserLine.useWorldSpace = true;
    }
 
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Q))
        {
            Shoot();
        }
    }
 
    void Shoot()
    {
        RaycastHit hit;
        Physics.Raycast(shootPoint.transform.position, shootPoint.transform.forward, out hit, range);
        laserLine.SetPosition(0, transform.position);
        laserLine.SetPosition(1, hit.point);
    }
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.05.2022, 19:31
Ответы с готовыми решениями:

Стрельба, которая зависит от направления пушки
У меня есть пушка, на ней есть пустой обьект. Направление пушки меняется и соответственно меняется угол выброса снаряда. Когда я нажимаю...

На экране один за другим появляются монстры. Игрок должен уничтожать монстров выстрелами из лазерной пушки
Восьмиклассник Артем, как и многие его сверстники, любит играть в интеллектуальные игры на смартфоне, который ему купили родители. В...

Стрельба из пушки
Привет всем!!! Спасайте люди! Прога работает, все вроде хорошо... При попадании в мишень - цель разрывается, но при повторной игре...

9
 Аватар для zalec
76 / 54 / 22
Регистрация: 03.03.2019
Сообщений: 176
17.05.2022, 20:03
Сначала надо отрисовать луч. Сделать рэйкаст. Затем обнулить/выключить линерендер. В приведенном коде луч рисуется исходя из результата рэйкаста. Соответственно если рэйкаст ни куда не попадает, то луч уходит в ноль.
0
гуглю вместо тебя
 Аватар для raygman
240 / 157 / 88
Регистрация: 20.05.2021
Сообщений: 436
17.05.2022, 20:43
Лучший ответ Сообщение было отмечено Hatemsla как решение

Решение

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void Shoot()
    {
        RaycastHit hit;
        Physics.Raycast(shootPoint.transform.position, shootPoint.transform.forward, out hit, range);
        laserLine.SetPosition(0, transform.position);
        if (hit.collider == null)
        {
            laserLine.SetPosition(1, shootPoint.transform.forward * range);
        }
        else
        {
            laserLine.SetPosition(1, hit.point);
        }
        Debug.Log(hit.point);
    }
1
1 / 1 / 0
Регистрация: 31.03.2021
Сообщений: 137
18.05.2022, 19:45  [ТС]
Не помогло, в какой то момент правильно, поворачиваю машину и он где-то не там
Миниатюры
Стрельба из лазерной пушки  
0
46 / 35 / 12
Регистрация: 15.11.2011
Сообщений: 204
19.05.2022, 18:06
Рэйкаст некий луч для обнаружения столкновений, если у вас есть зоны свободные от коллайдеров, надо продумать случай если рэйкаст ни с чем не столкнулся
0
1 / 1 / 0
Регистрация: 31.03.2021
Сообщений: 137
19.05.2022, 20:19  [ТС]
Дело в том, что на скрине я пытаюсь пустить луч в куб, но вместо этого он и по идее луч должен нарисоваться от конца пушки до куба, так как направление выпуска луча ведется по оси z только прямо по нажатии клавиши. Даже если луч не попадает в коллайдер, он должен просто нарисоваться от машины по оси z * range, то есть просто прямая. Но вместо этого луч рисуется в какой то жопе, даже близко не в той точке. Мне кажется что дело в координатах, луч создается/лежит как дочерний объект пушки и он рисуется в глобальных координатах. Вопрос, как создавать/рисовать луч в локальных координатах?

Добавлено через 12 минут
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
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class Gun : MonoBehaviour
{
    public float range = 100f;
    public float laserDuration = 0.05f;
    public GameObject shootPoint;
 
    public GameObject laserObj;
    private LineRenderer laser;
 
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Q))
            Shoot();
    }
 
    void Shoot()
    {
        RaycastHit hit;
        if (Physics.Raycast(shootPoint.transform.position, shootPoint.transform.forward, out hit, range))
        {
            GameObject obj = Instantiate(laserObj, shootPoint.transform);
            laser = obj.GetComponent<LineRenderer>();
            Debug.DrawLine(shootPoint.transform.localPosition, hit.point);
            laser.SetPosition(0, transform.localPosition);
            laser.SetPosition(1, shootPoint.transform.forward * range);
            if(hit.transform.tag == "Wall"){
                GameObject.Destroy(hit.transform.gameObject);
            }
            if(hit.transform.tag == "Player"){
                var car = hit.transform.GetComponentInParent<Rigidbody>();
                StartCoroutine(SlowCar(car));
            }
        }
    }
    IEnumerator SlowCar(Rigidbody car){
        car.drag = 5;
        yield return new WaitForSeconds(3f);
        car.drag = 0;
    }
}
0
гуглю вместо тебя
 Аватар для raygman
240 / 157 / 88
Регистрация: 20.05.2021
Сообщений: 436
19.05.2022, 20:48
Hatemsla, обнова подъехала

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void Shoot()
    {
        RaycastHit hit;
        Ray ray = new Ray(shootPoint.transform.position, shootPoint.transform.forward * range);
        laserLine.SetPosition(0, shootPoint.transform.position);
        if(Physics.Raycast(ray, out hit) == true)
        {
            laserLine.SetPosition(1, hit.point);
        }
        else
        {
            Vector3 pointRay = shootPoint.transform.position + shootPoint.transform.forward * range;
            laserLine.SetPosition(1, pointRay);                              
        }
    }
0
1 / 1 / 0
Регистрация: 31.03.2021
Сообщений: 137
19.05.2022, 21:36  [ТС]
Я не могу понять как это работает! Почему теперь луч летит куда то в бок! Я ничего ни делал с кубом, что это за бред. У него вращения даже нет, как он может бросать под углом, это просто бред.
Миниатюры
Стрельба из лазерной пушки  
0
 Аватар для zhunshun
767 / 495 / 216
Регистрация: 05.04.2015
Сообщений: 2,073
20.05.2022, 07:37
Hatemsla,
C#
1
Ray ray = new Ray(shootPoint.transform.TransformDirection(transform.position), shootPoint.transform.TransformDirection(transform.position) * Vector3.forward * range);
Как то так наверное

Или так попробуи
C#
1
Ray ray = new Ray(shootPoint.transform, shootPoint.transform.TransformDirection(Vector3.forward)  * range);
0
399 / 308 / 104
Регистрация: 07.05.2017
Сообщений: 2,217
20.05.2022, 18:21
Цитата Сообщение от Hatemsla Посмотреть сообщение
это просто бред.
ты уверен ? ))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.05.2022, 18:21
Помогаю со студенческими работами здесь

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

Стрельба из пушки
Вот ссылка на программу, очень нужна помощь Ссылка удалена

Стрельба из пушки по мишени
Здравствуйте. Задание: смоделировать стрельбу из пушки по мишени, которая появляется на случайном расстоянии и высоте от пушки....

Стрельба по танку из пушки
плиз помогите, Стрельба по танку с изображением траектории стрельбы, танк не двигается выстрел происходит из пушки, которая клавишами вверх...

Стрельба из пушки по мишени, причем мишень задается случайно
нужно чтобы круг появился в случайном месте, а затем при помощи математической параболы к нему рисовалась линия


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера 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