Unity - Как создать префаб по заданному значению слайдера - PullRequest
0 голосов
/ 04 февраля 2019

Я делаю 2D-игру, основанную на уровнях, в которых на каждом уровне у вас есть три контрольных точки в панели отслеживания очков.Игрок должен достичь нижней контрольной точки, чтобы иметь возможность перейти на следующий уровень, но получит бонус, если достигнет 2-й и 3-й контрольных точек.

Я решил использовать ползунок в качестве шкалы очков.Мой вопрос:

Есть ли способ сохранить определенное значение панели ползунка в методе «Пуск» и создать префаб маркера в этой позиции?Вот пример:

  • Максимальное значение ползунка на уровне 1 равно 100.
  • Я хочу создать первый маркер с некоторым отступом в y в 50`s положение ползунка, второй в позиции 75 и третий в позиции 100.

Моя текущая логика заключается в том, что мне нужно каким-то образом получить желаемое значение и найти его преобразование, но я не могу найти способ кодировать это, я понятия не имею, как получитьположение, которое я хочу.

Вот несколько изображений, иллюстрирующих то, что я пытаюсь сделать:

Level 1 Image

Level 2 Image

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Я нашел решение!

Исходя из того, что мне удалось это сделать:

    void SpawnCheckPoint() {
        mySlider.maxValue = gameLevel[currentLevel].maxValue; //Set the slider's Max Value to the max value of the level.
        float sliderMaxValue = mySlider.maxValue;
        float sliderWidth = slider.GetComponent<RectTransform>().sizeDelta.x; //Get the width of the Slider.
        float zeroValue = slider.transform.position.x - (sliderWidth / 2); //Get the leftmost corner of the slider.

        //Loop to Instantiate the 3 checkpoints.
        for (int i = 0; i < gameLevel[currentLevel].values.Length; i++) { 
            float valueToIncrement = (gameLevel[currentLevel].values[i] / sliderMaxValue); //Get the % of the checkpoint based on the max value of the level.
            float newPos = (sliderWidth * valueToIncrement); //New position in screen

            //Instantiate the object as a child of the Slider
            GameObject checkpoint = Instantiate(checkPoint, new Vector3(zeroValue + newPos - xPadding, slider.transform.position.y - yPadding, slider.transform.position.z),
                                            Quaternion.identity, GameObject.FindGameObjectWithTag("Slider").transform);
        }
    }

Вероятно, это не лучший способ сделать то, что я хочу, но он работает просто отлично.

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

0 голосов
/ 04 февраля 2019

Я бы получил атрибут ширины ползунка, а затем разделил бы его на sliderMax, результатом будет ширина одного% на ползунке.затем вы можете добавить или вычесть несколько значений, чтобы получить процентное место на панели.

пример: slider.x = 50 slider.width = 200;

increment = slider.width/100; // это будетрезультат - два, что дает вам два пикселя на процент.

, поэтому ваше 50-процентное размещение будет: sliderx+(increment*50);

имейте в виду, что это весь псевдокод, разработанный для того, чтобы дать вам представление окак добиться желаемого результата

...