u3d游戏怎么让游戏结束的背景图跟随游戏的u3d场景资源变化

程序写累了,就来玩玩酷跑小游戏吧,嘿嘿。
雨松MOMO送你一首歌曲,嘿嘿。
Unity3D研究院之Time.timeScale、游戏暂停(七十四)
Unity3D研究院之Time.timeScale、游戏暂停(七十四)
围观95453次
编辑日期: 字体:
项目里面一直在用Time.timeScale来做游戏的 1倍 2倍整体加速,今天我仔细看了一下Time.timeScale才发现之前我理解错了一些东西。
Time.timeScale可以控制Update 和LateUpdate 的执行速度,举个例子说明一下。
Time.timeScale=1时,Update、LateUpdate、FixedUpdate 都按正常的时间来执行。
Time.timeScale=2时,Update和 LateUpdate的执行速度是之前的2倍,而FixedUpdate还是按正常时间来执行。
Sorry上面红色这部分确实是写错了,感谢网友在留言处给我的指正,谢谢。
正确的应该是timeScale不会影响Update和LateUpdate的执行速度。因为FixedUpdate是根据时间来的,所以timeScale只会影响FixedUpdate的速度。 再次抱歉。。 谢谢热心网友给我的指正。。 因为我的项目里在处理战斗部分的时候 大量使用 iTween 所以
3 倍加速 或者暂停 的功能直接修改timeScale 。
Time.timeScale也误导了我很久,为什么这么说呢?我原先一直以为Time.timeScale = 0 的话所有的Update都不执行了。今天测试了一下发现原来不是这样的,无论Time.timeScale 等于多说Update和LateUpdate都会去执行,不信你可以自己做个实验看看。
Time.timeScale还会影响Time.time的时间,比如Time.timeScale = 2的话,那么Time.time的增长速度也会变成2倍速度。如果你想取到游戏的实际时间,那么使用Time.timeSinceLevelLoad就可以,前提是必须在Awake()方法以后再取,如果在Awake()方法里面取Time.realtimeSinceStartup会取出一个错误的值,在Start方法里面取的话就正常了。
总之一句话Time.timeScale影响的是Unity的游戏时间缩放比例。Unity里面所有跟时间有关系的东西都是根据timeScale来演算的。仔细想想现在的手游就是个 动画 和 粒子技能特效 还有UI位移特效,所以改他们的速度直接用Time.timeScale就可以完成。还有一个重要的东西就是人物移动 或者 技能移动的速度了, 根据时间的公式,时间 = 路程\速度 ,比如角色从起点跑到中间的一个预期时间, 或者一个技能的火球从攻击到打中目标的预期时间。 凡是处理时间的东东全用Time.time 这样就可以完美让Time.timeScale控制你的游戏了。
下面说说两个大家伙比较关心的话题。
1.游戏暂停
设置 Time.timeScale = 0;即可让游戏暂停。 其实我们暂停的主要是 人物动画,还有技能特效,比如一个火球打了一半。UI方面往往我们不希望暂停,比如暂停界面 有一些UI位移动画或者帧动画, 或者最起码要有个“取消暂停的按钮” 吧。 总不能游戏暂停了我点击按钮 按钮的点击动画 或者特效也暂停了吧。
所有的动画都是基于时间来的,因为Time.timeScale = 0了,所以Time.time也就不会在变化了。换句话来说如果游戏暂停以后想在暂停界面上继续播放一些不受Time.timeScale 影响的动画,那么我们就需要用到Time.realtimeSinceStartup
如果你的项目NGUI的版本还算比较新的话,你会发现在UITweener.cs处理UI动画的基类里面已经增加了一个属性叫public bool ignoreTimeScale = 它就是控制控制NGUI 的UI动画是否受到ignoreTimeScale影响。如下图所示,你可以看看NGUI在Update里面的实现,它也是根据时间来判断的。忽略timescale的话就用真实时间,不忽略的话就用Time.time 和Time.deltaTime。
2.如何让游戏中某个游戏对象不受Time.timeScale影响。
动画不受timeScale影响:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546
static IEnumerator Play( Animation animation, string clipName, bool useTimeScale,System.Action onComplete ) {
if(!useTimeScale)
AnimationState _currState = animation[clipName];
bool isPlaying = true;
float _startTime = 0F;
float _progressTime = 0F;
float _timeAtLastFrame = 0F;
float _timeAtCurrentFrame = 0F;
float deltaTime = 0F;
animation.Play(clipName);
_timeAtLastFrame = Time.realtimeSinceStartup;
while (isPlaying)
_timeAtCurrentFrame = Time.realtimeSinceStartup;
deltaTime = _timeAtCurrentFrame - _timeAtLastFrame;
_timeAtLastFrame = _timeAtCurrentFrame;
_progressTime += deltaTime;
_currState.normalizedTime = _progressTime / _currState.length;
animation.Sample ();
if (_progressTime &= _currState.length)
if(_currState.wrapMode != WrapMode.Loop)
isPlaying = false;
_progressTime = 0.0f;
yield return new WaitForEndOfFrame();
yield return null;
if(onComplete != null)
onComplete();
animation.Play(clipName);
粒子特效不受timescale影响
12345678910111213141516171819202122232425262728293031
using UnityEngine;using System.Collections; public class ParticaleAnimator : MonoBehaviour {&& private void Awake() {
particle = GetComponent&ParticleSystem&(); }
// Use this for initialization void Start () {
lastTime = Time.realtimeSinceStartup; }
// Update is called once per frame void Update ()
float deltaTime = Time.realtimeSinceStartup - (float)lastTime; &&&&&&&& particle.Simulate(deltaTime, true, false); //last must be false!! &&&&&&&& lastTime = Time.realtimeSinceStartup; }
private double lastTime; private ParticleSystem particle; }
经过我的测试发现timeScale = 0 时, 播放放粒子特效,效率上有很大问题非常的卡。
举个例子啊,刀塔传奇大家都玩过吧?某个角色放技能的时候,其他所有人物动作全部暂停,并且打出去的技能也暂停。等着角色的技能全部放完,别人才恢复正常。 我觉得向做这类游戏,最好就不要 利用timeScale了,不然写起来太蛋疼了。 不过刀塔传奇也没有 1 倍 2倍
3倍速 的功能吧,呵呵。
3.timeScale变化时的声音。
当声音播放的同时去修改timescale的数值你会发现声音播放的很奇怪。如下代码所示,你可以封装一个方法,把IgnoreTimeScale作为参数传进去, 如果忽略timescale的话那么速度就应该是1否则就应该是Time.timeScale。
//添加一个声音组件AudioSource source = gameObject.AddComponent&AudioSource&();//设置播放声音的速度。 默认速度是1 ,那如果我们加速了,那就应该是 Time.timeScalesource.pitch =IgnoreTimeScale?1:Time.timeScale;//播放声音source.Play();
此时如果修改了Time.timeScale的数值的话,那么正在播放中的声音会非常奇怪。所以当每次播放音频的时候我们需要记录一下这个音频的状态,它是否需要忽略timeScale当前的数值。
//创建一个音频的字典private static Dictionary&AudioSource,bool&soundList = new Dictionary&AudioSource, bool&();&//播放声音source.Play();&//把音频对象加入字典中,value 就是是否忽略timescalesoundList.Add(source,IgnoreTimeScale);
每当timeScale变化的时候调用一下下面这个方法。就是遍历一下当前保存的所有音频对象,从新设置一下他们的播放频率。
12345678910
&&&&public static void TimeScaleChanged()&&&&{
foreach (AudioSource source in soundList.Keys)&&
if(source != null)
source.pitch = soundList[source]?1:Time.timeScale;
如果你有更好的建议,欢迎在下面给我留言,谢谢。
本文固定链接:
转载请注明:
雨松MOMO提醒您:亲,如果您觉得本文不错,快快将这篇文章分享出去吧 。另外请点击网站顶部彩色广告或者捐赠支持本站发展,谢谢!
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
如果您愿意花10块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝直接向我捐款哦。
您可能还会对这些文章感兴趣!330被浏览28864分享邀请回答/Manual/GlobalIllumination.html我只说说常用的。(一)Object面板Lightmap Static:
必须把烘焙的物体设置成静态Scale in Lightmap:
数值的大小与该物体的表面积有关,这个值影响烘焙时间,值越大时间越长。(效果如下图)Scale In Lightmap 设置成0.1时的效果Scale In Lightmap 改成1时的效果(这个值也影响光影图的数量)Preserve UVs: 如果物体没有在3dmax里展好UV,那么这里必须勾选。(二)Scene面板Skybox:会直接影响你的环境光Ambient Source:环境源,这里选
的skyboxAmbient Intensity: 环境光的强度值,也就是环境光的亮度值Reflection Source:反射源,这是Unity4.X里没有的。烘焙后会在场景文件的同名文件夹中多出一个名为
LightmapSnapshot的文件。Realtime Resolution:实时分辨率,这个物体所产生的GI对其它物体的影响程度,值越大影响越大。例如 Realtime Resolution 参数设成比原默认的小10倍即 0.2
,这个值调成1后,墙上的绿玻璃颜色,能更多的影响地面了Realtime Resolution 参数改成 0.4后的效果绿色墙所产生的环境光,影响范围变小了。CPU Usage:选的默认。Baked Resolution:烘焙分辨率,如果数值是10,那么就是每个单位里分布10个纹理元素,实际测试的效果如下Baked Resolution的参数值调成10后,阴影的边变实了Baked Resolution的参数值调成1后,阴影的边变的很虚了Indirect Intensity:间接强度,这个和unity4.x里的参数有些像,可以简单的理解为光的反射强度。Bounce Boost:反弹强度,同一单位面积内增大光的反射数量,相比较来说,这个值增大会直接影响渲染时间。Default Parameters:默认参数,这里还可以自己创建自己的参数。一般情况在预烘焙时选择最低设置。Atlas Size:烘焙图的大小,以前4.X版本只能通过脚本来调整,现在好了。(三)灯光参数这里需要注意的是Baking
选项里要设置成Baked ,否则烘焙不起作用。剩下的两个参数,基本和Unity4.X的参数功能相同。最后说一下,下面这几个参数一定要注意,它们影响烘焙速度和光影图数量,当初就在这上面吃过亏,场景太大,参数没调小,烘了一晚上啥也没出来。“Scale In Lightmap 、RealtimeResolution、Baked Resolution、Atlas Size”总体来讲要想提高烘焙速度,就从这Scale In Lightmap 、Realtime Resolution、Baked Resolution三个参数入手基本就可以了。其实升级到Unity5 ,我们遇到了很多问题,很多以前的脚本、插件都不好用,都需要我们一步步解决。435 条评论分享收藏感谢收起184 条评论分享收藏感谢收起查看更多回答}

我要回帖

更多关于 u3d场景资源 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信