Merci pour vos réponses, c'est vrai que je ne l'ai pas précisé mais la valeur de isSlowMotion change dans le script qui gère le ralenti (il passe à true quand le ralenti est actif et false quand le temps est écoulé ou que l'on relâche le clic)
J'ai mis au départ isSlowMotion = false pour avoir un visuel lors du test, mais il passe à true dès le lancement puisque la première action à effectuer est le lancement du personnage (donc un ralenti).
Depuis l'inspector je vois bien que isSlowMotion passe de true à false et inversement au bon moment mais je ne comprend pas pourquoi la conditions n'est pas lue.
Je devrai peut être essayer de modifier isSlowMotion depuis la condition comme le propose EmileF.
J'ai apporté des petites modifications pour que le timer ne s'affiche qu'à partir du premier lancé (lors du premier lancé le Rigidbody2D est désactivé donc pas besoin du ralenti)
ProgressBar :
Code : Tout sélectionner
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class ProgressBar : MonoBehaviour
{
public GameObject ui;
public float timeAmt;
public float time;
public float reset;
public bool isSlowMotion = false;
public bool isProgressBar = false;
public Image mask;
public GameManager gm;
// Start is called before the first frame update
void Start()
{
timeAmt = gm.timeToDragg;
time = timeAmt;
isProgressBar = false;
}
// Update is called once per frame
void Update()
{
if (isProgressBar && isSlowMotion)
{
ui.SetActive(true);
time -= Time.deltaTime;
mask.fillAmount = time / timeAmt;
}
else
{
ui.SetActive(false);
Debug.Log("False");
timeAmt = gm.timeToDragg;
time = timeAmt;
mask.fillAmount = 1;
}
}
}
Et mon GameManager (je suis désolé avec les essais que je fais il est un peu brouillon) :
Code : Tout sélectionner
using System.Collections;
using UnityEngine;
public class GameManager : MonoBehaviour
{
#region Singleton class: GameManager
public static GameManager Instance;
void Awake ()
{
if (Instance == null) {
Instance = this;
}
}
#endregion
Camera cam;
public Ball ball;
public Trajectory trajectory;
//public GameObject ui;
public ProgressBar progressBar;
public float slowDownFactor = 0.05f;
public float timeToDragg = 0.1f; //correspond à 2s avec le facteur de 0.05f
public float timeDragging;
[SerializeField] float pushForce = 4f;
private float fixedDeltaTime;
public bool isDragging = false;
public bool isRespawn;
public bool isMouseButtonDown;
public bool isMouseButtonUp;
public bool isInputEnabled = false;
Vector2 startPoint;
Vector2 endPoint;
Vector2 direction;
Vector2 force;
float distance;
//---------------------------------------
void Start ()
{
cam = Camera.main;
ball.DesactivateRb ();
isRespawn = true;
}
void Update()
{
if (isInputEnabled)
{
if (Input.GetMouseButtonDown(0))
{
isDragging = true;
timeDragging = 0;
ActivatePuch();
OnDragStart();
}
if ((Input.GetMouseButtonUp(0)) && (isRespawn == true))
{
progressBar.isSlowMotion = false;
isDragging = false;
OnDragEnd();
}
if (isDragging == true && timeDragging < timeToDragg)
{
progressBar.isSlowMotion = true;
timeDragging += Time.deltaTime;
OnDragSlow();
}
if (isDragging == true && timeDragging >= timeToDragg)
{
progressBar.isSlowMotion = false;
OnDrag();
}
}
this.fixedDeltaTime = Time.fixedDeltaTime;
}
//Drag
void OnDragStart ()
{
startPoint = cam.ScreenToWorldPoint (Input.mousePosition);
trajectory.Show();
isMouseButtonUp = false;
}
void OnDragSlow()
{
Time.timeScale = slowDownFactor;
Time.fixedDeltaTime = this.fixedDeltaTime * Time.timeScale;
//ui.SetActive(true);
endPoint = cam.ScreenToWorldPoint (Input.mousePosition);
distance = Vector2.Distance (startPoint, endPoint);
direction = (startPoint - endPoint).normalized;
force = (direction * distance * pushForce);
isMouseButtonDown = true;
//just for debug
Debug.DrawLine (startPoint, endPoint);
trajectory.UpdateDots (ball.Pos, force);
}
void OnDrag()
{
Time.timeScale = 1f;
Time.fixedDeltaTime = 0.001f * Time.timeScale;
//ui.SetActive(false);
endPoint = cam.ScreenToWorldPoint(Input.mousePosition);
distance = Vector2.Distance(startPoint, endPoint);
direction = (startPoint - endPoint).normalized;
force = (direction * distance * pushForce);
Debug.DrawLine(startPoint, endPoint);
trajectory.UpdateDots(ball.Pos, force);
}
void OnDragEnd ()
{
//Propulser la Balle
//ui.SetActive(false);
ball.ActivateRb ();
ball.ModifieRb ();
Time.timeScale = 1f;
Time.fixedDeltaTime = this.fixedDeltaTime * Time.timeScale;
ball.Push (force);
trajectory.Hide ();
isMouseButtonDown = false;
isMouseButtonUp = true;
progressBar.isProgressBar = true;
}
public void DesactivatePuch()
{
isRespawn = false;
}
public void ActivatePuch()
{
isRespawn = true;
}
}