Help ?Can Chronos Reverse Boolean Statement? Help
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 https://youtu.be/VrEnWXs2NUw
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;
}
}
}
Answer by Backside2357 · Jan 04, 2018 at 11:08 AM
Since this seems to be a specific problem with Chronos, you should ask your question in the Chronos support forum
I am already resolve this problem.by creating a timer which is when rewinding time also rewinds for flip the character Only problem what is last is that my character is fliping everytime. Can you help resolve this? I marked what was added It just goes from moveRight to !moveRight again and again
Here is the code
void FixedUpdate ()
{
if (hittingWall || !notAtEdge) {
if (timer > 0) {
timer -= Time.deltaTime;
return;
}
moveRight = !moveRight;
timer = 3f;
timeAfterRight = 0f;///////ADDED
}
if (moveRight)
{
timeAfterRight += time.deltaTime;
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);
}
if (timeAfterRight < 0) /////////THIS WHAT IS I ADDED
{
timeAfterRight = 1f; ////////
moveRight = false;/////////
}
} else {
timeAfterRight += time.deltaTime;
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);
}
if (timeAfterRight < 0) /////////THIS WHAT IS I ADDED
{
timeAfterRight = 1f;//////////
moveRight = true;////////
}
}
Your answer
Follow this Question
Related Questions
Why is my animation being started, but is not actually playing? 1 Answer
Farming game Time management 0 Answers
Help with bools and if else statements. Animations 2 Answers
How do I create a static bool? 1 Answer
Why does my Gem counter not work? (screenshot included for explanation / easy code) 1 Answer