[Unity技术] unity uGUI中实现动态可扩展的面板详情

[复制链接]
星空 发表于 2019-3-15 10:21:47 | 显示全部楼层 |阅读模式
最近做项目,我做了个如下动态可扩展面板的效果:

expand-demostration.jpg
实现的关键点:
1. 所有的Panel以left aligned,这样改变sizeDelta时效果是对的。
2. 事件要动态绑定与更新。
我的核心源代码:
  1. public class ExpandableObj : MonoBehaviour {
  2.   public RectTransform root, right, trans;
  3.   public RectTransform prefab, tipWnd;

  4.   Vector2 d = new Vector2(300f, 0);
  5.     void Start () {
  6.     }
  7.      
  8.   void Expand(bool expand = true) {
  9.     if(expand) {
  10.       trans.sizeDelta += d;
  11.       right.sizeDelta += d;
  12.       root.sizeDelta += d;
  13.     } else {
  14.       trans.sizeDelta -= d;
  15.       right.sizeDelta -= d;
  16.       root.sizeDelta -= d;
  17.     }
  18.   }

  19.     public void AddPanel() {
  20.     Transform n = Instantiate<GameObject>(prefab.gameObject).GetComponent<Transform>();
  21.     n.SetParent(trans);
  22.     n.localScale = Vector3.one;
  23.     Expand();

  24.     RegisterEvents();
  25.     }

  26.   void RegisterEvents() {
  27.     for(int i = 0;i < trans.childCount; ++i) {
  28.       var t = trans.GetChild(i);

  29.       Button button = t.GetComponent<Button>();
  30.       button.onClick.RemoveAllListeners();
  31.       button.onClick.AddListener(() => {
  32.         tipWnd.gameObject.SetActive(true);

  33.         Button del = tipWnd.Find("DelImage").GetComponent<Button>();
  34.         del.onClick.RemoveAllListeners();
  35.         del.onClick.AddListener(() => {
  36.           tipWnd.gameObject.SetActive(false);
  37.           Destroy(t.gameObject);
  38.           Expand(false);
  39.         });
  40.       });
  41.     }
  42.   }
  43. }
复制代码


哎...今天够累的,签到来了游戏源码下载...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则