CodingGreek Ответов: 1

Проблема топливной системы Unity 2D для автомобиля


Я тоже новичок, учусь кодировать с помощью Unity. Я хочу настроить топливную систему так, чтобы при движении автомобиля ГАЗ расходовался. Но мой слайдер пользовательского интерфейса (который показывает указатель уровня топлива) просто не работает. Пожалуйста, помогите по приведенным ниже 2 скриптам:

Все, пожалуйста, не обращайте внимания на код, который я пытаюсь выучить из каждого видео, которое могу. Я просто не могу найти книгу, которая помогла бы изучить C# и Unity вместе. Я знаю большинство основ, но все же.

Пожалуйста, помогите!! Огромное спасибо...

Что я уже пробовал:

public class PlayerController : MonoBehaviour
{
    private Rigidbody2D rb2d;
    private int count;

    public float speed;
    public Text countText;

    FuelSystem fuelSystem;
    
    // Start is called before the first frame update
    void Start()
    {
        rb2d = GetComponent<Rigidbody2D>();
        SetCountText();

        fuelSystem = GetComponent<FuelSystem>(); 
    }

    void FixedUpdate()
    {
        float moveHorizontal = Input.GetAxis("Horizontal");
        float moveVertical = Input.GetAxis("Vertical");
        Vector2 movement = new Vector2(moveHorizontal, moveVertical);

        rb2d.AddForce(movement * speed);

        fuelSystem.fuelComsumptionRate = speed;
        fuelSystem.ReduceFuel();

        if (Input.GetButtonDown("Jump"))
        {
            gameObject.GetComponent<Rigidbody2D>().AddForce(new Vector2(0f, 2.5f), ForceMode2D.Impulse);
        }
    }


    private void OnTriggerEnter2D(Collider2D other)
    {
        if (other.gameObject.CompareTag ("Coin"))
        {
            other.gameObject.SetActive(false);
            count = count + 1;
            SetCountText();
        }
    }

    void SetCountText()
    {
        countText.text = "Coins " + count.ToString() + " of 3";
    }
}


public class FuelSystem : MonoBehaviour
{
    public float startFuel;
    public float maxFuel;
    public float fuelComsumptionRate;


    public Slider fuelIndicatorSld;
    public Text fuelIndicatorTxt;

    void Start()
    {
        if (startFuel > maxFuel)
        {
            startFuel = maxFuel;

            fuelIndicatorSld.maxValue = maxFuel;
            UpdateUI();

        }
    }


    public void ReduceFuel ()
    {
        startFuel = Time.deltaTime * fuelComsumptionRate;
        UpdateUI();
    }

    void UpdateUI()
    {
        fuelIndicatorSld.value = startFuel;
        fuelIndicatorTxt.text = "Fuel Left:" + startFuel.ToString("0") + " %";

        if (startFuel <= 0)
        {
            startFuel = 0;
            fuelIndicatorTxt.text = "Out of Gas!";
        }
    }
}

1 Ответов

Рейтинг:
1

F-ES Sitecore

Отражает ли вывод текста то, что вы ожидаете? Код вашей топливной системы устанавливает максимальное значение ползунка только в том случае, если startFuel > maxFuel, устанавливаете ли Вы значения в редакторе для тех случаев, когда это условие не выполняется? Кроме того, в ReduceFuel вы устанавливаете startFuel как скорость deltaTime*. Если вы едете с постоянной скоростью с постоянной частотой кадров, то вы просто устанавливаете startFuel на одно и то же значение, так что вы не увидите никаких или незначительных изменений. Ты наверное имеешь в виду

startFuel -= Time.deltaTime * fuelComsumptionRate;


"- ="- Это сокращение для обозначения

startFuel = startFuel - (...)


таким образом, вы вычитаете расход топлива из значения топлива, которое будет видеть ваше падение топлива по отношению к скорости.


CodingGreek

Да. Спасибо!! Топливный регулятор не войдет. Но если бы вы могли помочь мне еще кое в чем. Хотя автомобиль находится в одном месте, указатель уровня топлива продолжает опускаться до нуля, а также автомобиль все еще продолжает двигаться. Как вы сказали в приведенном выше комментарии, как бы я мог настроить это в своем скрипте?

F-ES Sitecore

Вы устанавливаете расход топлива на скорость, которая выглядит как постоянная, я не вижу, чтобы вы ее меняли. Если скорость остается неизменной, то расход топлива остается неизменным, так что ваше топливо используется с постоянной скоростью независимо от этого. Если ваша игра имеет боковую прокрутку, я не знаю, почему вы добавляете вертикальную силу, основанную на оси? Независимо от того, что вам нужно сделать, это установить fuelComsumptionRate как нечто основанное на текущих входных данных, что-то вроде

moveHorizontal * скорость

Таким образом, если нет горизонтального входа, вы не используете топливо, и чем больше горизонтальный вход, тем больше топлива вы используете. Это если игра действительно имеет боковую прокрутку, если нет, то вам нужно будет использовать величину "движения", чтобы учесть оба входа.

Вам также нужно будет преобразовать moveHorizontal в положительный, если он отрицательный, иначе вы "получите" топливо, идущее в обратном направлении :)

CodingGreek

Да, это боковой скроллер... Я забыл, что поместил вертикальную силу, когда она мне была не нужна. Я использовал unity learning для изучения сценариев .
Спасибо Вам за помощь я буду обновлять его как таковой :)