NN
OnTransformChildrenChanged,
OnTransformParentChangedзавутся как? через sendMessage прихотят в ту же очередь как сообщения либо движок сам их зовет через рефлексию немедленно как только кто то поменял потомков или родителя?
Size: a a a
NN
OnTransformChildrenChanged,
OnTransformParentChangedзавутся как? через sendMessage прихотят в ту же очередь как сообщения либо движок сам их зовет через рефлексию немедленно как только кто то поменял потомков или родителя?
DV
A
A
A
DV
A
DV
PV
A
A
DV
V
AS
V
NN
NN
using System.Collections;
using UnityEngine;
public class Test1 : MonoBehaviour
{
private GameObject anotherObject;
private void Awake()
{
anotherObject = new GameObject("anotherObject");
for (int i = 0; i < 10; i++)
{
var go = new GameObject($"go {i}");
go.transform.SetParent(transform);
}
}
private void OnTransformChildrenChanged()
{
Debug.Log($"transform chnaged frame={Time.frameCount} ms={Time.timeSinceLevelLoad}", gameObject);
}
[ContextMenu(nameof(RemoveStandard))]
private void RemoveStandard()
{
StartCoroutine(DoRemoveStandard());
}
private IEnumerator DoRemoveStandard()
{
Debug.Log($"deattach standard frame={Time.frameCount} ms={Time.timeSinceLevelLoad}", gameObject);
transform.GetChild(0).SetParent(anotherObject.transform);
yield break;
}
[ContextMenu(nameof(RemoveFixedUpdate))]
private void RemoveFixedUpdate()
{
StartCoroutine(DoRemoveFixedUpdate());
}
private IEnumerator DoRemoveFixedUpdate()
{
Debug.Log($"currentFrame = {Time.frameCount}", gameObject);
yield return new WaitForFixedUpdate();
Debug.Log($"deattach standard frame={Time.frameCount} ms={Time.timeSinceLevelLoad}", gameObject);
transform.GetChild(0).SetParent(anotherObject.transform);
}
}
NN
PD
using System.Collections;
using UnityEngine;
public class Test1 : MonoBehaviour
{
private GameObject anotherObject;
private void Awake()
{
anotherObject = new GameObject("anotherObject");
for (int i = 0; i < 10; i++)
{
var go = new GameObject($"go {i}");
go.transform.SetParent(transform);
}
}
private void OnTransformChildrenChanged()
{
Debug.Log($"transform chnaged frame={Time.frameCount} ms={Time.timeSinceLevelLoad}", gameObject);
}
[ContextMenu(nameof(RemoveStandard))]
private void RemoveStandard()
{
StartCoroutine(DoRemoveStandard());
}
private IEnumerator DoRemoveStandard()
{
Debug.Log($"deattach standard frame={Time.frameCount} ms={Time.timeSinceLevelLoad}", gameObject);
transform.GetChild(0).SetParent(anotherObject.transform);
yield break;
}
[ContextMenu(nameof(RemoveFixedUpdate))]
private void RemoveFixedUpdate()
{
StartCoroutine(DoRemoveFixedUpdate());
}
private IEnumerator DoRemoveFixedUpdate()
{
Debug.Log($"currentFrame = {Time.frameCount}", gameObject);
yield return new WaitForFixedUpdate();
Debug.Log($"deattach standard frame={Time.frameCount} ms={Time.timeSinceLevelLoad}", gameObject);
transform.GetChild(0).SetParent(anotherObject.transform);
}
}
Л