Unity 2D объект лицо направление его движения - PullRequest
0 голосов
/ 20 января 2019

Привет, ребята, у меня проблемы с ориентацией 2D спрайта в направлении движения.Они следуют за путевыми точками на карте, и я хочу, чтобы они вращались по мере движения через путевые точки, но у меня возникли проблемы с их реализацией.Если бы вы могли помочь, я был бы признателен, спасибо.

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

public class WaypointEnemy : MonoBehaviour
{

    public float speed = 5f;

    private Transform target;
    private int wavepointIndex = 0;
    private Rigidbody2D rigidBody;
    bool points = false;

    private void Start()
    {

        {
            int random = (Random.Range(-10, 10));
            if (random >= 0)
            {
                target = Waypoints.waypoints[0];
                points = true;
            } else {
                target = Waypoints2.waypoints2[0];
            }
        }
    }

    void Update()
    {
        Vector2 dir = target.position - transform.position;
        transform.Translate(dir.normalized * speed * Time.deltaTime, Space.World);
        if (Vector2.Distance(transform.position, target.position) <= 0.4f)
        {
            GetNextWaypoint();
        }
    }
    void GetNextWaypoint()
    {
        if (points == false)
        {
            wavepointIndex++;
            target = Waypoints.waypoints[wavepointIndex];
        } else
        {
            wavepointIndex++;
            target = Waypoints2.waypoints2[wavepointIndex];
        }
    }
}

1 Ответ

0 голосов
/ 21 января 2019

Добавьте следующую функцию в ваш скрипт и вызовите ее в обновлении

private void RotateTowardsTarget()
{
    float rotationSpeed = 10f; 
    float offset = 90f;    
    Vector3 direction = target.position - transform.position;
    direction.Normalize();
    float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;
    Quaternion rotation = Quaternion.AngleAxis(angle + offset, Vector3.forward);
    transform.rotation = Quaternion.Slerp(transform.rotation, rotation, rotationSpeed * Time.deltaTime);
}

Если вращение кажется отключенным, просто отрегулируйте значение «смещения» с коэффициентом 90 или полностью удалите его.

...