[Résolu] Touch qui s'active derrière un canvas

Toutes les questions sur le développement Mobile, y compris la partie script.
youtpout
Messages : 71
Inscription : 15 Nov 2020 15:54

[Résolu] Touch qui s'active derrière un canvas

Message par youtpout » 17 Jan 2021 17:08

Bonjour,

j'ai un gameobject sur lequel on mousedown je lance un combat, le problème si j'ai ouvert un menu au-dessus de ma scène et que je clique à un endroit sur mon menu ou derrière il y a un monstre le combat se lance, et je voudrais éviter ça.
Mon canvas est dans une scene chargé en additive sur la scène courante qui contient le monstre.

Mon jeu doit fonctionner sur mobile

Voici mon script :

Code : Tout sélectionner

   void OnMouseDown()
    {
        if (!EventSystem.current.IsPointerOverGameObject())
        {
            LoadFight();
        }
    }

    bool loadScene = false;
    public async void LoadFight()
    {
        if (!loadScene)
        {
            loadScene = true;
            FightService fightService = new FightService();
            fightService.FightLoaded += FightService_FightLoaded;
            GameContext.Instance.Monster = this.monster;
            await fightService.StartFight(GameContext.Instance.Player.Id, this.monster.Id);
        }
    }
Je pensais que le EventSystem.current.IsPointerOverGameObject() permettait justement d'éviter ça.
Dernière édition par youtpout le 20 Jan 2021 15:00, édité 1 fois.

Avatar de l’utilisateur
Max
Messages : 8764
Inscription : 30 Juil 2011 13:57
Contact :

Re: [DB-AL] Touch qui s'active derrière un canvas

Message par Max » 17 Jan 2021 18:05

Bonjour,

sur Desktop cela semble bien fonctionner. Maintenant, sur mobile ... ? (perso, je ne touche pas à ces bêbêtes là, donc je ne serais te le dire).
A priori, si on regarde les différents sujets sur les forums, cela semble être problématique. Déjà IsPointerOverGameObject n'est plus référencé dans la doc à partir de la version 2019.
Ces sujets, entre autre, pourraient t'apporter quelques réponses (en particulier sur le nouveau module d'Input pour le second lien):
https://stackoverflow.com/questions/333 ... -ui-or-not
https://forum.unity.com/threads/ispoint ... le.798528/
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

youtpout
Messages : 71
Inscription : 15 Nov 2020 15:54

Re: [DB-AL] Touch qui s'active derrière un canvas

Message par youtpout » 17 Jan 2021 22:20

Bonjour, merci le 2 eme lien donne une solution

Code : Tout sélectionner

  void OnMouseDown()
    {
        if (!IsPointerOverUIObject())
        {
            LoadFight();
        }
    }

    private bool IsPointerOverUIObject()
    {
        var eventSystem = EventSystem.current;
        PointerEventData eventData = new PointerEventData(eventSystem);
        eventData.position = Input.mousePosition;
        List<RaycastResult> results = new List<RaycastResult>();
        eventSystem.RaycastAll(eventData, results);
        return results.Count > 0;
    }
 
Fonctionne sur iOs/Android
Toujours galère de trouver du code qui marche entre Unity qui évolue sans cesse les réponses de 5ans d'âge qui ne sont plus valable, la différence entre mobile et le reste ...

Avatar de l’utilisateur
DevAmat
Messages : 435
Inscription : 23 Nov 2016 11:50

Re: [DB-AL] Touch qui s'active derrière un canvas

Message par DevAmat » 18 Jan 2021 14:46

Salut,

Une autre solution:
- Tu passes par l'interface "IPointerDownHandler".
https://docs.unity3d.com/2018.1/Documen ... ndler.html

Avec cette solution, l’événement ne sera pas reçu si le curseur est sur un élément de l'UI qui à "Raycast Target" à "true".
Attention, il faut le "component" "PhysicsRaycaster" sur la caméra.
https://docs.unity3d.com/2018.1/Documen ... aster.html

youtpout
Messages : 71
Inscription : 15 Nov 2020 15:54

Re: [DB-AL] Touch qui s'active derrière un canvas

Message par youtpout » 18 Jan 2021 21:22

DevAmat a écrit :
18 Jan 2021 14:46
Salut,

Une autre solution:
- Tu passes par l'interface "IPointerDownHandler".
https://docs.unity3d.com/2018.1/Documen ... ndler.html

Avec cette solution, l’événement ne sera pas reçu si le curseur est sur un élément de l'UI qui à "Raycast Target" à "true".
Attention, il faut le "component" "PhysicsRaycaster" sur la caméra.
https://docs.unity3d.com/2018.1/Documen ... aster.html
C'est fonctionnel sur 2019 ? la doc mentionne
Legacy Documentation: Version 2018.1

Avatar de l’utilisateur
DevAmat
Messages : 435
Inscription : 23 Nov 2016 11:50

Re: [DB-AL] Touch qui s'active derrière un canvas

Message par DevAmat » 19 Jan 2021 10:59

Je l'utilise sur la LTS 2019.
Mais effectivement, c'est curieux que l'on ne le retrouve pas dans la doc de 2019.4, je ne connais pas leur plan en ce qui concerne cette fonctionnalité..

EDIT: On retrouve la fonctionnalité ici maintenant:
https://docs.unity3d.com/Packages/com.u ... ndler.html

youtpout
Messages : 71
Inscription : 15 Nov 2020 15:54

Re: [DB-AL] Touch qui s'active derrière un canvas

Message par youtpout » 19 Jan 2021 22:21

DevAmat a écrit :
19 Jan 2021 10:59
Je l'utilise sur la LTS 2019.
Mais effectivement, c'est curieux que l'on ne le retrouve pas dans la doc de 2019.4, je ne connais pas leur plan en ce qui concerne cette fonctionnalité..

EDIT: On retrouve la fonctionnalité ici maintenant:
https://docs.unity3d.com/Packages/com.u ... ndler.html
Merci ça à l'air de fonctionner impec sur mon Android:

Code : Tout sélectionner

  public void OnPointerDown(PointerEventData eventData)
    {
        LoadFight();
    }

Répondre

Revenir vers « Développement plateformes mobile Iphone et Android »