Vous ne pouvez pas forcer Unity3D attirer votre personnalisé inspecteur d'ailleurs que la fenêtre de l'inspecteur.
Btw, vous pouvez manuellement démarrent des instances d'une Editor à l'aide de De l'éditeur.CreateEditor méthode.
Puisque vous êtes en affichage personnalisé inspecteur, qu'il devrait être possible d'instancier manuellement à partir de l'intérieur de Window.OnGUI méthode, et utilisez le public OnInspectorGUI méthode de l'éditeur pour attirer l'éditeur à l'intérieur de votre fenêtre.
Par exemple, si vous avez branché un script appelé CustomScript à un GameObject et ont une Editor appelé CustomScriptEditor, en supposant que vous avez sélectionné la GameObject de la hiérarchie, ce code de visualiser la coutume de l'inspecteur à l'intérieur d'un EditorWindow:
using UnityEditor;
using UnityEngine;
public class TestWindow : EditorWindow
{
[MenuItem ("Window/Editor Window Test")]
static void Init ()
{
//Get existing open window or if none, make a new one:
TestWindow window = (TestWindow)EditorWindow.GetWindow (typeof (TestWindow));
}
void OnGUI () {
GameObject sel = Selection.activeGameObject;
CustomScript targetComp = sel.GetComponent<CustomScript>();
if (targetComp != null)
{
var editor = Editor.CreateEditor(targetComp);
editor.OnInspectorGUI();
}
}
}
Super! Fonctionne bien aussi avec beginscrollview!
De plein droit maintenant, cette question est l'un des principaux résultats sur google pour des requêtes telles que "l'Unité de l'inspecteur de l'intérieur de la fenêtre de l'éditeur", donc je fais un necropost de partager quelques informations très importantes que j'ai appris à travers des heures de frustration:
Je suis en train de construire un outil d'édition qui rend l'utilisation de la coutume des inspecteurs à l'intérieur de l'EditorWindow, et j'ai utilisé exactement la même méthode que Heisenbug. Parfois, tout en travaillant sur l'outil de ma console serait bombardé avec des centaines de mystérieux référence null exceptions. Le redémarrage de l'Unité serait de les faire disparaître, mais ils auraient inévitablement retour. J'ai finalement été en mesure de retracer le problème de "l'Éditeur.CreateEditor", voici la leçon que j'ai apprise à la dure:
Vous devez manuellement détruire tout les inspecteurs créé à partir de l'Éditeur.CreateEditor!
Normalement, l'Unité va instancier un inspecteur lorsque l'objet est sélectionné, et détruisent automatiquement cette instance dès que l'objet est désactivé/supprimé/etc. Mais un inspecteur créés via l'Éditeur.CreateEditor ne sera jamais détruit et s'attarder quelque part dans la mémoire longtemps après que l'objet qu'il a inspecté a été détruit.
Vous pouvez le prouver en ajoutant le code suivant à votre custom inspecteur:
L'aide de l'inspecteur normalement, vous allez toujours voir ces messages dans des paires comme des instances de l'inspecteur créé puis détruit. Mais essayez de l'instanciation d'un peu d'inspecteurs à partir de votre EditorWindow classe et vous ne verrez que la "sur " activer" des messages.
J'ai appris que l'Unité des appels OnEnable() chaque fois que les scripts sont recompilés. Essayez-le et vous verrez votre console de remplir avec "sur " activer" les messages de tous les inspecteur des instances qui n'ont jamais été nettoyées. Ces instances vont persister longtemps après que les objets qu'ils ont été inspection ont été détruits, et tout code d'initialisation dans OnEnable() rompre de façon spectaculaire lancer une avalanche de mystérieux exceptions.
Ma solution ressemble à quelque chose comme ceci (ce code serait aller dans votre EditorWindow classe):
Editor embeddedInspector;
...
//a helper method that destroys the current inspector instance before creating a new one
//use this in place of "Editor.CreateEditor"
void RecycleInspector(Object target)
{
if (embeddedInspector != null) DestroyImmediate(embeddedInspector);
embeddedInspector = Editor.CreateEditor(target);
}
...
//clean up the inspector instance when the EditorWindow itself is destroyed
void OnDisable()
{
if (embeddedInspector != null) DestroyImmediate(embeddedInspector);
}
Vous ne pouvez pas forcer
Unity3D
attirer votre personnalisé inspecteur d'ailleurs que la fenêtre de l'inspecteur.Btw, vous pouvez manuellement démarrent des instances d'une
Editor
à l'aide de De l'éditeur.CreateEditor méthode.Puisque vous êtes en affichage personnalisé inspecteur, qu'il devrait être possible d'instancier manuellement à partir de l'intérieur de
Window.OnGUI
méthode, et utilisez le publicOnInspectorGUI
méthode de l'éditeur pour attirer l'éditeur à l'intérieur de votre fenêtre.Par exemple, si vous avez branché un script appelé
CustomScript
à unGameObject
et ont uneEditor
appeléCustomScriptEditor
, en supposant que vous avez sélectionné laGameObject
de la hiérarchie, ce code de visualiser la coutume de l'inspecteur à l'intérieur d'unEditorWindow
:OriginalL'auteur Heisenbug
De plein droit maintenant, cette question est l'un des principaux résultats sur google pour des requêtes telles que "l'Unité de l'inspecteur de l'intérieur de la fenêtre de l'éditeur", donc je fais un necropost de partager quelques informations très importantes que j'ai appris à travers des heures de frustration:
Je suis en train de construire un outil d'édition qui rend l'utilisation de la coutume des inspecteurs à l'intérieur de l'EditorWindow, et j'ai utilisé exactement la même méthode que Heisenbug. Parfois, tout en travaillant sur l'outil de ma console serait bombardé avec des centaines de mystérieux référence null exceptions. Le redémarrage de l'Unité serait de les faire disparaître, mais ils auraient inévitablement retour. J'ai finalement été en mesure de retracer le problème de "l'Éditeur.CreateEditor", voici la leçon que j'ai apprise à la dure:
Vous devez manuellement détruire tout les inspecteurs créé à partir de l'Éditeur.CreateEditor!
Normalement, l'Unité va instancier un inspecteur lorsque l'objet est sélectionné, et détruisent automatiquement cette instance dès que l'objet est désactivé/supprimé/etc. Mais un inspecteur créés via l'Éditeur.CreateEditor ne sera jamais détruit et s'attarder quelque part dans la mémoire longtemps après que l'objet qu'il a inspecté a été détruit.
Vous pouvez le prouver en ajoutant le code suivant à votre custom inspecteur:
L'aide de l'inspecteur normalement, vous allez toujours voir ces messages dans des paires comme des instances de l'inspecteur créé puis détruit. Mais essayez de l'instanciation d'un peu d'inspecteurs à partir de votre EditorWindow classe et vous ne verrez que la "sur " activer" des messages.
J'ai appris que l'Unité des appels OnEnable() chaque fois que les scripts sont recompilés. Essayez-le et vous verrez votre console de remplir avec "sur " activer" les messages de tous les inspecteur des instances qui n'ont jamais été nettoyées. Ces instances vont persister longtemps après que les objets qu'ils ont été inspection ont été détruits, et tout code d'initialisation dans OnEnable() rompre de façon spectaculaire lancer une avalanche de mystérieux exceptions.
Ma solution ressemble à quelque chose comme ceci (ce code serait aller dans votre EditorWindow classe):
OriginalL'auteur jakec