поворот спрайта по отношению к игроку

Форум для всего, что связано с ИИ.

поворот спрайта по отношению к игроку

Сообщение DivanO 19 апр 2016, 15:25

Доброго времени формучане!
Сложилась небольшая проблемка,так как осваиваю юнити недавно...
Ситуация такая:
есть 2 спрайта
написал небольшой скрипт на движение энеми в сторону игрока,спрайт движется,поворачивается в сторону игрока.
проблема в в следующем - по оси Y объект движется прямо к игроку(правильно тобишь),по оси Х движется по дуге,тобишь пытается зайти игроку в спину...
как решить данную проблему не представляю,поэтому прошу помощи у вас товарищи!)
DivanO
UNец
 
Сообщения: 7
Зарегистрирован: 19 апр 2016, 15:15

Re: поворот спрайта по отношению к игроку

Сообщение Cr0c 19 апр 2016, 15:32

Телепаты в отпуске!
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81

Re: поворот спрайта по отношению к игроку

Сообщение DivanO 19 апр 2016, 15:35

Синтаксис:
Используется csharp
public class EnemyMove : MonoBehaviour
{

        private Transform Player;
       

        public float speed = 0.5f;
       

        void Start ()
        {
                Player = GameObject.Find("Player").transform;
        }
       

        void Update ()
        {
                Vector3 moveDirection = Player.position - transform.position;
                if (moveDirection != Vector3.zero)
                {
                        float angle = Mathf.Atan2(-moveDirection.x, moveDirection.y) * Mathf.Rad2Deg;
                        transform.rotation = Quaternion.AngleAxis(angle, Vector3.forward);

                        Vector3 directionToTarget = (Player.transform.position - transform.position).normalized;
                        transform.Translate(directionToTarget * speed * Time.deltaTime);
                       
                        Vector3 delta = Player.position - transform.position;
                        delta.Normalize();
                       
                        float moveSpeed = speed * Time.deltaTime;
                        transform.position = transform.position + (delta * moveSpeed);
               
                }

}
}

тащемта вот он
DivanO
UNец
 
Сообщения: 7
Зарегистрирован: 19 апр 2016, 15:15

Re: поворот спрайта по отношению к игроку

Сообщение Cr0c 19 апр 2016, 15:49

чем
Синтаксис:
Используется csharp
Vector3 directionToTarget = (Player.transform.position - transform.position).normalized;
 
отличается от
Синтаксис:
Используется csharp
Vector3 delta = Player.position - transform.position;
delta.Normalize();
???
почему
Синтаксис:
Используется csharp
float angle = Mathf.Atan2(-moveDirection.x, moveDirection.y) * Mathf.Rad2Deg;
transform.rotation = Quaternion.AngleAxis(angle, Vector3.forward);
вместо
Синтаксис:
Используется csharp
transform.LookAt
???
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81

Re: поворот спрайта по отношению к игроку

Сообщение DivanO 19 апр 2016, 16:04

я как бы поэтому помощи и прошу,вроде бы доступно объяснил что с юнити только знакомлюсь.
DivanO
UNец
 
Сообщения: 7
Зарегистрирован: 19 апр 2016, 15:15

Re: поворот спрайта по отношению к игроку

Сообщение DivanO 19 апр 2016, 16:06

Синтаксис:
Используется csharp
float angle = Mathf.Atan2(-moveDirection.x, moveDirection.y) * Mathf.Rad2Deg;
transform.rotation = Quaternion.AngleAxis(angle, Vector3.forward);

а каким способом можно отслеживать положение по двум осям?

лукэтом пробовал,спрайт выгибается штоле...крутится на месте вокруг плэера
DivanO
UNец
 
Сообщения: 7
Зарегистрирован: 19 апр 2016, 15:15

Re: поворот спрайта по отношению к игроку

Сообщение samana 19 апр 2016, 16:23

Если это спрайты, то можно поворачивать спрайт правой стороной на цель и двигать в этом направлении, как-то так:
Синтаксис:
Используется csharp
using UnityEngine;

public class GoToTarget : MonoBehaviour
{
    public GameObject target;

    void Update()
    {
        Vector3 dir = target.transform.position - transform.position;
        float dist = dir.magnitude;
        float speed = 0.01f;
        if (dist > 0.01)
        {
            transform.right = dir;
            transform.position += transform.right * speed;
        }

    }
}
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: поворот спрайта по отношению к игроку

Сообщение DivanO 19 апр 2016, 16:35

Синтаксис:
Используется csharp
using UnityEngine;

public class GoToTarget : MonoBehaviour
{
    public GameObject target;

    void Update()
    {
        Vector3 dir = target.transform.position - transform.position;
        float dist = dir.magnitude;
        float speed = 0.01f;
        if (dist > 0.01)
        {
            transform.right = dir;
            transform.position += transform.right * speed;
        }

    }
}


в этом случае спрайт вращаться начинает по осям x y
DivanO
UNец
 
Сообщения: 7
Зарегистрирован: 19 апр 2016, 15:15

Re: поворот спрайта по отношению к игроку

Сообщение samana 19 апр 2016, 16:43

DivanO писал(а):в этом случае спрайт вращаться начинает по осям x y

Та нет, он вращается по Z.
А вам нужно как вращать? Ваш спрайт в игре должен двигаться по Z? А то слово "спрайт" сбивает с понимания того, какая у вас игра 2d или 3d.
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: поворот спрайта по отношению к игроку

Сообщение DivanO 19 апр 2016, 16:50

Та нет, он вращается по Z.
А вам нужно как вращать? Ваш спрайт в игре должен двигаться по Z? А то слово "спрайт" сбивает с понимания того, какая у вас игра 2d или 3d.


да 2D,позиции соответственно по x-y,вращение z.
с вашим скриптом происходит вращение по x-y-z почему-то :)

хотя через какое-то время вращение по x-y прекращается,когда объекты сближаются
DivanO
UNец
 
Сообщения: 7
Зарегистрирован: 19 апр 2016, 15:15

Re: поворот спрайта по отношению к игроку

Сообщение samana 19 апр 2016, 16:55

DivanO писал(а):с вашим скриптом происходит вращение по x-y-z почему-то

Этого не может быть. Ведь в коде нет предпосылок на это. Может у вас в коде что-то ещё влияет на повороты этого спрайта?
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: поворот спрайта по отношению к игроку

Сообщение DivanO 19 апр 2016, 17:01

Этого не может быть. Ведь в коде нет предпосылок на это. Может у вас в коде что-то ещё влияет на повороты этого спрайта?


Может :))
я не заметил что спрайт дернул вверх и позиция с 1 поднялась на 4.3,поэтому он при движении снижался до высоты объекта прописанного в коде :))

отсюда и обороты по всем трем осям,лол

а за скрипт премного благодарен!!
DivanO
UNец
 
Сообщения: 7
Зарегистрирован: 19 апр 2016, 15:15

Re: поворот спрайта по отношению к игроку

Сообщение Cr0c 19 апр 2016, 17:07

Спрайт лицом куда смотрит - вверх, вниз, влево, вправо? Если вверх - то двигать в направлении transform.up и, соответственно, направление ему задавать через эту ось
Синтаксис:
Используется csharp
Vector3 dir = (target.position - transform.position).normalized;
transform.up = dir;
transform.position += dir * speed * Time.deltaTime;
 
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81


Вернуться в Искуственный Интеллект

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

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