Как смягчить повороты объекта?

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

Как смягчить повороты объекта?

Сообщение Sice 28 фев 2023, 09:35

Добрый день! Рисую через Line Renderer линию и пускаю объект по этому пути. Всё работает нормально за исключением дёрганья объекта на поворотах. Подскажите как убрать эти дёрганья и сделать повороты и вообще само движение объекта плавное и приятное для глаз. Спасибо. Код ниже и то, как у меня сейчас это работает
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour
{
    public float speed = 5f;

    [SerializeField]
    private LineRenderer lineRenderer;
    private List<Vector3> linePoints = new List<Vector3>();
    private int targetPointIndex = 0;
    private Vector3 targetPoint;
    private float lineLength;
    private float elapsedTime;
    private bool isMoving = false;

    void Start()
    {
        lineRenderer = GetComponent<LineRenderer>();
    }

    void Update()
    {
        if (Input.GetMouseButton(0))
        {
            Vector3 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            mousePosition.z = 0;
            linePoints.Add(mousePosition);

            if (lineRenderer != null)
            {
                lineRenderer.positionCount = linePoints.Count;
                lineRenderer.SetPosition(linePoints.Count - 1, mousePosition);
            }
        }

        if (Input.GetMouseButtonUp(0))
        {
            lineLength = 0;
            for (int i = 1; i < linePoints.Count; i++)
            {
                lineLength += Vector3.Distance(linePoints[i], linePoints[i - 1]);
            }

            targetPointIndex = 1;
            targetPoint = linePoints[targetPointIndex];
            transform.up = (targetPoint - transform.position).normalized;

            isMoving = true;
        }

        if (isMoving && linePoints.Count > 1 && targetPointIndex < linePoints.Count)
        {
            Vector3 direction = (targetPoint - transform.position).normalized;
            transform.up = direction;
            transform.position += direction * speed * Time.deltaTime;

            if (Vector3.Distance(transform.position, targetPoint) < 0.1f)
            {
                targetPointIndex++;
                if (targetPointIndex < linePoints.Count)
                {
                    targetPoint = linePoints[targetPointIndex];
                    transform.up = (targetPoint - transform.position).normalized;
                }
            }
        }
    }
}
 

Как это работает сейчас
Аватара пользователя
Sice
UNIт
 
Сообщения: 87
Зарегистрирован: 25 окт 2014, 13:51

Re: Как смягчить повороты объекта?

Сообщение Jarico 28 фев 2023, 13:13

Vector3.Lerp - линейное сглаживание
Vector3.Slerp - траектория будет сглажена по сферической траектории
Github: _https://github.com/redheadgektor
Discord: Конь! Чаю!#9382 (сижу редко)
YouTube: _https://www.youtube.com/channel/UCPQ04Xpbbw2uGc1gsZtO3HQ
Telegram: _https://t.me/redheadgektor
Аватара пользователя
Jarico
Адепт
 
Сообщения: 1084
Зарегистрирован: 06 янв 2019, 17:37
Откуда: 0xDEAD
Skype: none
  • Сайт


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

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

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