在以前,学习xna游戏框架时,由于xna封装的游戏元素很少,很多功能,只能自己去写一篇;
如:子弹时间效果;
先来介绍一个何为“子弹时间”效果;
这得始源于:著名科幻电影《黑客帝国》中男主角有一幕,敌方子弹扫射中,男主,以超快的速度,对子弹的闪避过程,这一过程,感觉整个世界的时间都变慢了,只是我们观察的人反应没有变慢的感觉---这一过程就是子弹时间;
得知子弹时间的定义后,我们可以知道,游戏多,一些电影,电视,游戏,中的各种摄影效果中,特效中;
都有用到子弹时间的表现方式;
如:
DNF,的BOSS最后致命一击;
孤岛危机 的加速动作;
或是现在有一些2D横版页游,都有制作了子弹时间效果;
那这些效果,在Unity 中,如果实现?
很简单就可以实现:Time.timeScale = .1f; // 就以比正常速度,慢10倍的效果来播放;
这得归功于,Unity 的GameObject对象处理流程;
GameObject中,都有:FixedUpdate,Update两个方法;
前者是以,固定的一个时间频率去调整;
后者,则根据前定的FPS速率有影响关系;
Unity 中需要实时的呈现有效的运算效果,那就得写在:FixedUpdate方法,如:物理运算(Unity自带的钢体,都是在这运算),等;
这样,就算,我们把播放速度,变慢,也不会影响到FixedUpdate实时的更新物理逻辑层的呈现效果;
假如,你有一个2D横版的小DEMO;
你有一个主角,给主角加一个脚本控制;
BulletTime.cs
using UnityEngine;
using System.Collections;
public class BulletTime : MonoBehaviour {
...
float timeScaleDelta = .05f;
// Use this for initialization
void Start () {
...
}
// Update is called once per frame
void Update () {
...
float spX = Input.GetAxis("Horizontal");
float spY = Input.GetAxis("Vertical");
// spX, spY 处理上下左右
if (Input.GetKeyDown(KeyCode.W)) // 按下W时,把子弹时间加速播放
{
Time.timeScale += timeScaleDelta;
}
else if (Input.GetKeyDown(KeyCode.S)) // 按下S时,把子弹时间减速播放
{
if (Time.timeScale < 0) Time.timeScale = 0;
else Time.timeScale -= timeScaleDelta;
}
}
void FixedUpdate()
{
...
}
...
}
这样,如果你有控制,主角跳,飞之类的动作,主角在空中时,多按几次:S键,就可以看到,动作变慢了,可以清晰的看到慢动作的:子弹时间效果;
是不是帅呆了;
2D测试资源包:(包有点大,没有去掉其它多余的:NGUI, PlayMaker,都有,还有对一些动画系统的测试)
Jave's Unity Testing Package
下载了资源包,最新一个空项目,再导入,打个:2DCharactorControllerTesting这个场景,
运行,
再按下:上,下,左,右,跳,或移动;
再按下,W,S键调整子弹时间效果;
提示:这个Time.timeScale 的涉及效果范围是,Unity 中,所有,更新与时间相关的都会有影响;
如:GUI,NGUI,或是其它的一些角色动画等;
如果你实现类似,主角,操作不影响(移动,跳,攻击,等其它的一切操作),其它所有,怪物,场景动画(天气,多背景移动层,等)都变慢;
那么就不应该使用Time.timeScale去实现了;
如果要实现这样的效果,首先就要考虑到,对象的更新时间,你是可控的,最好不是内置的;或是受timeScale影响的;
如:你的主角动画:如果你想Time.timeScale设置之后,依然不影响主角动画;
那么主角动画的播放就应该使用自己写的一套管理方法,可以使用到,Time.realtimeSinceStartup的时间间隔作判断,以播放动画;
解决方案:
如果硬要实现以上的需求:
可以去看一下这两个插件:
http://forum.unity3d.com/threads/136139-Pause-Controller-Released-Group-Pausing-without-timeScale-0
http://forum.unity3d.com/threads/188179-Time-Control-and-Pause-Kit-(inc-Bullet-Time-Freeze-Fast-Motion-etc)-RELEASED
直接开翻墙后,看第二个的视频,就是你想要的效果;