Unity 6.3
0 онлайн 33 гостей 3 в системе
Вход

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}"; } } }