Page 1 sur 1

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

Publié : 17 Jan 2021 17:08
par youtpout
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.

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

Publié : 17 Jan 2021 18:05
par Max
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/

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

Publié : 17 Jan 2021 22:20
par youtpout
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 ...

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

Publié : 18 Jan 2021 14:46
par DevAmat
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

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

Publié : 18 Jan 2021 21:22
par youtpout
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

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

Publié : 19 Jan 2021 10:59
par DevAmat
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

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

Publié : 19 Jan 2021 22:21
par youtpout
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();
    }