Как сделать в Unity слайдер, который будет отвечать за скорость передвижения объекта?

424
13 сентября 2017, 10:37

У меня есть поезд, которые двигается по горизонтали. Имеется слайдер, который должен отвечать за скорость передвижения поезда. Как прописать данный код? Вот код который у меня уже есть:

public bool flag = false;
float speed = 0.2f;
public GameObject cub;
public Text text;
public Light l;
public void button(){
    if (flag)
        flag = false;
    else
        flag = true;
}
void Update() {
    if (flag) {
        transform.Translate (new Vector3 (speed, 0, 0));
    }
}
void OnTriggerEnter(Collider col) {
    Debug.Log ("Сработал триггер и остановился поезд");
    if (col.gameObject.name == "Cube") {
        flag = false; // остановится
    }
}

Картинка для наглядности.

Answer 1

В данном случае не совсем понятно, слайдер будет сам отвечать за скорость (то есть его значение и есть speed) или слайдер будет влиять на скорость speed.

Предположим, что у нас изначально управление идет кнопками влево/вправо. Движение будет такое:

void Update () {
    transform.Translate(new Vector3(Input.GetAxis("Horizontal") * speed * Time.deltaTime, 0, 0));
}

Чтобы воспользоваться значением слайдера нужно это значение оттуда взять. Это можно сделать тысячей способов и всё зависит от ситуации и сложности игры и пр.

  1. Способ — сделать публичную переменную в скрипте

    public Slider slider; 

    Она потребует импорта пространства имен using UnityEngine.UI;

    И далее в эту переменную в инспекторе перенести сам слайдер из канваса

  2. Способ — тоже сделать переменную в скрипте, но при этом найти слайдер при старте программы

    void Start () {
        slider = GameObject.Find("Canvas/Slider").gameObject.GetComponent<Slider>();
    }

    Как работать с Find можно посмотреть в документации.

  3. Способ — еще куча вариантов...

В итоге в переменной slider будет ссылка на объект. Теперь просто смотрим на его параметры и банально применяем его переменную value.

void Update () {     
    // var x = new Vector3(Input.GetAxis("Horizontal") * slider.value * Time.deltaTime;
    var x = new Vector3(Input.GetAxis("Horizontal") * speed * slider.value * Time.deltaTime;  
    transform.Translate(x, 0, 0));
}
READ ALSO
Выделить button при нажатом tabPage c#

Выделить button при нажатом tabPage c#

Подскажите пожалуйста, как сделать так чтобы при нажатии на вкладку tabPage выделялась нужная кнопка buttonСпасибо

248
Программное добавление ключа в App.config

Программное добавление ключа в App.config

Создал свою секцию в файле конфигов, могу править значения в существующих строках, но не получается удалять и добавлять строкиМой код:

241
В ASP .Net Web Forms создать кнопки передать данные в метод

В ASP .Net Web Forms создать кнопки передать данные в метод

В ASPNet Web Forms пробую создать кнопки и добавить в определенное место, привязать к событию щелчку по ней, передать уникальный индификатор кнопки...

227
закруглить (сгладить) углы в Xamarin

закруглить (сгладить) углы в Xamarin

Подскажите пожалуйста, как закруглить (сгладить) углы у элемента (например TextView) в Xamarin?

269