Unity - 如何在滑块的特定值处实例化预制件

Unity - How to instantiate prefab at slider`s specific value

我正在制作一款基于关卡的 2d 游戏,其中每个关卡的分数跟踪栏中都有三个检查点。玩家必须到达最低的检查点才能进入下一关,但如果他到达第2和第3个检查点将获得奖励。

我决定使用滑块作为计分栏。我的问题是:

有没有办法在Start方法中存储Slider的bar的特定值并在该位置实例化一个标记预制件?这是一个例子:

我目前的逻辑是,我需要以某种方式获得我想要的值并找到他的 Transform,但我找不到编码的方法,我不知道如何获得我想要的位置。

这里有一些图片来说明我正在尝试做的事情:

我会获取滑块的宽度属性,然后将其除以 sliderMax,结果将是滑块上单个 % 的宽度。然后,您可以加上或减去它的倍数以获得栏中的百分比。

示例:slider.x=50 slider.width=200;

increment = slider.width/100; //这将导致两个,每个百分比给你两个像素。

因此您的 50% 展示位置为:sliderx+(increment*50);

请记住,这都是伪代码,旨在让您了解如何实现您想要的结果

我找到了解决方案!

根据我设法做到这一点的见解:

    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);
        }
    }

这可能不是做我想做的事情的最佳方式,但它工作得很好。

感谢所有试图帮助我的人,你们的见解非常有用。