Прицел на конце луча и объекте на который этот луч попал

Программирование на Юнити.

Прицел на конце луча и объекте на который этот луч попал

Сообщение jigsawjigsaw 23 янв 2019, 20:48

Здравствуйте!
Задача стоит следующая. Есть пушка которая выпускает луч, и при попадании на какой нибудь объект на пересечении луча и объекта появлялся прицел.
Изображение
вот мой код
Синтаксис:
Используется csharp
 objectPos = Camera.main.WorldToScreenPoint(transform.position);
        dir = Input.mousePosition - objectPos;

        transform.rotation = Quaternion.Euler(new Vector3(0, 0, Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg - angle)); ;
        RaycastHit2D hit = Physics2D.Linecast(transform.position, dir, 1 << LayerMask.NameToLayer("Boss"));
        if (Muzzle != null)
        {
            Muzzle.position = hit2.point;
        }
 


При таком варианте прицел находится в неправильном положении
Изображение

Для того чтобы решить этот вопрос мне нужно найти точку пересечения между лучом и объектом.
Изображение

Как это сделать?
jigsawjigsaw
UNIт
 
Сообщения: 56
Зарегистрирован: 25 авг 2016, 21:23

Re: Прицел на конце луча и объекте на который этот луч попал

Сообщение 1max1 23 янв 2019, 22:37

А если так? У тебя пушка правильно вращается? И в коде ты не используешь hit, а используешь hit2, не понятно как он у тебя получается.
Синтаксис:
Используется csharp
var mp = Camera.main.ScreenToWorldPoint(Input.mousePosition);
dir = mp - transform.position;
dir.z = 0.0f;
 

Для дебага используй https://docs.unity3d.com/ScriptReferenc ... wLine.html чтобы видеть что откуда вылетает.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Прицел на конце луча и объекте на который этот луч попал

Сообщение jigsawjigsaw 24 янв 2019, 19:59

1max1 писал(а):А если так? У тебя пушка правильно вращается? И в коде ты не используешь hit, а используешь hit2, не понятно как он у тебя получается.
Синтаксис:
Используется csharp
var mp = Camera.main.ScreenToWorldPoint(Input.mousePosition);
dir = mp - transform.position;
dir.z = 0.0f;
 

Для дебага используй https://docs.unity3d.com/ScriptReferenc ... wLine.html чтобы видеть что откуда вылетает.


По поводу hit2 я ошибся там hit. По поводу дебага я знаю. Кажется я не совсем правильно сформулировал проблему. Мне нужно сделать так чтобы луч попадая на объект не пересекал его а останавливался на объекте. И в конце луча появлялся прицел
jigsawjigsaw
UNIт
 
Сообщения: 56
Зарегистрирован: 25 авг 2016, 21:23

Re: Прицел на конце луча и объекте на который этот луч попал

Сообщение jigsawjigsaw 26 янв 2019, 10:18

Забудьте что я сказал. Решение нереально простое

Скрытый текст:
Vector3 objectPos = new Vector3(0, 0, 0);
Vector3 dir = new Vector3(0, 0, 0);

// objectPos = Camera.main.WorldToScreenPoint(transform.position);
objectPos = Camera.main.ScreenToWorldPoint(transform.position);
dir = Input.mousePosition - objectPos;
dir.z = 0.0f;
transform.rotation = Quaternion.Euler(new Vector3(0, 0, Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg - angle)); ;
Debug.DrawRay(transform.position, dir, Color.red);
RaycastHit2D hit = Physics2D.Raycast(transform.position, dir, 1 << LayerMask.NameToLayer("Boss"));

if (Muzzle != null)
{
Muzzle.position = hit.point;
}
jigsawjigsaw
UNIт
 
Сообщения: 56
Зарегистрирован: 25 авг 2016, 21:23


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4