游戏蛮牛学习群(纯技术交流,不闲聊):159852603
游戏蛮牛 手机端
开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

开发者专栏

关注:2328

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

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

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

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

[复制链接]  [移动端链接]
排名
6017
昨日变化
3

203

主题

213

帖子

2359

积分

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打开速度更快。

评分

参与人数 1鲜花 +2 收起 理由
bingodoodle + 2

查看全部评分


回复

使用道具 举报

6蛮牛粉丝
1016/1500
排名
3402
昨日变化
2

1

主题

371

帖子

1016

积分

Rank: 6Rank: 6Rank: 6

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

回复

使用道具 举报

7日久生情
1888/5000
排名
2198
昨日变化
7

44

主题

748

帖子

1888

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
219600
好友
7
蛮牛币
2601
威望
0
注册时间
2017-4-27
在线时间
498 小时
最后登录
2018-10-16
发表于 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熟悉之中
593/1000
排名
4439
昨日变化
4

0

主题

68

帖子

593

积分

Rank: 5Rank: 5

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

回复

使用道具 举报

排名
841
昨日变化
3

16

主题

1140

帖子

3204

积分

Rank: 9Rank: 9Rank: 9

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

回复 支持 反对

使用道具 举报

5熟悉之中
612/1000
排名
3206
昨日变化

0

主题

10

帖子

612

积分

Rank: 5Rank: 5

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

感谢分享

回复

使用道具 举报

2初来乍到
115/150
排名
16616
昨日变化
6

0

主题

30

帖子

115

积分

Rank: 2Rank: 2

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

回复

使用道具 举报

7日久生情
1681/5000
排名
1504
昨日变化
4

3

主题

355

帖子

1681

积分

Rank: 7Rank: 7Rank: 7Rank: 7

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

回复

使用道具 举报

7日久生情
1681/5000
排名
1504
昨日变化
4

3

主题

355

帖子

1681

积分

Rank: 7Rank: 7Rank: 7Rank: 7

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

回复

使用道具 举报

3偶尔光临
259/300
排名
17463
昨日变化
4

1

主题

38

帖子

259

积分

Rank: 3Rank: 3Rank: 3

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

回复

使用道具 举报

5熟悉之中
563/1000
排名
7267
昨日变化
3

0

主题

281

帖子

563

积分

Rank: 5Rank: 5

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

回复

使用道具 举报

5熟悉之中
806/1000
排名
3263
昨日变化
17

1

主题

131

帖子

806

积分

Rank: 5Rank: 5

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

回复

使用道具 举报

4四处流浪
439/500
排名
12900
昨日变化
5

3

主题

149

帖子

439

积分

Rank: 4

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

回复

使用道具 举报

4四处流浪
482/500
排名
4706
昨日变化
3

0

主题

25

帖子

482

积分

Rank: 4

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

回复 支持 反对

使用道具 举报

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

本版积分规则

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