游戏蛮牛学习群(纯技术交流,不闲聊):959392658
排列三2014079期正版藏机图 手机端
问答求助

关注:565

当前位置:排列三2014079期正版藏机图 技术专区 问答求助

_____________________________________________________________________________________________________________
问答求助版块规则:

  1、问题尽量描述清楚
      2、代码要放在代码块里
      3、附件最好放到云盘,然后把链接放到TXT文档里,上传TXT文档?!咀詈妹挥懈郊?,你懂得】
      4、本版块回复不得无意义,如:顶、呵呵、不错......以及擦边!【真的会扣分的哦】严重者,封IP!
      5、问题得到解决,请选择最佳答案。
      6、若问题是你自己解决了,可以联系管理员,返还蛮牛币,写下你的答案,另有蛮牛币奖赏。
_____________________________________________________________________________________________________________
查看: 484|回复: 9
发新帖

2013排列三走势图表: [脚本] 为什么场景切换时保留的物体身上的脚本又重新执行了一次?

[复制链接]  [移动端链接]
3偶尔光临
251/300
排名
46935
昨日变化
16

排列三2014079期正版藏机图 www.d0po.cn 16

主题

71

帖子

251

积分

Rank: 3Rank: 3Rank: 3

UID
182535
好友
0
蛮牛币
65
威望
0
注册时间
2016-11-10
在线时间
163 小时
最后登录
2018-9-27
跳转到指定楼层
楼主
发表于 2018-6-26 09:34:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5蛮牛币
场景切换后,部分物体保留,再切回来原有的场景时,我会做一个判断,就是场景中是否已经存在保留的物体了,有的话就销毁物体的生成,如此避免场景中又多出一组保留的物体。但这时会出现一个状况,就是保留的UI身上的脚本又被执行了一次,导致我的UI发生了不必要的变化。不知道要如何避免这种情况呢?
[发帖际遇]: mn小天 发帖时在路边捡到 2 蛮牛币,偷偷放进了口袋. 幸运榜 / 衰神榜

3偶尔光临
231/300
排名
11356
昨日变化
2

0

主题

75

帖子

231

积分

Rank: 3Rank: 3Rank: 3

UID
163693
好友
0
蛮牛币
533
威望
0
注册时间
2016-8-23
在线时间
68 小时
最后登录
2018-11-29
沙发
发表于 2018-6-26 09:34:08 | 只看该作者
因为你没有用代码做‘加载’这个事情
你把UI放在了场景中,每次加载这个场景,必然执行所有对象身上脚本的 Awake和Start
你可以把所有东西都通过代码加载,也就是,你的UI被实例化是代码控制的,而不是通过场景控制,这样你在DontDestory之后,再回到尝尽,只需要有一个变量判断是否是第一次进入,就可以不用再次实例化这个UI了。
上面这个是解决你问题的最快最简单办法

终极版,其实你应该这样做,涉及到一定框架
在你的第一个场景的前面再加一个场景,场景里只有一个对象,对象上有一个脚本。这个脚本就是所有程序的入口。所有东西都从这里衍生出来。比如,你在入口的Start中 创建游戏中需要的常驻UI 也就是从游戏开始到关闭都不会消失的UI。
因为这个场景应当只被加载一次,所以,这段代码只会执行一次,所以你根本都不需要考虑他会再次生成出来。你也可以把游戏里只整个生命周期里只需要执行一次的代码放在这里。

出现你说的问题,其实是你对数据的循环和代码理解不够,那个多余的UI对象其实就不应该再次被实例化出来,而不是出现了再删除他。从根源上消除它,很爽的哦

点评

我发现我用destroy销毁物体时物体并不会马上销毁,所以后面有些代码还是会被执行到。用了destroyimmediate就没问题了,但其实还是应该用你说的方法好  发表于 2018-6-26 21:30

3偶尔光临
159/300
排名
12548
昨日变化
3

0

主题

34

帖子

159

积分

Rank: 3Rank: 3Rank: 3

UID
285839
好友
0
蛮牛币
320
威望
0
注册时间
2018-6-14
在线时间
57 小时
最后登录
2018-10-29
板凳
发表于 2018-6-26 10:26:18 | 只看该作者
GameObject. DontDestroyOnLoad了解一下。

3偶尔光临
251/300
排名
46935
昨日变化
16

16

主题

71

帖子

251

积分

Rank: 3Rank: 3Rank: 3

UID
182535
好友
0
蛮牛币
65
威望
0
注册时间
2016-11-10
在线时间
163 小时
最后登录
2018-9-27
地板
 楼主| 发表于 2018-6-26 10:43:05 | 只看该作者
zuoqifu 发表于 2018-6-26 10:26
GameObject. DontDestroyOnLoad了解一下。

我切换场景保留物体时就是用这个方法,现在的问题是切换场景时脚本里的start()函数又执行了一次。不知道要如何避免这个?

7日久生情
2790/5000
排名
849
昨日变化
2

49

主题

727

帖子

2790

积分

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

UID
69941
好友
1
蛮牛币
7929
威望
0
注册时间
2015-1-20
在线时间
854 小时
最后登录
2018-12-11
5#
发表于 2018-6-26 10:55:56 | 只看该作者
这个判断是放在哪里的呢?——"我会做一个判断,就是场景中是否已经存在保留的物体了,有的话就销毁物体的生成"
我觉得可以参考单例的实现方法,在对象的Awake/Start里面判断,if(instance==this)则执行本来要执行的内容,else{Destory(gameObject);}
这样如果是重复的对象,就销毁,否则才执行

6蛮牛粉丝
1017/1500
排名
3836
昨日变化
11

5

主题

284

帖子

1017

积分

Rank: 6Rank: 6Rank: 6

UID
234410
好友
2
蛮牛币
936
威望
0
注册时间
2017-7-26
在线时间
338 小时
最后登录
2018-12-11
6#
发表于 2018-6-26 11:05:55 | 只看该作者
UI 框架中的 Push 操作改成实例化一个界面在Push
要不就 GameObject. DontDestroyOnLoad 直接不用

5熟悉之中
639/1000
排名
4136
昨日变化
17

1

主题

47

帖子

639

积分

Rank: 5Rank: 5

UID
253196
好友
4
蛮牛币
2079
威望
0
注册时间
2017-11-8
在线时间
237 小时
最后登录
2018-12-11
7#
发表于 2018-6-26 18:25:43 | 只看该作者
你可以把你想保留的物体做成预制体,然后添加GameObject. DontDestroyOnLoad,在第一个场景查找物体如果有的话就不生成,没有就生成一下。保留的物体最好在同一个物体下。
[发帖际遇]: jwh1108 发帖时在路边捡到 2 蛮牛币,偷偷放进了口袋. 幸运榜 / 衰神榜

5熟悉之中
626/1000
排名
6991
昨日变化
3

11

主题

241

帖子

626

积分

Rank: 5Rank: 5

UID
245178
好友
0
蛮牛币
886
威望
0
注册时间
2017-9-21
在线时间
192 小时
最后登录
2018-10-25
8#
发表于 2018-7-2 13:47:58 | 只看该作者
新手路过 学习下 顺便灌个水!

4四处流浪
387/500
排名
8591
昨日变化
8

0

主题

103

帖子

387

积分

Rank: 4

UID
10107
好友
3
蛮牛币
277
威望
0
注册时间
2013-12-11
在线时间
150 小时
最后登录
2018-12-4
QQ
9#
发表于 2018-7-2 20:06:43 | 只看该作者
先弄个例子测试下,切换场景 ,Start函数会被重新调用吗?

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

本版积分规则

快速回复 排列三2014079期正版藏机图 返回列表
  • 首批限竞房正式入市 戳三大盘看详情! ——凤凰网房产北京 2018-12-09
  • 世界杯频爆冷门网友大呼“天台见”!警方:不要冲动,不要跳楼 2018-08-21
  • 始终如一的是:美国优先。 2018-08-21
  • 555| 720| 534| 453| 127| 30| 506| 208| 275| 637|