升级Unity5.6.5后,导出的IOS包,设置TimeScale,while循环出现问题

留四行 2018-07-17 08:12:54
我将Unity5.5.5 p1升级到Unity5.6.5 p3版本。
游戏中战斗部分有改变TimeScale的地方。

在导出的IOS包中,进入游戏后,TimeScale改变的地方都没有引起时间的缩放,却使得人物动画无法正常跳转到下一个动画,隔很长时间后才会跳转(UI表现正常),查看log也没有发现报错。

经过进一步的排查,发现协程中的while循环退出后没有立即向下执行,代码如下:
IEnumerator STATE()
{
//示意代码
while(_instate)
{
Debug.Log("1");
yield return null;
}
Debug.Log("2");
}
发现问题是当在改变了timeScale后,将_instate置为false,Debug.Log("2");在卡很长一段时间后才会执行,求问这是什么原因。

Unity5.5.5 版本没有出现过这种问题,5.6.5导出Android包也正常,只有5.6.5导出的IOS有这个问题

求问各位大佬是什么原因引起的,该如何解决?
...全文
411 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
紫色反而 2018-09-11
  • 打赏
  • 举报
回复
换一个unity3d 的版本重新生产包 估计就解决了
留四行 2018-07-23
  • 打赏
  • 举报
回复
你好,谢谢你的解答~
这个是在我们项目中升级Unity发现的,之前的版本(Unity5.5.5)没有这个问题。
(1)log只是个示意,本身工程中是没有的。
(2)自己写了一个很简单的demo,Update里没有内容,但是还是发现了问题。
目前发下的具体问题是:
Unity5.6.5导出的IOS包中,设置timeScale会导致协程中的while循环卡住,卡住的时间不固定。
Unity2017导出的IOS包中,设置timeScale不生效,但是不会再卡住了。
目前问题只发生在IOS中,Android和Unity里都看不到这个现象。
Demo很简单,应该不会涉及性能的问题,感觉像是IOS中timeScale的机制出了问题,是不是这种直接赋值的方式有问题啊。
Demo如下:
1、CubeMoveAgent.cs:

private bool _instate=false;
private float _timer=0f;
[SerializeField] float speed=1.5f;

public void StartMove()
{
_timer=0f;
StartCoroutine(MOVEINCOROUTINE());
}

public void StopMove()
{
_instate=false;
}

IEnumerator MOVEINCOROUTINE()
{
_instate = true;
while(_instate)
{
this.transform.position=new Vector3(-10f+_timer*speed,1f,10f);
_timer+=Time.deltaTime;
yield return null;
}
this.transform.localPosition=new Vector3 (0f,-5f,10f);
}

2、ButtonMessage.cs:

[SerializeField]CubeMoveAgent _cube;
void OnGUI()
{
if (GUILayout.Button ("TimeScale=4", GUILayout.Width (150.0f), GUILayout.Height (75.0f)))
{
Time.timeScale = 4f;
}
if (GUI.Button (new Rect(Screen.width-150.0f,10f,150f,75f),"Start Move"))//, GUILayout.Width (150.0f), GUILayout.Height (75.0f)))
{
_cube.StartMove();
}
if (GUI.Button (new Rect(Screen.width-150.0f,90f,150f,75f),"Stop Move"))
{
_cube.StopMove();
}
}
夫人的泡泡鱼 2018-07-21
  • 打赏
  • 举报
回复
造成的原因:
(1)Debug.Log本身就很耗时;
(2)Update的其他部分影响了协程的执行;
提供一些建议:
(1)删除清空Update
(2)在Debug.Log前后输出时间看下,具体影响了多久;

2,535

社区成员

发帖
与我相关
我的任务
社区描述
Unity3D相关内容讨论专区
游戏unity 技术论坛(原bbs)
社区管理员
  • Unity3D
  • 芝麻粒儿
  • 「已注销」
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

Unity3D社区公告:

  1. 社区致力于解决各种Unity3D相关的“疑难杂症”。
  2. 社区不允许发布与Unity3D或相关技术无关内容。
  3. 社区版主邀请各位一道为打造优秀社区不懈努力。

试试用AI创作助手写篇文章吧