0
votes

Continuez à faire fonctionner la fonction de mise à jour même si le gameObject est inactif

hi2,

Est-ce que quelqu'un sait comment conserver un script fonctionnant dans un gamebject inactivate unité?

J'ai une fonction dans update que je veux garder EventHough L'objet de jeu lui-même est inactif.


3 commentaires

Selon ce que vous essayez d'atteindre, vous pouvez simplement arrêter le maillage de l'affichage de l'objet, mais continuez à la mettre à jour comme si c'était là ...


Vous devez avoir un gameObject qui peut gérer le comportement. Autre moyen @bugfinder a déjà dit.


Cela ressemble à un problème xy. update explicitement est seulement appelé si Le comportement est activé. l'appelait sinon d'ailleurs et non dans Mettre à jour .


5 Réponses :


3
votes

Ce n'est pas possible directement, vous pouvez toutefois toujours appeler la mise à jour et d'autres méthodes de l'extérieur (en utilisant un autre monobehaviour actif)


4 commentaires

C'est triste ..., j'espère que l'unité mettra en œuvre cette option. Peu importe., Merci beaucoup pour votre réponse @ZAMBARI ..... ^ _ ^


Si je pouvais épargner votre instant, voudriez-vous accepter la réponse?


Il vaince le but de désactiver une GameObject uniquement d'appeler les méthodes sur son script de toute façon. Vous pouvez désactiver GameObjects ou vous pouvez désactiver les composants individuels. Si vous souhaitez que le GAMEObject existe dans la scène de quelque manière que ce soit, vous devez désactiver les composants que vous ne voulez pas. Pas le gamebject. L'unité ne mettra jamais en œuvre cette option car elle est un anti-motif.


@TheBatman Il y a un coût associé à une prise en direct de GameObject, surtout s'il a beaucoup de transformations d'enfants - vous ne pouvez pas désactiver la transformation de la transformation sans désactiver le gamebject. J'utilise personnellement cette méthode assez importante pour économiser sur les cycles et pour vous assurer qu'il y a moins de rappels à ces objets. En parlant de qui, je n'ai pas l'URL à portée de main mais je vous obtiens un peu plus de performances en appelant votre-update () au lieu de pincer la mise à jour à chaque fois - si vous avez de nombreux objets



0
votes

réponse courte no. Cependant, si je comprends votre problème assez bien, vous pouvez essayer d'essayer de désactiver des composants individuels.


0 commentaires

2
votes

Je vous recommanderais de reconsidérer votre conception.

Désactivation de l'objet entier est spécialement conçu pour supprimer l'objet du monde, sans la supprimer. Il ne devrait plus participer, sous quelque forme que ce soit à la scène (comme note latérale, vous remarquerez que gameObject.find ne trouvera plus votre objet désactivé non plus).

Vous avez des options, cependant, en commençant par affacer le bit du code, vous devez continuer à fonctionner lorsque l'objet est désactivé:

solution 1: Comme mentionné par Mowie2, désactivez des composants spécifiques. Placez votre morceau de code dans un script différent et désactivez tous les autres composants sauf ce script qui continuerait à courir. Ceci est un peu difficile car vous auriez à itérer sur tous vos composants en activant / la désactivant. Remarque: Certains composants ne peuvent pas être désactivés, tels que la rigidité.

solution 2: Créer une hiérarchie: xxx

Dans ce cas, vous désactiveriez l'objet < Code> Enfant (enfant aurait tous les composants habituels tels que les rendriers, les collidents, etc.). MyObject contiendrait ce bit de code qui devrait continuer à courir.

Solution 3: Mise à jour d'appel manuellement (comme mentionné par Zambari) à partir d'un autre script actif:

sur votre script qui sera désactivé , Ajouter public devant la mise à jour: xxx

dans un autre script connecté à un objet actif: xxx < / pré>


1 commentaires

Nice j'aime cette idée !!! Merci beaucoup pour votre aperçu ..! ^ _ ^



-1
votes

Vous pouvez obtenir un composant Meshrenderer & Set Activer = False. Procédez votre logique dans MISE À JOUR FONCTION SET MESHRENDERER Activer = TRUE


0 commentaires

3
votes

Une approche serait d'avoir deux objets de jeu. Celui qui a le script que vous souhaitez exécuter et l'autre qui devient désactivé ou activé.

L'objet désactifable pourrait être un enfant de l'objet scripté, auquel cas nous pourrions considérer cela un "composant" de l'objet parent.

L'objet parent présente maintenant les deux fonctionnalités que vous désiriez. Accès au script pendant que l'objet de jeu est inactif.

Comment vous divisez la mise en œuvre entre les deux objets et les classes associées refléteront votre application particulière.

profiter

PS vient de remarquer que je résume la deuxième approche de @kevernicus.


0 commentaires