我正在使用下一个和上一个按钮创建轮播视图,以显示上一个和下一个图像。当我单击“下一步”按钮时,它不会转到下一张图像,它保持不变。谁能帮我解决这个问题。
这是我到目前为止尝试过的:
9.5
虽然我没有收到任何错误,但只是没有得到下一张图片。
答案 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变换的宽度/高度以匹配单个图像的宽度/高度。这将掩盖溢出的孩子。
2)添加一个带有Rect Mask 2D
组件和Horizontal Layout Group
的GameObject,下面称为Item Wrapper,并设置如下所示的属性,以允许其根据子对象和子对象缩放游戏对象的rect变换宽度。还可以水平排列图像:
现在您需要做的就是更新Slider Wrapper的Content Size Fitter
。这将在父Slider GameObject中移动包装器。由于Slider GameObject上面有一个遮罩,因此我们看不到任何溢出的物品。
anchoredPosition
为滑块设置动画的代码:
[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;
}
}