J'ai un problème avec mon loader (une anim dans la même scène qui s'affiche par dessus les autres GameObject) la fonction Show() fonctionne mais Hide() n'a aucun effet, mon anim s'affiche en continu même lorsque la réponse Firebase est récupérée.
Mon projet est une scène d'authentification pour une connexion avec Firebase.
L'anim "loader" permet à l'utilisateur de patienter et visualiser que la tâche est effectuée (register, login etc. ...)
Voici le script du "Loader" :
Code : Tout sélectionner
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Loader : MonoBehaviour
{
public GameObject PanelLoader;
public void Show()
{
PanelLoader.SetActive(true);
}
public void Hide()
{
PanelLoader.SetActive(false);
}
}
Code : Tout sélectionner
//Réinitialisation du mdp
public void ReinitPassword()
{
loader.Show();
auth.SendPasswordResetEmailAsync(emailReinitField.text).ContinueWith(task => {
if (task.IsCompleted) {
Debug.Log("Envoi de l'email réussi");
confirmReinitText.text = "Message envoyé à " + emailReinitField.text;
loader.Hide();
return;
}
else if (task.IsFaulted) {
Debug.LogWarning("Erreur " + task.Exception);
warningReinitText.text = "Erreur ! Vérifiez l'adresse e-mail";
loader.Hide();
}
});
}
Code : Tout sélectionner
using System.Collections;
using UnityEngine;
using Firebase;
using Firebase.Auth;
using TMPro;
public class FirebaseManager : MonoBehaviour
{
//Firebase variables
[Header("Firebase")]
public DependencyStatus dependencyStatus;
public FirebaseAuth auth;
public FirebaseUser User;
//Login variables
[Header("Login")]
public TMP_InputField emailLoginField;
public TMP_InputField passwordLoginField;
public TMP_Text warningLoginText;
public TMP_Text confirmLoginText;
//Register variables
[Header("Register")]
public TMP_InputField usernameRegisterField;
public TMP_InputField emailRegisterField;
public TMP_InputField passwordRegisterField;
public TMP_InputField passwordRegisterVerifyField;
public TMP_Text warningRegisterText;
private Loader loader;
//Reinit variables
[Header("Reinit")]
public TMP_InputField emailReinitField;
public TMP_Text warningReinitText;
public TMP_Text confirmReinitText;
void Awake()
{
//Chargement de l'anim Loader
loader = GetComponent<Loader>();
//Vérification de la présence de toutes les dépendances nécessaires pour Firebase
FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task =>
{
dependencyStatus = task.Result;
if (dependencyStatus == DependencyStatus.Available)
{
//Si elles sont toutes disponibles lancement de l'initialisation de Firebase
InitializeFirebase();
}
else
{
Debug.LogError("Could not resolve all Firebase dependencies: " + dependencyStatus);
}
});
}
private void InitializeFirebase()
{
Debug.Log("Setting up Firebase Auth");
//Set the authentication instance object
auth = FirebaseAuth.DefaultInstance;
}
//Function for the login button
public void LoginButton()
{
//Call the login coroutine passing the email and password
StartCoroutine(Login(emailLoginField.text, passwordLoginField.text));
}
//Function for the register button
public void RegisterButton()
{
//Call the register coroutine passing the email, password, and username
StartCoroutine(Register(emailRegisterField.text, passwordRegisterField.text, usernameRegisterField.text));
}
private IEnumerator Login(string _email, string _password)
{
loader.Show();
//Call the Firebase auth signin function passing the email and password
var LoginTask = auth.SignInWithEmailAndPasswordAsync(_email, _password);
//Wait until the task completes
yield return new WaitUntil(predicate: () => LoginTask.IsCompleted);
if (LoginTask.Exception != null)
{
//If there are errors handle them
Debug.LogWarning(message: $"Failed to register task with {LoginTask.Exception}");
FirebaseException firebaseEx = LoginTask.Exception.GetBaseException() as FirebaseException;
AuthError errorCode = (AuthError)firebaseEx.ErrorCode;
string message = "Échec de la connexion";
loader.Hide();
switch (errorCode)
{
case AuthError.MissingEmail:
message = "E-mail manquant";
loader.Hide();
break;
case AuthError.MissingPassword:
message = "Mot de passe manquant";
loader.Hide();
break;
case AuthError.WrongPassword:
message = "Mauvais mot de passe";
loader.Hide();
break;
case AuthError.InvalidEmail:
message = "E-mail non valide";
loader.Hide();
break;
case AuthError.UserNotFound:
message = "Ce compte n'existe pas";
loader.Hide();
break;
}
warningLoginText.text = message;
}
else
{
//User is now logged in
//Now get the result
User = LoginTask.Result;
Debug.LogFormat("User signed in successfully: {0} ({1})", User.DisplayName, User.Email);
warningLoginText.text = "";
confirmLoginText.text = "Connection réussie";
loader.Hide();
}
}
//Réinitialisation du mdp
public void ReinitPassword()
{
loader.Show();
auth.SendPasswordResetEmailAsync(emailReinitField.text).ContinueWith(task => {
if (task.IsFaulted) {
Debug.LogWarning("SendPasswordResetEmailAsync encountered an error: " + task.Exception);
warningReinitText.text = "Erreur ! Vérifiez l'adresse e-mail";
loader.Hide();
}
Debug.Log("Password reset email sent successfully.");
confirmReinitText.text = "Message envoyé à " + emailReinitField.text;
loader.Hide();
});
}
//Déconnection de l'utilisateur
public void SignOut()
{
auth.SignOut();
emailLoginField.text="";
passwordLoginField.text="";
confirmLoginText.text = "Vous avez été déconnecté(e)";
}
private IEnumerator Register(string _email, string _password, string _username)
{
loader.Show();
if (_username == "")
{
//If the username field is blank show a warning
warningRegisterText.text = "Le nom d'utilisateur est manquant !";
loader.Hide();
}
else if(passwordRegisterField.text != passwordRegisterVerifyField.text)
{
//If the password does not match show a warning
warningRegisterText.text = "Les mots de passe ne sont pas identiques !";
loader.Hide();
}
else
{
//Call the Firebase auth signin function passing the email and password
var RegisterTask = auth.CreateUserWithEmailAndPasswordAsync(_email, _password);
//Wait until the task completes
yield return new WaitUntil(predicate: () => RegisterTask.IsCompleted);
if (RegisterTask.Exception != null)
{
//If there are errors handle them
Debug.LogWarning(message: $"Failed to register task with {RegisterTask.Exception}");
FirebaseException firebaseEx = RegisterTask.Exception.GetBaseException() as FirebaseException;
AuthError errorCode = (AuthError)firebaseEx.ErrorCode;
string message = "Échec de l'inscription :(";
loader.Hide();
switch (errorCode)
{
case AuthError.MissingEmail:
message = "Email manquant !";
loader.Hide();
break;
case AuthError.MissingPassword:
message = "Mot de passe manquant !";
loader.Hide();
break;
case AuthError.WeakPassword:
message = "Mot de passe faible !";
loader.Hide();
break;
case AuthError.EmailAlreadyInUse:
message = "Cet E-mail est déjà utilisé !";
loader.Hide();
break;
}
warningRegisterText.text = message;
loader.Hide();
}
else
{
//User has now been created
//Now get the result
User = RegisterTask.Result;
if (User != null)
{
//Create a user profile and set the username
UserProfile profile = new UserProfile{DisplayName = _username};
//Call the Firebase auth update user profile function passing the profile with the username
var ProfileTask = User.UpdateUserProfileAsync(profile);
//Wait until the task completes
yield return new WaitUntil(predicate: () => ProfileTask.IsCompleted);
if (ProfileTask.Exception != null)
{
//If there are errors handle them
Debug.LogWarning(message: $"Failed to register task with {ProfileTask.Exception}");
FirebaseException firebaseEx = ProfileTask.Exception.GetBaseException() as FirebaseException;
AuthError errorCode = (AuthError)firebaseEx.ErrorCode;
warningRegisterText.text = "Échec de l'enregistrement du nom d'utilisateur :(";
loader.Hide();
}
else
{
//Username is now set
//Now return to login screen
UIManager.instance.LoginScreen();
warningRegisterText.text = "";
loader.Hide();
}
}
}
}
}
}