MonoBehaviour.OnTransformParentChanged()
Описание
Вызывается, когда прямой или косвенный родитель GameObject's Transform изменения.
Изменения в родительском объекте включают как прямые, так и косвенные изменения в иерархии: если GameObject восстанавливается в новом Transform, или если восстанавливается любой предшественник в его иерархии.OnTransformParentChanged вызывается во время выполнения, когда изменяются прямые дочери GameObject. Она также может быть вызвана в режиме редактирования, если скрипты используют ExecuteInEditMode или ExecuteAlways. Она вызывается после изменения родительского объекта, что позволяет вам реагировать на новую иерархию в вашем скрипты.
Используйте этот обратный вызов для:
- Обновить или перенастроить компоненты и логику, которые зависят от положения GameObject в иерархии сцены.
- Обновить кэшированные ссылки на родительские объекты или компоненты при изменении родительского объекта.
- Синхронизировать состояние или свойства с новым родителем — например, унаследовать настройки, обновить макеты интерфейса или пересчитать свойства в мировом пространстве.
- Выполнение очистки, связанной с старым родителем, или задач инициализации, связанных с новым родителем.
- В пользовательских скриптах Редактора, для поддержания правильных отношений в инструментах, которые манипулируют иерархией во время редактирования.
Дополнительные ресурсы: ,MonoBehaviour.OnTransformChildrenChanged,.
// Attach this script to any GameObject (for example, an empty "Parent" object). // Assign a Text UI element to the infoText field in the Inspector (optional, for UI feedback). // At runtime, change the object's parent in the hierarchy (via script or by dragging in the Editor). // You'll see a log message, and the UI text will update whenever the parent changes.
using UnityEngine; using UnityEngine.UI; // For UI Text
public class ParentChangeWatcher : MonoBehaviour { public Text infoText; // Assign in inspector
void Start() { UpdateInfoText(); }
// Called automatically by Unity when the parent changes void OnTransformParentChanged() { Debug.Log($"{gameObject.name} parent changed to: {transform.parent?.name ?? "None"}"); UpdateInfoText(); }
void UpdateInfoText() { if (infoText != null) { string parentName = transform.parent ? transform.parent.name : "None"; infoText.text = $"{gameObject.name} is now child of: {parentName}"; } } }