unity中时间回溯问题,当我回溯到最初位置时,物体却没有静止,而是随着重力下降,求帮忙解决一下
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TimeBack : MonoBehaviour
{
public class TimeBack1 // 定义了一个嵌套类 TimeBack1
{
public Vector2 position; // 定义了一个 Vector2 类型的 position 变量
public Quaternion rotation; // 定义了一个 Quaternion 类型的 rotation 变量
public TimeBack1(Vector2 position, Quaternion rotation) // 定义了 TimeBack1 类的构造函数,接受两个参数 position 和 rotation
{
this.position = position; // 将传入的 position 参数赋值给当前实例的 position 变量
this.rotation = rotation; // 将传入的 rotation 参数赋值给当前实例的 rotation 变量
}
}
private List<TimeBack1> timeBackList = new List<TimeBack1>();
public float RecordTime = 50f;
private bool _isRewarding = false;
private Rigidbody2D rb;
private void Awake()
{
rb = GetComponent<Rigidbody2D>();
}
void Update()
{
if (Input.GetMouseButton(0))
{
StartReward();
}
if (Input.GetMouseButton(1))
{
StopReward();
}
}
private void FixedUpdate()
{
if (_isRewarding)
{
Reward();
}
else
{
Record();
}
}
private void Record() // 定义了一个 Record() 方法,用于记录当前物体的位置和旋转信息
{
if (timeBackList.Count > Mathf.Round(RecordTime / Time.deltaTime)) // 如果时间回放列表中的数据数量大于“记录时间除以帧率”后的结果
{
timeBackList.RemoveAt(timeBackList.Count - 1); // 移除列表中的最后一个(时间最久远的)元素
}
timeBackList.Insert(0, new TimeBack1(transform.position, transform.rotation)); // 在列表的开头插入一个新的元素,存储当前物体的位置和旋转信息
}
private void StartReward()
{
_isRewarding = true;
rb.gravityScale = 0;
rb.isKinematic = true;
}
private void StopReward()
{
_isRewarding = false;
rb.gravityScale = 1;
rb.isKinematic = false;
}
private void Reward()
{
if (timeBackList.Count > 0)
{
TimeBack1 information = timeBackList[0];
transform.position = information.position;
transform.rotation = information.rotation;
timeBackList.RemoveAt(0);
}
}
}