OnValidate вызывается несколько раз в режиме Prefab - PullRequest
0 голосов
/ 08 марта 2019

У меня есть Новый проект с одним готовым экземпляром, который содержит один пустой Gameobject.Этот Gameobject имеет скрипт ниже.В Scene View test_f (из игрового объекта) равно 0. То же самое в Prefab Mode .

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class OnValTest : MonoBehaviour
{
    public bool test_bool = false;
    public float test_f = 0.0f;

    //private void OnValidate()
    //{
    //    test_f++;
    //    Debug.Log("f: " + test_f);
    //}
}

Когда я раскомментировал OnValidate функция Я видел эти два журнала:

f: 1
f: 1

Затем, когда я вошел в режим Prefab, я увидел это в своих журналах:

f: 1
f: 1
f: 1 <

Затем, когда я нажимаю на test_bool в моем инспекторе:

f: 1
f: 1
f: 1
f: 2 <
f: 3 <
f: 4 <
f: 5 <
f: 6 <

Наконец-то я изменил строку журнала на эту: Debug.Log("f: " + test_f + " name: " + gameObject.name); и увеличил test_f игрового объекта префаб-экземпляра (не из префаб-режима) до 100. Затем в префаб-режиме I Очистил консоль журнала , и я дважды щелкнул test_bool:

f: 4 name: Child
f: 5 name: Child
f: 6 name: Child
f: 7 name: Child
f: 102 name: ChildNotPrefab
f: 5 name: Child
f: 6 name: Child
f: 7 name: Child
f: 8 name: Child
f: 103 name: ChildNotPrefab

Я могу понять, почему ChildNotPrefab вызвал OnValidate (потому что он является потомком этого префабанапример), но почему существует четыре журнала из Child object?

Почему существует так много журналов?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...