当到达数组结束时禁用按钮
本文关键字:按钮 结束 数组 | 更新日期: 2023-09-27 18:04:36
如何正确禁用GameObject
中的按钮?到目前为止,我的代码返回错误:
NullReferenceException:对象引用未设置为LoadGallery对象。nextImage () .
这个错误来自以下行:
Button btn = nextBtn.GetComponent<Button>();
我不明白为什么引用无效。此外,是否存在将if-else语句中的重复代码合并到单个位置的最佳实践?
// Increment through gallery
if(currentIndexArray < galleryImages.Length)
{
StartCoroutine("loader", currentIndexArray++);
}
// Disable Next Button when the end is reached
if(currentIndexArray == galleryImages.Length)
{
GameObject nextBtn = GameObject.FindGameObjectWithTag("NextBtn");
Button btn = nextBtn.GetComponent<Button>();
btn.enabled = false;
btn.interactable = false;
}
else
{
GameObject nextBtn = GameObject.FindGameObjectWithTag("NextBtn");
Button btn = nextBtn.GetComponent<Button>();
btn.enabled = true;
btn.interactable = true;
}
数组索引为零索引,因此您必须更改
if(currentIndexArray < galleryImages.Length)
if(currentIndexArray < galleryImages.Length - 1)
和
if (currentIndexArray == galleryImages.Length)
if (currentIndexArray == galleryImages.Length - 1)
确保nextBtn
gameObject在使用GetComponent<Button>()
方法之前不为空。
试着像这样添加一个null检查:
GameObject nextBtn = GameObject.FindGameObjectWithTag("NextBtn");
if(nextBtn != null)
{
Button btn = nextBtn.GetComponent<Button>();
btn.enabled = true;
btn.interactable = true;
}
我让它的工作,使按钮gameObjects公共:
public GameObject nextBtn;
public GameObject prevBtn;
然后我将游戏对象放入Unity检查器窗口的脚本部分的各自字段中。之后,我删除了FindObjectByTag行在我的函数和其他一切工作。
public void nextImage()
{
// Increment through gallery
if(currentIndexArray < galleryImages.Length)
{
StartCoroutine("loader", currentIndexArray++);
Debug.Log(currentIndexArray);
}
// Disable Next Button when the end is reached
if(currentIndexArray == galleryImages.Length)
{
Button btn = nextBtn.GetComponent<Button>();
btn.enabled = false;
btn.interactable = false;
} else {
Button btn = nextBtn.GetComponent<Button>();
btn.enabled = true;
btn.interactable = true;
}
}
public void prevImage()
{
// Decrement through gallery
if(currentIndexArray > 0)
{
StartCoroutine("loader", currentIndexArray--);
Debug.Log(currentIndexArray);
}
// Disable Prev Button when the end is reached
if(currentIndexArray == 0)
{
Button btn = nextBtn.GetComponent<Button>();
btn.enabled = false;
btn.interactable = false;
} else {
Button btn = nextBtn.GetComponent<Button>();
btn.enabled = true;
btn.interactable = true;
}
}