项目中需要实现点击“+”按钮展开对应分类下的所有训练科目,再次点击“–”按钮将对应分类下的训练科目隐藏并收起整个面板。对此,编写一个类,将其挂载到树形结构的父类上,代码如下:
using UnityEngine;
using UnityEngine.UI;
public class TreeViewParent:MonoBehaviour
{
public Button controlBtn;//树形展开/收回按钮
public Sprite[] controlBtnSprite;//按钮切换的样式
public Transform itemPanel;//树形子分支的父类
public float width;//宽度
public float itemHeight;//子分支的高度
void Start()
{
controlBtn.onClick.AddListener(onControlBtnClicked);
}
void onControlBtnClicked()
{
if(controlBtn.GetComponent<Image>().sprite == controlBtnSprite[0])
{
controlBtn.GetComponent<Image>().sprite = controlBtnSprite[1];
foreach(Transform item in itemPanel)
item.gameObject.SetActive(true);
transform.GetComponent<RectTransform>().sizeDelta = new Vector2(width, itemHeight * (itemPanel.childCount + 1));
}
else
{
controlBtn.GetComponent<Image>().sprite = controlBtnSprite[0];
foreach(Transform item in itemPanel)
item.gameObject.SetActive(false);
transform.GetComponent<RectTransform>().sizeDelta = new Vector2(width, itemHeight);
}
}
}