u3d 设计技巧 之UI 避免Find

我们都知道了,Find ** ()函数是很消耗性能的,所以不被推荐使用;

对于大型的游戏,UI复杂,加上设计上的不合理等问题(parent-child层级问题),很多时候就会被紧张的工期打乱自己的想法。


像下面的例子:

要避免Find,那就使用GetComponent 来获取脚本。  脚本中就引用这想要的GameObject,

所以在差不多的层级上就要有这个脚本专门做这件事(不是必须的)


我们要得到一个下面的对象,就先得到 引用他的脚本所在的对象,然后在GetComponent 来获取脚本,最后我们就可以访问了。

脚本引用GameObject 就是在Inspector上赋值。

这种方法,对 动态创建UI对象预制体,也是没有问题的。


在游戏设计中,还有一个问题,就是UI是动态创建的,那么对UI的事件触发,我们是希望被其他的类接受并触发,这里就有问题了,因为我们并不能像Hierarchy中的对象一样,简单的拖拽进行赋值了,那怎么办呢?

像NGUI 中提供的:

            EventDelegate.Set(
                _UICardSetBoard.transform.FindChild("Button").GetComponent<UIButton>().onClick,
                OnCloseCardSet);

但是有的时候我们也要考虑这样的设计是不是最好的。


总之,UI就是要多思考的东西,从层级设计上开始。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值