在预制模式下,多次调用OnValidate

时间:2019-03-08 16:43:29

标签: unity3d

我有一个 New Project ,其中一个预制实例包含一个空的Gameobject。该游戏对象具有以下脚本。在场景视图中(游戏对象的test_f等于0。在 Prefab模式中相同。

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。然后在预制模式下,我清除了日志控制台,我点击了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(因为它是该Prefab实例的子代),但是为什么有 四个日志 的?

为什么会有那么多日志?

0 个答案:

没有答案