如何在C#的轮播视图中显示下一张图片?

时间:2019-12-06 20:53:59

标签: c# unity3d

我正在使用下一个和上一个按钮创建轮播视图,以显示上一个和下一个图像。当我单击“下一步”按钮时,它不会转到下一张图像,它保持不变。谁能帮我解决这个问题。

这是我到目前为止尝试过的:

9.5

虽然我没有收到任何错误,但只是没有得到下一张图片。

1 个答案:

答案 0 :(得分:1)

看看上面的代码,我建议您在init周围创建一个父游戏对象,而不是移动它的锚定位置,而不要移动每个图像。通过移动父对象的定位位置,所有子图像将在遮罩内移动。

要包括用于下一个和上一个移动的分页按钮,您可以执行以下操作:

introImages

然后在您的下一个和上一个方法中,移动父级的 void Start () { rectTransform = sliderWrapper.GetComponent<RectTransform> (); // parent wrapper currentItem = 0; // start x position of the wrapper itemWidth = 1000f; // width of the images itemCount = sliderWrapper.transform.childCount; // number of images }

anchoredPosition

更新

一些步骤可概述上述内容。请注意,没有动画,它只是跳到相关的滑块项。

1)添加一个带有 public void Next () { currentItem++; // the next image rectTransform.anchoredPosition = new Vector2 (-currentItem * itemWidth, 0); // move the x position by the currentItem (the index) multiplied by image width prevButton.interactable = true; if (currentItem == itemCount - 1) { nextButton.interactable = false; } } public void Prev () { currentItem--; // previous image rectTransform.anchoredPosition = new Vector2 (-currentItem * itemWidth, 0); // move the x position by the currentItem (the index) multiplied by image width if (currentItem == 0) { prevButton.interactable = false; } if (currentItem < itemCount) { nextButton.interactable = true; } } 组件的GameObject(以下称为Slider),并设置rect变换的宽度/高度以匹配单个图像的宽度/高度。这将掩盖溢出的孩子。

enter image description here

2)添加一个带有Rect Mask 2D组件和Horizontal Layout Group的GameObject,下面称为Item Wrapper,并设置如下所示的属性,以允许其根据子对象和子对象缩放游戏对象的rect变换宽度。还可以水平排列图像:

enter image description here

现在您需要做的就是更新Slider Wrapper的Content Size Fitter。这将在父Slider GameObject中移动包装器。由于Slider GameObject上面有一个遮罩,因此我们看不到任何溢出的物品。

anchoredPosition

enter image description here

奖金

为滑块设置动画的代码:

    [SerializeField]
    Button nextButton;

    [SerializeField]
    Button prevButton;

    [SerializeField]
    GameObject sliderWrapper;

    float itemWidth;

    int itemCount;

    int currentItem;

    RectTransform rectTransform;

    void Start () {
        rectTransform = sliderWrapper.GetComponent<RectTransform> ();
        currentItem = 0;
        itemWidth = 1000f; // width of your slider/image
        itemCount = sliderWrapper.transform.childCount;
    }

    public void Next () {
        currentItem++;
        rectTransform.anchoredPosition = new Vector2 (-currentItem * itemWidth, 0);

        prevButton.interactable = true;

        if (currentItem == itemCount - 1) {
            nextButton.interactable = false;
        }
    }

    public void Prev () {
        currentItem--;
        rectTransform.anchoredPosition = new Vector2 (-currentItem * itemWidth, 0);

        if (currentItem == 0) {
            prevButton.interactable = false;
        }

        if (currentItem < itemCount) {
            nextButton.interactable = true;
        }
    }
相关问题