Поворот объекта в сторону другого объекта (не камера)

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Поворот объекта в сторону другого объекта (не камера)

Сообщение Dasercom 19 июн 2019, 19:17

Здравствуйте нужна помощь. Пишу игру на Unity. Игра 2D. Хочу исполнить поворот головы турели в сторону игрока. Пробовал через функцию LookAt(), но она странно работает.
Поэтому взял за основу код от слежения за курсором, но что то походу не догоняю скрипт не работает. Ошибка возможно глупая.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class LookAt : MonoBehaviour
{
private float speed = 10f;

private Vector2 currentDirection = new Vector3( 0.0f, 1.0f, 0.0f );
private Transform transformObject;

void Start()
{
transformObject = this.transform;
}


void Update()
{
Vector2 playerPos = GameObject.FindGameObjectWithTag("Player").position;
Vector2 objectPos = transformObject.position;

Vector2 direction = playerPos - playerPos;
direction.Normalize();

currentDirection = Vector2.Lerp(currentDirection, direction, speed * Time.deltaTime);
transformObject.up = currentDirection;
}
}
Dasercom
UNец
 
Сообщения: 6
Зарегистрирован: 19 июн 2019, 19:10

Re: Поворот объекта в сторону другого объекта (не камера)

Сообщение 1max1 19 июн 2019, 19:34

Во-первых:
Синтаксис:
Используется csharp
Vector2 direction = playerPos - playerPos; // здесь 0.0.0 будет

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

Re: Поворот объекта в сторону другого объекта (не камера)

Сообщение Dasercom 19 июн 2019, 19:50

1max1 писал(а):Во-первых:
Синтаксис:
Используется csharp
Vector2 direction = playerPos - playerPos; // здесь 0.0.0 будет

Во-вторых:
https://docs.unity3d.com/ScriptReferenc ... wards.html


Не совсем то что нужно, нужно чтоб именно поворот происходил по вектору Z. Простите может не так понятно обьяснил.
Dasercom
UNец
 
Сообщения: 6
Зарегистрирован: 19 июн 2019, 19:10

Re: Поворот объекта в сторону другого объекта (не камера)

Сообщение 1max1 19 июн 2019, 19:59

Синтаксис:
Используется csharp
static class EX
{
    public static void LookAt2DSmooth(this Transform me, Vector3 target, Vector3 eye, float intensity)
    {
        Vector3 look = target - me.position;

        float sAngle = Vector2.SignedAngle(eye, look);

        if (sAngle != 0.0f)
        {
            Vector3 eulerAngles = me.eulerAngles;
            eulerAngles.z = Mathf.Lerp(eulerAngles.z, eulerAngles.z + sAngle, intensity * Time.deltaTime);
            // или так
            // eulerAngles.z = Mathf.MoveTowards(eulerAngles.z, eulerAngles.z + sAngle, intensity * Time.deltaTime);
            me.eulerAngles = eulerAngles;
        }
    }
}


Синтаксис:
Используется csharp
// update
var playerPos = GameObject.FindGameObjectWithTag("Player").position;
transformObject.LookAt2DSmooth(playerPos, transformObject.up, 10.0f);
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Поворот объекта в сторону другого объекта (не камера)

Сообщение Dasercom 19 июн 2019, 20:26

1max1 писал(а):
Синтаксис:
Используется csharp
static class EX
{
    public static void LookAt2DSmooth(this Transform me, Vector3 target, Vector3 eye, float intensity)
    {
        Vector3 look = target - me.position;

        float sAngle = Vector2.SignedAngle(eye, look);

        if (sAngle != 0.0f)
        {
            Vector3 eulerAngles = me.eulerAngles;
            eulerAngles.z = Mathf.Lerp(eulerAngles.z, eulerAngles.z + sAngle, intensity * Time.deltaTime);
            // или так
            // eulerAngles.z = Mathf.MoveTowards(eulerAngles.z, eulerAngles.z + sAngle, intensity * Time.deltaTime);
            me.eulerAngles = eulerAngles;
        }
    }
}


Синтаксис:
Используется csharp
// update
var playerPos = GameObject.FindGameObjectWithTag("Player").position;
transformObject.LookAt2DSmooth(playerPos, transformObject.up, 10.0f);


а можно код одним сообщением, просто выдает ошибку при компиляции... Сорь, я ток начал этим заниматься...
Dasercom
UNец
 
Сообщения: 6
Зарегистрирован: 19 июн 2019, 19:10

Re: Поворот объекта в сторону другого объекта (не камера)

Сообщение 1max1 19 июн 2019, 21:13

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

public class LookAt : MonoBehaviour
{
    float speed = 10f;
    Transform player;

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

    void Update()
    {
        transform.LookAt2DSmooth(player.position, transform.up, speed);
    }
}

static class EX
{
    public static void LookAt2DSmooth(this Transform me, Vector3 target, Vector3 eye, float intensity)
    {
        Vector3 look = target - me.position;

        float sAngle = Vector2.SignedAngle(eye, look);

        if (sAngle != 0.0f)
        {
            Vector3 eulerAngles = me.eulerAngles;
            eulerAngles.z = Mathf.Lerp(eulerAngles.z, eulerAngles.z + sAngle, intensity * Time.deltaTime);
            me.eulerAngles = eulerAngles;
        }
    }
}
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Поворот объекта в сторону другого объекта (не камера)

Сообщение Dasercom 19 июн 2019, 21:27

[quote="1max1"] Спасибо огромное).
Dasercom
UNец
 
Сообщения: 6
Зарегистрирован: 19 июн 2019, 19:10


Вернуться в Почемучка

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

Сейчас этот форум просматривают: GoGo.Ru [Bot] и гости: 11