2015-12-03 1 views
1

Je suis en train de mettre à jour mon projet Unity 4 vers Unity 5.2.1. J'ai utilisé Application.Quit(); pour fermer l'application sur un clic de bouton. Cela a bien fonctionné plus tôt (Unity 4) avec la souris et le toucher à la fois et maintenant (Unity 5.2) fonctionne également très bien avec un clic de souris. Mais si je clique sur le bouton en utilisant Touch (sur Windows 8 ou Windows 7 écrans tactiles), l'application se bloque.Unity 5.2.1 Crash de construction sur Application.Quit(); avec Windows Touch

Puis j'ai testé en créant un nouveau projet Unity et ajouté le fichier cs avec le code ci-dessous à la caméra principale. Lorsque je clique sur ce bouton avec Touch it crash. Mais ne plante pas avec le clic de la souris. Est-ce un bug dans Unity 5.2.1? Comment puis-je résoudre ce problème?

using UnityEngine; 
using System.Collections; 

public class Test : MonoBehaviour { 

public Texture btnTexture; 

void OnGUI() 
{ 
    if (!btnTexture) 
    { 
     Debug.LogError("Please assign a texture on the inspector"); 
     return; 
    } 
    if (GUI.Button(new Rect(10, 10, 50, 50), btnTexture)) 
    { 
     Debug.LogError("Clicked the button with an image"); 
     Application.Quit(); 
    } 

    if (GUI.Button(new Rect(10, 70, 50, 30), "Click")) 
     Debug.LogError("Clicked the button with text"); 

    } 
} 

Merci

Répondre

1

[EDIT:] Cette résolu le problème:

System.Diagnostics.Process.GetCurrentProcess().Kill(); 
// instead of 
// Application.Quit(); 

Avez-vous essayé d'appeler Application.Quit de l'extérieur de la méthode Ongui? Comme ceci:

using UnityEngine; 
using System.Collections; 

public class Test : MonoBehaviour 
{ 
    void OnGUI() 
    { 
     if (GUI.Button(new Rect(10, 10, 50, 50), "Exit")) 
     { 
      StartCoroutine(Quit()); 
     } 
    } 

    public static IEnumerator Quit() 
    { 
     yield return new WaitForEndOfFrame(); 
     Application.Quit(); 
    } 
} 
+0

Merci pour la réponse Denis. Maintenant j'ai essayé votre code et toujours la même chose arrive quand j'utilise le Touch. – Madhu

+1

Une autre chose que vous pourriez essayer est la suivante: 'System.Diagnostics.Process.GetCurrentProcess(). Kill();' au lieu de 'Application.Quit();' Je ne sais pas si cela fonctionne sur Windows , mais cela a résolu quelques problèmes avec une ancienne version d'Unity sur Android pour moi. –

+0

Merci Denis. Cela semble résoudre le problème de l'écrasement. Mais y aura-t-il des effets secondaires lors de l'utilisation de GetCurrentProcess(). Kill()? – Madhu

0

si (Input.GetKey ("échapper")) Application.Quit();

+0

vous pouvez l'utiliser non seulement pour les fenêtres mais aussi pour la construction Android –