Address
304 North Cardinal St.
Dorchester Center, MA 02124
Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM
We use cookies to ensure that we provide you with the best possible experience on our site.
Votre source incontournable sur Unity et le développement web
Votre source incontournable sur Unity et le développement web
Sur Unity et dans presque tous les autres logiciels, vous utilisez « CTRL + Z » ou « Command + Z » pour annuler et « CTRL + Y » ou « Command + Y » pour rétablir une action.
Cependant, lors de l’utilisation d’un script personnalisé dans l’éditeur, l’action d’annulation doit être implémentée. Sinon, peu importe à quel point vous appuyez sur vos touches, rien ne se passera.
Il est très important de spécifier ces méthodes, car un mauvais clic se produit si rapidement et sans possibilité d’annulation, cela peut être dramatique.
Undo est une classe C# statique, et diverses méthodes doivent être utilisées en fonction des actions que vous effectuez. Toutes les méthodes d’annulation ont un paramètre de chaîne, qui est utilisé pour nommer l’action effectuée.
Vous pouvez ensuite le trouver dans l’éditeur en haut du menu ‘Edit‘.
Pour modifier un gameObject, utilisez Undo.RecordObject
. Veillez à passer le composant que vous modifiez en tant que paramètre, par exemple :
[MenuItem("Window/Reset Position")]
public static void Reset()
{
var go = Selection.activeGameObject;
Undo.RecordObject(go.transform, "reset position");
go.transform.position = Vector3.zero;
}
Pour annuler l’ajout d’un composant, la méthode est différente : vous n’avez plus besoin d’utiliser AddComponent
. Remplacez-le par Undo.AddComponent
.
[MenuItem("Window/Add BoxCollider")]
public static void AddBoxCollider()
{
var go = Selection.activeGameObject;
Undo.AddComponent(go);
}
Dans l’éditeur, nous utilisons généralement Object.DestroyImmediate
pour détruire un GameObject. Pour une action d’annulation, utilisez Undo.DestroyObjectImmediate
à la place. Cette fonction doit également être utilisée pour détruire un composant.
var go = Selection.activeGameObject;
Undo.DestroyObjectImmediate(go);
Pour créer ou instancier un gameObject, Undo.RegisterCreatedObjectUndo
doit être appelé pour enregistrer l’action Undo.
[MenuItem("Window/Add Cube")]
public static void AddCube()
{
var cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
Undo.RegisterCreatedObjectUndo(cube, "Add Cube");
}
Lors de la modification de la hiérarchie pour enregistrer une action d’annulation, utilisez Undo.SetTransformParent
pour changer le parent. Pour les modifications de position, utilisez Undo.SetSiblingIndex
.
var go = Selection.activeGameObject;
Undo.SetTransformParent(go.transform, parentTransform, "Set parent");
Undo.SetSiblingIndex(go.transform, 0, "Set on top");
Voici donc les fonctions les plus couramment utilisées pour enregistrer l’annulation.
Vous pouvez également enregistrer des annulations par groupes, afin de pouvoir effectuer une multitude d’actions et les annuler toutes en une fois. Très utile si vous ne voulez pas appuyer sur « CTRL + Z » pendant 2 heures…
Undo.SetCurrentGroupName
pour nommer votre groupe.Undo.GetCurrentGroup
.Undo.CollapseUndoOperations
.[MenuItem("Window/ResetDisable")]
public static void ResetDeactivate()
{
// set group
Undo.SetCurrentGroupName("Reset & Disable GameObject");
// get current group
int group = Undo.GetCurrentGroup();
var go = Selection.activeGameObject;
Undo.RecordObject(go.transform, "Reset position");
go.transform.position = Vector3.zero;
Undo.RecordObject(go, "Disable GameObject");
go.SetActive(false);
// merge all undo in the group
Undo.CollapseUndoOperations(group);
}
En conclusion, n’oubliez pas d’implémenter votre annulation lorsque vous travaillez avec des scripts dans l’éditeur. Cela vous fera gagner beaucoup de temps et vous aidera à mener à bien votre projet.
Merci de votre lecture.