0 / 0 / 0
Регистрация: 06.05.2023
Сообщений: 5
1

Поворот объекта к другому объекту

06.05.2023, 18:57. Показов 834. Ответов 9

Author24 — интернет-сервис помощи студентам
В игре есть помощник и враги. Помощник идёт к врагу, и уничтожает его. Но ему надо поворачиваться к врагу, тоесть смотреть на него, а не стоять к врагу боком или спиной. Для наглядности:
Поворот объекта к другому объекту

Поворот объекта к другому объекту
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.05.2023, 18:57
Ответы с готовыми решениями:

Движение объекта к другому объекту
На углу экрана(без разница где) стоит маленькое изображение коробки, а на других местах другие...

Притягивание объекта к другому объекту
Кристалл спавнится на месте врага. Как реализовать плавное движение кристалла к игроку и...

Прикрепление позиции объекта к другому объекту
Если объект А на х = 10, у = 10, z = 10, то объект Б должен быть на х = 10, у = 10, z = 20, то...

Как сделать перемещение объекта к другому объекту
Я еще новичок, но... Надо чтобы при нажатии на объект1 он находил бы на сцене объект2 и...

9
3353 / 1769 / 1025
Регистрация: 26.10.2018
Сообщений: 5,198
06.05.2023, 19:38 2
Гугл уже не в моде?
https://docs.unity3d.com/Scrip... ookAt.html
https://docs.unity3d.com/Scrip... ation.html
0
0 / 0 / 0
Регистрация: 06.05.2023
Сообщений: 5
06.05.2023, 20:28  [ТС] 3
К сожалению, эти способы не помогают. Помощник, когда подходит к врагу, странно переворачивается. А если использовать LookRotation то произойдёт вот это:
Изображения
 
0
3353 / 1769 / 1025
Регистрация: 26.10.2018
Сообщений: 5,198
06.05.2023, 21:05 4
Код будет или мне надо достать кофейную гущу?
0
0 / 0 / 0
Регистрация: 06.05.2023
Сообщений: 5
06.05.2023, 21:23  [ТС] 5
C#
1
2
3
4
5
6
7
8
9
10
void Update()
    {
        nearest = FindClosestEnemy().gameObject;
        Vector3 targetDirection = (nearest.transform.position - transform.position).normalized;
        transform.rotation = Quaternion.LookRotation(targetDirection);
        transform.rotation = Quaternion.RotateTowards(transform.rotation, nearest.transform.rotation, Time.deltaTime);
        float distance = Vector3.Distance(transform.position, nearest.transform.position);
        Debug.Log(distance);
        if (distance >= 5f) transform.localPosition = Vector3.MoveTowards(transform.position, nearest.transform.position, 5 * Time.deltaTime);
    }
0
3353 / 1769 / 1025
Регистрация: 26.10.2018
Сообщений: 5,198
06.05.2023, 22:14 6
C#
1
2
3
4
5
6
7
8
9
10
    void Update()
    {
        nearest = FindClosestEnemy().gameObject;
        Vector3 targetDirection = (nearest.transform.position - transform.position).normalized;
        targetDirection.y = 0.0f;
        transform.rotation = Quaternion.RotateTowards(transform.rotation, Quaternion.LookRotation(targetDirection), Time.deltaTime * 60);
        float distance = Vector3.Distance(transform.position, nearest.transform.position);
        Debug.Log(distance);
        if (distance >= 5f) transform.position = Vector3.MoveTowards(transform.position, nearest.transform.position, 5 * Time.deltaTime);
    }
0
0 / 0 / 0
Регистрация: 06.05.2023
Сообщений: 5
07.05.2023, 10:14  [ТС] 7
Я вместо targetDirection поставил -targetDirection, чтобы помощник шёл к врагу лицом. Происходит это:
Вложения
Тип файла: mp4 video2.mp4 (938.5 Кб, 12 просмотров)
0
Igor3D
07.05.2023, 14:04
  #8

Не по теме:

Я с Unity никак не связан, но приходилось решать эту задачу в движке Bullet. Я задавал (опцией) макс скорость поворота, не нашел способа обойтись без этого. Напр враг обнаружен, но сколько времени нужно чтобы повернуться к нему рыльцем? Другой момент - надо идти на врага/к цели, но что если он сейчас (еще) за спиной (ну или сильно сбоку)? Когда начинать движение? Может сначала повернуться или как? Интересно как это решается в юнитях?

Хотя.. тут через кактусы напролом, вряд ли такие нюансы кому интересны...

0
3353 / 1769 / 1025
Регистрация: 26.10.2018
Сообщений: 5,198
07.05.2023, 15:47 9
Цитата Сообщение от Zenith Посмотреть сообщение
Происходит это
Так а что не так? Слишком медленно поворачивает? Ну так добавь скорости в методе поворота, вместо 60 поставь 300.
0
0 / 0 / 0
Регистрация: 06.05.2023
Сообщений: 5
07.05.2023, 16:30  [ТС] 10
Ладно, я уже решил вопрос
0
07.05.2023, 16:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.05.2023, 16:30
Помогаю со студенческими работами здесь

Как прикрепить линию к объекту и провести к другому объекту?
Привет. Вот вариант с помощью метода Gizmos.DrawLine. Как видите линия проходит с центра одного...

Как сделать заспавненному объекту поворот не родителя
Есть объект, у него определенный поворот, но он спавнит префаб, у которого другой по идеи разворот...

Как масштабировать объект по мере его приближения к другому объекту(плавно)
Есть предмет к который движется к другому предмету и нужно сделать так, чтобы по мере приближения...

Движение 1 объекта к другому объекту
Как делать так, чтобы объект 1 считывал координаты объекта 2 и двигался к нему?

Почему допустимо создавать объект по другому объекту, но нельзя присваивать уже созданный объект, другому созданному объекту?
Это можно : Array a(10); a.set(0,5); Array b(a); А это нельзя : Array a(10); Array b(20);...

Как присвоить значения из одного объекта другому объекту?
у меня два объекта, мне надо присвоить значения из одного объекта другому объекту, как это можно...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

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