Проблемы с горизонтальным слайдером Unity3D - PullRequest
0 голосов
/ 07 марта 2012

Я довольно новичок в программировании / Unity и пытаюсь понять, как использовать горизонтальный слайдер OnGUI.У меня есть три ползунка в диапазоне от 0 до 100, и я хочу, чтобы значение с именем pointsLeft увеличивалось / уменьшалось, когда пользователь перемещал ползунки.Кроме того, общая стоимость трех слайдеров не может превышать 100. Я был бы очень признателен, если бы кто-то мог помочь новичку!См. Код для более подробной информации.

using UnityEngine;
using System.Collections;

public class Slider : MonoBehaviour {

public float sliderA = 0.0f;
public float sliderB = 0.0f;
public float sliderC = 0.0f;

public float startingPoints = 100f;
public float pointsLeft;

void Start() {

pointsLeft = startingPoints;

}

void OnGUI () {

GUI.Label(new Rect(250, 10, 100, 25), "Points Left: " + pointsLeft.ToString());

GUI.Label (new Rect (25, 25, 100, 30), "Strength: " + sliderA.ToString());
sliderA = GUI.HorizontalSlider (new Rect (25, 50, 500, 30), (int)sliderA, 0.0f, 100.0f);

GUI.Label (new Rect (25, 75, 100, 30), "Agility: " + sliderB.ToString());
sliderB = GUI.HorizontalSlider (new Rect (25, 100, 500, 30), (int)sliderB, 0.0f, 100.0f);

GUI.Label (new Rect (25, 125, 100, 30), "Intelligence: " + sliderC.ToString());
sliderC = GUI.HorizontalSlider (new Rect (25, 150, 500, 30), (int)sliderC, 0.0f, 100.0f);

/*if(sliderA < pointsLeft) {
pointsLeft = (int)pointsLeft - sliderA; //this is not doing the magic

}

*/
//decrease pointsLeft when the slider increases or increase pointsLeft if slider decreases

//store the value from each slider when all points are spent and the user pressess a button

}

}

1 Ответ

1 голос
/ 07 марта 2012

Не обновляйте значение ползунка, пока не убедитесь, что перемещение ползунка допустимо.

Ниже этот код хранит новые значения ползунка во временных переменных, и если значение ниже разрешенных точек, то это позволяет изменение:

public float pointsMax = 100.0f;
public float sliderMax = 100.0f;
public float pointsLeft;

void OnGUI () {

  // allow sliders to update based on user interaction
  float newSliderA = GUI.HorizontalSlider(... (int)sliderA, 0.0f, sliderMax);
  float newSliderB = GUI.HorizontalSlider(... (int)sliderB, 0.0f, sliderMax);
  float newSliderC = GUI.HorizontalSlider(... (int)sliderC, 0.0f, sliderMax);

  // only change the sliders if we have points left
  if ((newSliderA + newSliderB + newSliderC) < pointsMax) {

    // Update the current values for the sliders to use next time
    sliderA = newSliderA;
    sliderB = newSliderB;
    sliderC = newSliderC;
  }

  // record the new points count
  pointsLeft = pointsMax - (sliderA + sliderB + sliderC);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...