Страница 1 из 1

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

СообщениеДобавлено: 19 июн 2019, 19:17
Dasercom
Здравствуйте нужна помощь. Пишу игру на 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;
}
}

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

СообщениеДобавлено: 19 июн 2019, 19:34
1max1
Во-первых:
Синтаксис:
Используется csharp
Vector2 direction = playerPos - playerPos; // здесь 0.0.0 будет

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

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

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

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


Не совсем то что нужно, нужно чтоб именно поворот происходил по вектору Z. Простите может не так понятно обьяснил.

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

СообщениеДобавлено: 19 июн 2019, 19:59
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);

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

СообщениеДобавлено: 19 июн 2019, 20:26
Dasercom
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);


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

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

СообщениеДобавлено: 19 июн 2019, 21:13
1max1
Синтаксис:
Используется 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;
        }
    }
}

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

СообщениеДобавлено: 19 июн 2019, 21:27
Dasercom
[quote="1max1"] Спасибо огромное).