I’m using chronos and in my Time Reverse everything is okay, everything is rewindng except my boolean, its important because it is changing the rotation of my 2d enemy, how can it be done and can it be done?
Here is a video of my problem - YouTube
And a script, another scripts just help rewind the time by time.timeScale
using UnityEngine;
using System.Collections;
using Chronos;
public class Scientist : BaseBehaviour {
public float moveSpeed;
public bool moveRight;
public Transform sightStart, sightEnd;
public Transform flipStart, flipEnd;
public bool spotted = false;
public bool flip = false;
public GameObject arrow;
public LayerMask detectionLayers;
public Transform wallCheck;
public float wallCheckRadius;
public LayerMask whatIsWall;
private bool hittingWall;
public Transform edgeCheck;
public float edgeCheckRadius;
private bool notAtEdge;
public float timer = 3f; //Чтобы изменить время остановки нужно изменить кроме этого значения еще значение ниже, того же timer
public float smoothTime = 1f;
private float yVelocity = 0.0f;
Animator anim;
private Rigidbody2D rb2d;
void Start () {
rb2d = gameObject.GetComponent<Rigidbody2D>();
anim = GetComponent<Animator>();
}
void Update () {
anim.SetFloat ("Speed", Mathf.Abs(rb2d.velocity.x));
Raycasting ();
Behaviours ();
hittingWall = Physics2D.OverlapCircle (wallCheck.position, wallCheckRadius, whatIsWall);
notAtEdge = Physics2D.OverlapCircle (edgeCheck.position, edgeCheckRadius, whatIsWall);
}
void FixedUpdate ()
{
if (hittingWall || !notAtEdge) {
if (timer > 0) {
timer -= Time.deltaTime;
return;
}
moveRight = !moveRight;
timer = 3f;
}
if (moveRight)
{
transform.localScale = new Vector3 (0.75f, 0.75f, 1f);
//rb2d.velocity = new Vector2(moveSpeed, rb2d.velocity.y);
if (time.timeScale > 0)
{
time.rigidbody2D.velocity = new Vector2 (moveSpeed, time.rigidbody2D.velocity.y);
}
} else {
transform.localScale = new Vector3 (-0.75f, 0.75f, 1f);
//rb2d.velocity = new Vector2(-moveSpeed, rb2d.velocity.y);
if (time.timeScale > 0)
{
time.rigidbody2D.velocity = new Vector2 (-moveSpeed, time.rigidbody2D.velocity.y);
}
}
Physics2D.IgnoreLayerCollision (16,16); //Даёт возможность не сталкиваться врагам
}
void Raycasting()
{
Debug.DrawLine (sightStart.position, sightEnd.position, Color.green);
spotted = Physics2D.Linecast (sightStart.position, sightEnd.position, detectionLayers);
Debug.DrawLine (flipStart.position, flipEnd.position, Color.red);
flip = Physics2D.Linecast (flipStart.position, flipEnd.position, detectionLayers);
}
void Behaviours()
{
if (spotted == true) {
arrow.SetActive (true);
moveSpeed = Mathf.SmoothDamp(moveSpeed,4.5f,ref yVelocity,smoothTime);
} else {
arrow.SetActive (false);
moveSpeed = Mathf.SmoothDamp(moveSpeed,2.5f,ref yVelocity, smoothTime);
}
if (flip == true && moveSpeed > 2.5f)
{
moveRight = !moveRight;
moveSpeed = 2.5f;
}
}
}