背包内容需要实现以下功能:点击当前物品会变暗,再次点击当前物品会变亮,再次点击的不是当前物品,则只有最后点击的物品变暗,其他所有物品都会被点亮。
代码如下:
层级结构如下:Btn_1是button,Ima1,Ima2都是Sprite
以下脚本挂在BtnHome的父物体上:
//测试用的静态变量
public static string curName = null;
private UIButton[] btns;
void Start () {
btnHome = transform.Find("BtnHome").gameObject;
}
void Update () {
//射线检测的测试
Ray ray = UICamera.mainCamera.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Input.GetMouseButtonDown(0))
{
if (Physics.Raycast(ray, out hit, 100))
{
curName = hit.collider.name;
BtnClick();
}
}
}
/// <summary>
/// 用来实现背包内容的点击处理
/// </summary>
/// 效果:多次点击同一个按钮会有明暗的变化,点击不同的按钮只有当前点击的按钮会变暗,其他的全部是在亮的状态。
private GameObject[] childs = new GameObject[2];
public void BtnClick()
{
for (int i = 0; i < btns.Length; i++)
{
childs[0] = btns[i].transform.Find("Ima1").gameObject;//获取当前按钮中的对象图片一
childs[1] = btns[i].transform.Find("Ima2").gameObject;//获取当前按钮对象中对象二
if (curName== btns[i].name)//如果点击的是当前对象
{
foreach (var item in childs)//进行遍历,显示的进行隐藏,隐藏的进行显示
{
if (item.gameObject.activeInHierarchy)
{
item.gameObject.SetActive(false);
}
else
{
item.gameObject.SetActive(true);
}
}
}
else//如果点击的不是当前对象,就第一对象显示,第二个对象隐藏
{
childs[0].SetActive(true);
childs[1].SetActive(false);
}
}
}
效果: