En effet, c'est en cherchant dans les autres Time.timeScale de mes autres scripts j'ai réussi à résoudre mon bug, sans comprendre pourquoi ce beugue avait lieu. Ainsi, dans ce script :
Code : Tout sélectionner
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class TriangleInstanciate : MonoBehaviour {
public GameObject triangle;
private bool firstTime = true;
private Vector3 gravity = new Vector3 (0, 0);
private float gravityValue = 10.0f;
private Color triangleColor = Color.blue ;
private Vector3 trianglePosition = new Vector3 (0, 110, 1);
private Quaternion triangleRotation = new Quaternion(0, 0, 0, 0);
void Start () {
Physics.gravity = gravity;
}
void Update () {
if (firstTime) {
firstTime = false;
StartCoroutine (Instance ());
}
gravityValue += 0.1f;
Physics.gravity = new Vector3 (0, gravityValue);
}
private IEnumerator Instance()
{
float waitValue = 2.0f;
while(true)
{
if (Time.timeScale != 0) {
triangleColor.b = Random.Range (0.1f, 1.0f);
triangleColor.g = Random.Range (0.1f, 1.0f);
triangleColor.r = Random.Range (0.1f, 1.0f);
trianglePosition.x = Random.Range (7.0f, 54.0f);
triangle.GetComponent<Image> ().color = triangleColor;
Instantiate (triangle, trianglePosition, triangleRotation, GameObject.Find ("Canvas").transform);
yield return new WaitForSecondsRealtime (waitValue);
waitValue -= 0.05f;
if (waitValue <= 0.5f) {
waitValue = 0.5f;
}
}
}
}
}
c'est la condition dans ma coroutine avec Time.timeScale qui créait le freeze d'Unity. En enlevant cette condition, le jeu se met en pause comme prévu mais sans provoquer le freeze. Je n'ai aucune idée de pourquoi...?
Je suppose que ça a un lien avec la coroutine, car j'utilise exactement la même condition dans un autre script et celui-là ne provoque pas le freeze de unity :
Code : Tout sélectionner
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TriangleDestroy : MonoBehaviour {
public void Click()
{
if (Time.deltaTime != 0) {
PlayerPrefs.SetInt ("score", PlayerPrefs.GetInt ("score") + 1);
Destroy (gameObject);
}
}
}
Si tu as une idée de pourquoi ce beugue, je serai ravi d'en apprendre plus
En tout cas merci pour vos réponses.