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

扫一扫,访问微社区

开发者专栏

关注:2103

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

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

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

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

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

203

主题

213

帖子

2325

积分

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熟悉之中
916/1000
排名
3505
昨日变化

1

主题

357

帖子

916

积分

Rank: 5Rank: 5

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

回复

使用道具 举报

6蛮牛粉丝
1025/1500
排名
4647
昨日变化
1

28

主题

483

帖子

1025

积分

Rank: 6Rank: 6Rank: 6

UID
219600
好友
5
蛮牛币
1844
威望
0
注册时间
2017-4-27
在线时间
258 小时
最后登录
2018-2-6

迈向小康

发表于 2018-1-30 15:21:08 | 显示全部楼层
感谢分享

回复

使用道具 举报

4四处流浪
343/500

0

主题

218

帖子

343

积分

Rank: 4

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

回复

使用道具 举报

5熟悉之中
539/1000
排名
4293
昨日变化
3

0

主题

65

帖子

539

积分

Rank: 5Rank: 5

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

回复

使用道具 举报

7日久生情
2332/5000
排名
1278
昨日变化
1

12

主题

866

帖子

2332

积分

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

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

回复 支持 反对

使用道具 举报

2初来乍到
128/150
排名
10724
昨日变化
155

0

主题

10

帖子

128

积分

Rank: 2Rank: 2

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

感谢分享

回复

使用道具 举报

排名
17387
昨日变化
5

0

主题

21

帖子

80

积分

Rank: 2Rank: 2

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

回复

使用道具 举报

6蛮牛粉丝
1212/1500
排名
2363
昨日变化

3

主题

333

帖子

1212

积分

Rank: 6Rank: 6Rank: 6

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

回复

使用道具 举报

6蛮牛粉丝
1212/1500
排名
2363
昨日变化

3

主题

333

帖子

1212

积分

Rank: 6Rank: 6Rank: 6

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

回复

使用道具 举报

2初来乍到
110/150
排名
19320
昨日变化
5

1

主题

28

帖子

110

积分

Rank: 2Rank: 2

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

回复

使用道具 举报

4四处流浪
305/500
排名
10724
昨日变化

0

主题

172

帖子

305

积分

Rank: 4

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

回复

使用道具 举报

4四处流浪
326/500
排名
6703
昨日变化

0

主题

58

帖子

326

积分

Rank: 4

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

回复

使用道具 举报

4四处流浪
323/500
排名
11951
昨日变化
2

3

主题

121

帖子

323

积分

Rank: 4

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

回复

使用道具 举报

排名
15151
昨日变化
3

0

主题

6

帖子

63

积分

Rank: 2Rank: 2

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

回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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

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