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

public class Spin : MonoBehaviour
{
    public GameObject[] droidJets;

    public float rotationSpeedMin = 0;
    public float rotationSpeedMax = 180;
    public float currentSpeed = 0;
    public float acceleration = 1;

    private void Update()
    {
        
    }
}

Chcę, aby dysze były wirowane tylko na X i nonstop, aby przyspieszyć do maksymalnej prędkości, a następnie z powrotem do minącej prędkości i powoli gładki jak dając spinięciem moc, aby przyspieszyć i przyspieszyć przy użyciu przyspieszenia.

Próbowałem tego:

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

public class Spin : MonoBehaviour
{
    public GameObject[] droidJets;

    public float rotationSpeedMin = 0;
    public float rotationSpeedMax = 180;
    public float currentSpeed = 0;
    public float acceleration = 100f;

    void Update()
    {
        acceleration = currentSpeed += Time.deltaTime;

        for (int i = 0; i < droidJets.Length; i++)
        {
            droidJets[i].transform.Rotate(Vector3.right * acceleration * Time.deltaTime);
        }
    }
}

Ale przyspieszenie jest bardzo powolne, zajmuje dużo czasu, aby przyspieszyć. A jak mogę to zrobić, jeśli dotrą do maksymalnej prędkości, zaczną powoli gładki, aby przyspieszyć z powrotem do min?

-1
Daniel Lipman 22 listopad 2020, 01:49

1 odpowiedź

Najlepsza odpowiedź

Jedną z rzeczy, które możesz zrobić, to zamiast przyspieszenia = progrespeed + = time.deltatime;

Możesz użyć funkcji MATHF.LEP, aby przejść z minimalnej prędkości do maksymalnej prędkości.

if(acceleration < MaximumSpeed&&IncreaseAcceleration)
    acceleration=Mathf.Lerp(MinimumSpeed,MaxmimumSpeed,0.125f);

if(acceleration > MaximumSpeed) {
    IncreaseAcceleration = false;
    Acceleration = Mathf.Lerp(MaximumSpeed,MinimumSpeed,0.125f);
}

0
YouXiang-Wang 22 listopad 2020, 14:16