前言

源码

GitHub - AkiKurisu/Time-Control: Unity时间回溯系统

看这个源码实现的时空回溯效果,比想象中简单一些,记录一下。

时间控制器和存储组件

整体需要一个时间控制器和存储组件。

给需要回溯的物体加上存储组件,时间控制器来调用这些组件的不同接口。

存储组件主要实现下面5个接口

1. 开始记录响应Record

2. 记录每一步RecordTick

3. 开始回溯Recall

4. 回溯每一步RecallTick

5. 回溯结束TimeStoreOver

时间控制器有三个状态:空闲、记录、回溯

每帧根据不同状态做不同处理

可以看到,在空闲状态什么都不做,在记录状态,每帧调用一次存储组件的RecordTick,到达上限自动回溯(转到回溯状态)。

在回溯状态,每帧调用存储组件的RecallTick,回溯完调用TimeStoreOver。

时间控制器只控制流程,不管具体的回溯实现。

具体的记录和回溯方式由存储组件自己定义,这个源码中有三个:位置回溯、动画回溯、自定义回溯。

位置回溯

以位置回溯为例,就是存储了一个位置栈,在记录的时候往栈中存入当前位置,回溯的时候依次从栈中弹出赋值给transform。

动画回溯

动画回溯是继承自位置回溯的,也就是有位置回溯的功能。

动画回溯利用了Animator的机制,如下,开始记录时调用了Animator.StartRecording,开始回溯时停止记录,并开始调用StartPlayback倒着播放动画,在每帧处理中设置倒播动画的时间。

自定义回溯

自定义回溯这里加了个层的概念,实际就是不同的回溯方式,比如上面的动画回溯不继承位置回溯,分为动画层和位置层,分别处理。

使用

以位置回溯为例,以空格为触发键,当按下空格时,进入记录状态,这时候会每隔0.02s(可修改)往栈中存储一下当前的位置,直到存储了最大数量(默认3000)后,也就是过了60s后,不能再存储,自动回溯。

在这60s的记录期间再次按下空格键,就会进入回溯状态,不接受输入,以此弹出栈中的位置信息,赋值,达到回溯效果。

【GamePlay】时空回溯效果相关推荐

  1. 视差滚动:零基础css代码实现时空穿越效果

    先贴出最终效果: 上面的图片中,底层为冬季大树图片,上层为春季大树图片. 上层元素滚动之间,春季图片的位置却没有变化,感觉像是上层元素的滚动使底层元素的冬季大树图片实现"时空穿越" ...

  2. 《时空幻境》的时间倒放玩法!用 Cocos Creator 实现时间回溯

    喜欢研究各种有趣效果的「Cocos Star Writer」Nowpaper,之前同我们分享了<饥荒>同款 2.5D 视角的实现和用 RenderTexture 实现小地图与传送门等等,这 ...

  3. 基于模型与不基于模型的深度增强学习_CVPR2018: 基于时空模型无监督迁移学习的行人重识别...

    Unsupervised Cross-dataset Person Re-identification by Transfer Learning of Spatial-Temporal Pattern ...

  4. 基于Filament引擎的Animoji效果实现

    Animoji是2017年9月13日苹果发布的新款手机iPhone X上的增强现实(AR)表情包.其使用面部识别传感器来检测用户面部表情变化,同时用麦克风记录声音,并最终生成可爱的3D动画表情符号.2 ...

  5. Las Vegas 与回溯组合法解八皇后问题

    八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同 ...

  6. 【代码随想录】二刷-回溯算法

    回溯算法 <代码随想录> 什么是回溯算法? 回溯算法也可以叫做回溯搜索法,它是一种搜索方式. 回溯是递归的副产品,只要有递归就会有回溯. 回溯法的效率: 回溯法的本质是穷举,穷举所有可能, ...

  7. 时空隧道Shder Unity ASE编写简单的UV位移动画Shader

    Unity ASE编写"时空隧道"效果Shder, 简单的UV位移动画, 通过控制一张图的红绿蓝三个通道的三张图的颜色,亮度,平铺数 偏移速度 实现简单的时空隧道效果. Unity ...

  8. CVPR2018 | R(2+1)D结构:视频动作识别中的时空卷积深度探究

    本文 是C3D作者Du Tran+IDT作者Heng Wang发表在CVPR2018的新作.来自Facebook Resaerch &Dartmouth Colledge.文章主要对是动作识别 ...

  9. Unity 特效扭曲效果(使用command buffer实现)

    了解command buffer CommandBuffer携带一系列的渲染命令,可以指定在相机渲染的某个点执行本身命令(包括特殊渲染,保存当前rendertexture等) CommandBuffe ...

最新文章

  1. 速来了解—关于机器学习的“核心”秘密
  2. openstack e版创建instance整个流程
  3. Java入门学习笔记[狂神说Java]
  4. MatConvnet工具箱文档翻译理解(1)
  5. VTK:VTK 的相机模型用法实战
  6. [Leedcode][JAVA][第102题][二叉树的层序遍历][递归][迭代][BFS]
  7. 跨域产生的原因和解决方法_针织面料染色折痕/产生的原因及解决方法
  8. [导入]FtpClient Library升级到4.x
  9. Python 函数参数 传引用还是传值
  10. 【游戏开发创新】上班通勤时间太长,做一个任意门,告别地铁与塞车(Unity | 建模 | ShaderGraph | 摇杆 | 角色控制)
  11. window10 安装Java11 并可以和Java8进行自由切换
  12. canvas制作呼吸灯
  13. Windows打印机API封装
  14. html5制作波浪,技能get:用HTML5实现波浪效果
  15. 用PPT制作简单海报
  16. 在网商大会上马云的讲话
  17. [深度学习论文笔记]UNETR: Transformers for 3D Medical Image Segmentation
  18. android -fanfou-project-source study
  19. 微信小程序之数据处理
  20. win7系统怎样搭建电影服务器,用Win7系统来制作电影我们都能当导演

热门文章

  1. cmd命令netstat -ano不是内部命令解决方案
  2. 平安的互联网布局新探索 平安天下通引领金融服务再升级
  3. 我对refactoring的思考
  4. 教你解决主板过热导致的频繁死机
  5. 某大神网站发现2048一枚
  6. win7电脑设置自动关机
  7. 网易邮箱添加html,在网易邮箱中实行添加标签窗口的详细步骤
  8. '/0'和/0的区别
  9. 基音周期 检测 matlab,语音信号基音周期检测的matlab程序
  10. 《迫在眉梢》英文名《John Q》经典台词