Développement d'applications Unity basé sur UIWidgets (3)

      Parlons des paramètres d'interaction entre UIWidgets et 3D. UIWidgets indique officiellement qu'il peut interagir avec la 3D. Cependant, si vous opérez directement dans Unity, par exemple, il est normal de cliquer sur un bouton pour déclencher une transformation de position, de rotation et de zoom, mais si cela change continuellement, l'écran restera bloqué.

        Dans l'image ci-dessus, j'ai ajouté un bouton avec bouton de rotation automatique et ajouté un bouton UIWidgets sur l'interface. Vous pouvez voir que dans l'état en cours d'exécution, le carré de la scène de la scène continuera à tourner, mais la rotation du jeu la scène sera tout à fait Caton. La raison de ce phénomène est que l'interface utilisateur d'UIWidgets est au premier plan et que le mécanisme de mise à jour d'UIWidgets est que si l'interface ne change pas ou que setstate () n'est pas appelée, l'interface n'est fondamentalement pas actualisée, mais le cube change à chaque fois. cadre, donc Cela a conduit au phénomène d'une carte une carte.

        Si vous connaissez la raison, il est facile de la résoudre, laissez simplement l'interface utilisateur actualiser chaque image. J'ai exécuté une vraie boucle dans le script UIWidgets. Chaque image déclenche un événement SetState () vide (si vous ne comprenez pas setState, vous pouvez comprendre le mécanisme de vidage de Fluter), puis l'affichage 3D est normal. Mais cela semble bizarre, car chaque image est rafraîchie, le drawcall revient. . .

        Plus tard, après avoir consulté le développeur d'UIWidgets, l'autre partie a donné la méthode correcte, qui consiste à définir les deux délégués de Windows sur des méthodes vides lorsque UIWidgetsPanel est initialisé.

Window.onFrameRateSpeedUp = ()=> { };
Window.onFrameRateCoolDown = ()=> { };

        Ce point est expliqué sur le github officiel des UIWidgets officiels. C'est juste que l'interface du serveur international a été accidentellement ouverte à ce moment-là. Tout était en anglais, mais je ne l'ai pas trouvé. Ensuite, à cause du test ci-dessus , Je pensais que UIWidgets ne pouvait pas faire l'interface utilisateur et l'interaction 3D souffre vraiment d'un mauvais anglais. . . Soupirez encore pour la génialité d'UIWidgets!

        Vient ensuite le fonctionnement interactif de UIWidgets sur le code 3D, car les UIWidgets sont générés dynamiquement et les classes qui héritent de UIWidgetsPanel, StatefulWidget et StatelessWidget ne sont pas les mêmes que la classe MonoBehaviour. Vous ne pouvez pas déclarer directement un GameObject ou Transform public, puis faire glisser directement. Référence directe, les classes personnalisées ne sont pas correctes. Ma propre approche consiste à écrire une classe singleton pour référencer ces classes et ces objets, puis à la monter sur les objets vides de la scène, afin que je puisse utiliser les classes UIWidgets pour référencer directement le singleton Pour appeler.

        De plus, comme elle n'hérite pas directement de MonoBehaviour, la méthode coroutine n'est pas disponible, mais les méthodes existantes de UIWidgets peuvent toujours être utilisées pour simuler la coroutine

        void Refresh()
        {
            Promise.Delayed(TimeSpan.FromSeconds(0.3f)).Then(
                () =>
                {
                            //dosomethings
                            setState();
                    Refresh();
                }
                );
        }

La méthode ci-dessus ne peut pas déclencher l'événement d'actualisation. Au début, je l'ai utilisée pour forcer l'interface à s'actualiser afin d'obtenir l'effet de mise à jour synchrone de l'interface 3D. Promise est une classe d'UIWidgets, qui doit être utilisée pour les opérations asynchrones, le traitement files d'attente, etc. Outils.

        Fondamentalement, UIWidgets doit interagir avec la 3D, il suffit de le changer selon la configuration ci-dessus. Ensuite, la prochaine étape consiste à parler de la partie app!

Je suppose que tu aimes

Origine blog.csdn.net/ssssssilver/article/details/107294672
conseillé
Classement