使用Unity实现时光倒流
首先声明,博主Unity版本为5.4.4
在游戏中加入时光逆流可以衍生出很多有趣的事,独立游戏《时空幻境》里面就有这个功能,这篇文章就是模拟时光逆流
首先简单的搭建一下场景
这里就是拿cube堆出了大方块
所有的cube都添加刚体,脚本后面附上
把bomb摆到cube中间
上代码:
using UnityEngine;
using System.Collections;public class Bomb : MonoBehaviour {public float radius = 5.0f;//爆炸半径public float power = 10;//爆炸力public float explosiveLift = 1.0f;//从下方多少距离施加力// Use this for initializationvoid Start () {}// Update is called once per framevoid Update () {if (Input.GetKeyDown (KeyCode.Space))Fire ();}private void Fire(){Vector3 pos = transform.position;Collider[] colliders = Physics.OverlapSphere (pos,radius);foreach (var hit in colliders) {if (hit.GetComponent<Rigidbody> ()) {hit.GetComponent<Rigidbody> ().AddExplosionForce (power,pos,radius,explosiveLift);}}}
}
using UnityEngine;
using System.Collections;
using System.Collections.Generic;public class TimeBack : MonoBehaviour {public bool isRewinding = false;//用来判断是否需要时光逆流public float recordTime;//时光逆流时间private List<Information> informations;private Rigidbody rb;// Use this for initializationvoid Start () {rb = GetComponent<Rigidbody> ();informations = new List<Information> ();}// Update is called once per framevoid Update () {//按下shift开始时光倒流if (Input.GetKeyDown (KeyCode.LeftShift)) {StartRewind ();}//松开时停止if (Input.GetKeyUp (KeyCode.LeftShift)) {StopRewind ();}}void FixedUpdate(){if (isRewinding)Rewind ();elseRecord ();}/// <summary>/// 开始时光逆流/// </summary>private void StartRewind(){isRewinding = true;rb.isKinematic = true;//使物体不受力}/// <summary>/// 停止时光逆流/// </summary>private void StopRewind(){isRewinding = false;rb.isKinematic = false;//物体开始受力}/// <summary>/// 时光逆流/// </summary>private void Rewind(){//记录点数量大于0时才可以倒流if (informations.Count >0) {Information information = informations [0];transform.position = information.position;transform.rotation = information.rotation;informations.RemoveAt (0);}}/// <summary>/// 记录物体的信息/// </summary>private void Record(){if (informations.Count > Mathf.Round (recordTime / Time.fixedDeltaTime)) {informations.RemoveAt (informations.Count-1);}informations.Insert (0,new Information(transform.position,transform.rotation));}
}
using System;
using UnityEngine;/// <summary>
/// 记录物体的位置跟旋转信息,用于实现时光倒流的技能
/// </summary>
public class Information{public Vector3 position;public Quaternion rotation;public Information (Vector3 _position,Quaternion _rotation){position = _position;rotation = _rotation;}
}
最后的效果的话,博主不会录gif所以,喜欢的自己去试吧
使用Unity实现时光倒流相关推荐
- Unity时光倒流效果实现
Unity时光倒流效果实现<25/11/2017> 场景:一个Panel,一个由众多小Cube堆叠而成的巨大Cube,巨大Cube中心放置爆炸点Bomb. 实现方式:一共就三个脚本,每个C ...
- 有些错误,即便时光倒流也无法弥补——《时光幻境》
当我们追溯独立游戏的起源,就会发现其实独立游戏已经有很长的历史了,早在九十年代就有独立游戏开发者或团队,截止到目前独立游戏已有将近三十年的历史.之所以要在这里提独立游戏的历史,是因为今天说的这款游戏, ...
- git branch 为什么会进入编辑状态_Git很难,搞砸很容易,好在有神奇命令让时光倒流...
Git很难,搞砸很容易,更糟糕的是搞砸了还不清楚什么问题. 虽然Git文档很全面,但不清楚什么问题,不知道问题名称,连搜索答案都无从下手.国外小哥也有遇到这些问题,因此搞了个 ohshigit 的网站 ...
- 时光倒流-第12届蓝桥杯Scratch选拔赛真题精选
[导读]:超平老师计划推出Scratch蓝桥杯真题解析100讲,这是超平老师解读Scratch蓝桥真题系列的第88讲. 蓝桥杯选拔赛每一届都要举行4~5次,和省赛.国赛相比,题目要简单不少,再加上篇幅 ...
- 第 254 场力扣周赛(KMP、贪心、快速幂、二分+多源bfs、并查集 + 时光倒流)
第 254 场力扣周赛 稀里糊涂双眼双眼惺忪的做了三道,错了4次...还是600来名 5843. 作为子字符串出现在单词中的字符串数目 题目描述 给你一个字符串数组 patterns 和一个字符串 w ...
- 数中有术:看大数据如何让“时光倒流”
据国家旅游局发布的消息:2015年,中国国内旅游突破40亿人次,旅游收入过4万亿元人民币,出境旅游1.2亿人次.中国国内旅游.出境旅游人次和国内旅游消费.境外旅游消费均列世界第一.越来越多的中国游客将 ...
- 时光倒流:业务支撑那些事(四)
时光倒流:业务支撑那些事(四)文 | 宁宇 手中有粮,心中不慌.靠这套全新的计费结算系统,支撑着移动电话的迅猛发展,这种局面一直延续到2000年. 2000年中,中国移动总部已经成立,当时的名字叫做& ...
- 水管局长数据加强版:lct,时光倒流,最小生成树,边化点
Description: SC省MY市有着庞大的地下水管网络,嘟嘟是MY市的水管局长(就是管水管的啦),嘟嘟作为水管局长的工作就是:每天供水公司可能要将一定量的水从x处送往y处,嘟嘟需要为供水公司找到 ...
- 我们时光倒流能倒流吗
先说时光倒流.假如时光能够倒流五十年,那么在比尔盖茨开发windows之前,您抢先开发一个windows系统,那么也许今天的世界首富就是您了.假如时光能够倒流三十年,当时的深圳还是一个小渔村,您在其中 ...
- 假如时光倒流,我会这么学习Java 1
回头看看, 我进入Java 领域已经快15个年头了, 虽然学的也一般, 但是分享下我的心得,估计也能帮大家少走点弯路. [入门] 我在2001年之前是C/C++阵营, 有C和面向对象的基础, 后来转到 ...
最新文章
- 在spring MVC项目中集成Spring session redis (使用spring session框架,redis作为存储缓存)...
- [Config]如何利用ConfigurationSettings.AppSettings.GetValues读取配置文件中多个同Key的value...
- Yii2 中cookie的用法(2)
- “Imperceptible,Robust,and Targeted Adversaria lExamples for Automatic Speech Recognition”
- ProgressDialog 一个使用类,多多提建议
- 枚举枚举和修改“最终静态”字段的方法
- 担心你的文章图片被盗?试试用python加水印
- java的一些小知识总结
- 用汇编的眼光看C++(之模板类)
- 2018四川高考文科21题
- LeetCode 16最接近的三数之和
- Hbase Cellutil源码
- python3使用smtplib通过qq邮箱发送邮件
- php_steam,Steam 帐户使用 - Steam Support
- 标准库函数begin和end的使用
- 2022年诺贝尔物理学奖的科学内涵辨识
- 微信小程序调用科大讯飞 在线合成语音接口(文字转语音)
- 在VMware中安装CentOS7(超详细的图文教程)
- 我们怎样处理垃圾网站举报?
- RK3588 rtc-hym8563设备开发