开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

开发者专栏

关注:2212

当前位置:游戏蛮牛 技术专区 开发者专栏

__________________________________________________________________________________
开发者干货区版块规则:

  1、文章必须是图文形式。(至少2幅图)
      2、文章字数必须保持在1500字节以上。(编辑器右下角有字数检查)
      3、本版块只支持在游戏蛮牛原创首发,不支持转载。
      4、本版块回复不得无意义,如:顶、呵呵、不错......【真的会扣分的哦】
      5、......
__________________________________________________________________________________
查看: 2960|回复: 41

[雨松MOMO] UGUI研究院之Prefab嵌套特效部分(二十九)

[复制链接]  [移动端链接]
排名
5663
昨日变化
2

203

主题

213

帖子

2343

积分

Rank: 9Rank: 9Rank: 9

UID
36308
好友
0
蛮牛币
5108
威望
0
注册时间
2014-7-25
在线时间
69 小时
最后登录
2018-1-30

专栏作家

发表于 2018-1-29 15:54:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
本帖最后由 雨松MOMO 于 2018-1-29 16:07 编辑

Prefab in Prefab的需求太多了(据可靠消息unity2018官方会支持这个功能),以前我也写过一个解决方案,但是后来自己都不用了。今天我写的这篇是自己使用过一段时间,并且觉得还不错的方法。


先说说灵感吧,前段时间再做assetbundle的打包。特效把我头疼坏了,说到特效我不得不啰嗦两句。特效美术最终都会把特效做成prefab保存在项目里,例如放在了Resources目录。程序或运行时读取,或者直接拖入到某个Prefab中来使用。


特效分三类


1.场景特效,特点是不需要运行时加载,由地编美术把特效拖入场景中完成。这类特效是被场景引用自身的关系还在prefab上,换句话说只要特效的prefab变了场景里引用它的地方也就变了,我们只需要把prefab管理好就可以。


2.我重点要说的就是第二类特效,例如人物身上绑定的特效,或者UI上绑定的特效。 人物和UI本身就是prefab,如果把特效关联上一旦apply后,这个特效就和之前的prefab断开了。未来如果要打assetbundle就需要考虑特效的依赖关系了。


3.最后一类也很恶心, 又要放在场景上、又要运行时加载、。。。。。对这类特效我不予以评价!


这时候可能就会有同学说,不把特效直接依赖上去,而是采取运行时load的形式不就完了。确实是这样,但是这样的问题就是预览起来非常麻烦。尤其UI上的特效,只要调位置都得运行起来看,还有一些特效的出现时机是需要逻辑满足才播放,这样调起来就更麻烦了。


废话了这么多,说说今天的重点,我要让prefab嵌套prefab,并且很方便的预览,还要使用者点击apply不能破坏原有的依赖结构。


我们可以监听GameObject在Hierarchy视图中选择的事件。


[AppleScript] 纯文本查看 复制代码
#if UNITY_EDITOR
[CustomEditor(typeof(UICacheBase))]
public class UICacheBaseInspector : Editor
{
        void OnEnable()
        {
                if (!Application.isPlaying) {
                        
                        if (target != null) {
                                //1.清空节点
                                //2.实例化prefab,设置不可被保存
                                //3.即可在hierarchy中预览
                        }
                }
        }
}
#endif

1.清空节点 保证节点下没东西

[AppleScript] 纯文本查看 复制代码
while(transform.childCount >0){
                        GameObject.DestroyImmediate (transform.GetChild (0).gameObject);
                }

3.此时在Scene视图中就可以预览效果了。


这里我举个例子,如下图所示,我有一个父Prefab需要嵌套一个子Prefab(特效),我把子Prefab(特效)拖入右侧resPrview处。即可直接在Hierarchy视图中预览,resPreview这个脚本只需要序列化保存了特效的路径. 无论你怎么Apply父Prefab也不会把子Prefab(特效)包含在父Prefab中了。



4.最终游戏运行就按上面的加载顺序实例化即可。


文章中的例子可能比较简单,因为实际游戏中嵌套的Prefab可能还需要一些自身的逻辑,不仅仅是隐藏/显示/加载 这么简单的操作。

下一篇我会讲一讲我用这个思路做的UI缓存策略,很有意思!可以让你的UI打开速度更快。


回复

使用道具 举报

5熟悉之中
978/1000
排名
3371
昨日变化
16

1

主题

367

帖子

978

积分

Rank: 5Rank: 5

UID
122160
好友
1
蛮牛币
1602
威望
0
注册时间
2015-9-10
在线时间
228 小时
最后登录
2018-5-25
发表于 2018-1-30 11:59:54 | 显示全部楼层
感谢分享

回复

使用道具 举报

6蛮牛粉丝
1488/1500
排名
3210
昨日变化
12

37

主题

674

帖子

1488

积分

Rank: 6Rank: 6Rank: 6

UID
219600
好友
7
蛮牛币
2177
威望
0
注册时间
2017-4-27
在线时间
373 小时
最后登录
2018-5-26
发表于 2018-1-30 15:21:08 | 显示全部楼层
感谢分享

回复

使用道具 举报

4四处流浪
340/500

0

主题

215

帖子

340

积分

Rank: 4

UID
109564
好友
0
蛮牛币
94
威望
0
注册时间
2015-6-20
在线时间
125 小时
最后登录
2018-2-9
发表于 2018-1-30 15:22:50 | 显示全部楼层
感谢分享

回复

使用道具 举报

5熟悉之中
551/1000
排名
4428
昨日变化
3

0

主题

65

帖子

551

积分

Rank: 5Rank: 5

UID
120241
好友
3
蛮牛币
838
威望
0
注册时间
2015-8-29
在线时间
199 小时
最后登录
2018-5-23
QQ
发表于 2018-1-30 17:24:14 | 显示全部楼层
感谢大佬分享
[发帖际遇]: wmh49877 在网吧通宵,花了 2 蛮牛币. 幸运榜 / 衰神榜

回复

使用道具 举报

排名
1068
昨日变化
5

13

主题

1031

帖子

2761

积分

Rank: 9Rank: 9Rank: 9

UID
68430
好友
7
蛮牛币
9819
威望
0
注册时间
2015-1-14
在线时间
741 小时
最后登录
2018-5-25
发表于 2018-1-30 17:54:45 | 显示全部楼层
期待楼主下一步·~

回复 支持 反对

使用道具 举报

4四处流浪
329/500
排名
5543
昨日变化
37

0

主题

10

帖子

329

积分

Rank: 4

UID
239691
好友
0
蛮牛币
549
威望
0
注册时间
2017-8-25
在线时间
101 小时
最后登录
2018-5-25
发表于 2018-1-31 09:15:55 | 显示全部楼层

感谢分享

回复

使用道具 举报

排名
16668
昨日变化
6

0

主题

24

帖子

98

积分

Rank: 2Rank: 2

UID
177972
好友
0
蛮牛币
118
威望
0
注册时间
2016-10-24
在线时间
40 小时
最后登录
2018-5-14
发表于 2018-1-31 09:20:10 | 显示全部楼层
谢谢分享

回复

使用道具 举报

6蛮牛粉丝
1401/1500
排名
1914
昨日变化
1

3

主题

346

帖子

1401

积分

Rank: 6Rank: 6Rank: 6

UID
159631
好友
1
蛮牛币
3066
威望
0
注册时间
2016-7-30
在线时间
422 小时
最后登录
2018-5-21
发表于 2018-1-31 09:29:15 | 显示全部楼层
谢谢分享

回复

使用道具 举报

6蛮牛粉丝
1401/1500
排名
1914
昨日变化
1

3

主题

346

帖子

1401

积分

Rank: 6Rank: 6Rank: 6

UID
159631
好友
1
蛮牛币
3066
威望
0
注册时间
2016-7-30
在线时间
422 小时
最后登录
2018-5-21
发表于 2018-1-31 09:31:51 | 显示全部楼层
谢谢分享

回复

使用道具 举报

3偶尔光临
186/300
排名
17609
昨日变化
4

1

主题

34

帖子

186

积分

Rank: 3Rank: 3Rank: 3

UID
180232
好友
0
蛮牛币
111
威望
0
注册时间
2016-11-2
在线时间
121 小时
最后登录
2018-5-11
发表于 2018-1-31 16:26:38 | 显示全部楼层
学习学习,蟹蟹

回复

使用道具 举报

5熟悉之中
501/1000
排名
7723
昨日变化
3

0

主题

260

帖子

501

积分

Rank: 5Rank: 5

UID
250350
好友
1
蛮牛币
430
威望
0
注册时间
2017-10-23
在线时间
103 小时
最后登录
2018-4-19
发表于 2018-1-31 22:02:53 | 显示全部楼层
感谢分享

回复

使用道具 举报

5熟悉之中
520/1000
排名
4712
昨日变化
32

1

主题

93

帖子

520

积分

Rank: 5Rank: 5

UID
236305
好友
0
蛮牛币
704
威望
0
注册时间
2017-8-7
在线时间
160 小时
最后登录
2018-5-25
发表于 2018-2-1 09:52:49 | 显示全部楼层
学习学习~~~

回复

使用道具 举报

4四处流浪
370/500
排名
12289
昨日变化
6

3

主题

133

帖子

370

积分

Rank: 4

UID
216830
好友
2
蛮牛币
211
威望
0
注册时间
2017-4-9
在线时间
170 小时
最后登录
2018-5-17
发表于 2018-2-1 13:55:35 | 显示全部楼层
感谢分享

回复

使用道具 举报

3偶尔光临
263/300
排名
7038
昨日变化
41

0

主题

20

帖子

263

积分

Rank: 3Rank: 3Rank: 3

UID
169312
好友
0
蛮牛币
849
威望
0
注册时间
2016-9-19
在线时间
83 小时
最后登录
2018-5-26
发表于 2018-2-2 08:33:43 | 显示全部楼层
可以的,文章中的例子可能比较简单

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

关闭

站长推荐 上一条 /1 下一条

快速回复 返回顶部 返回列表