Unity3d Unity编辑器脚本,如何以编程方式标记属性字段';s值不能更改

Unity3d Unity编辑器脚本,如何以编程方式标记属性字段';s值不能更改,unity3d,unity3d-editor,Unity3d,Unity3d Editor,我想防止预制件的“应用”按钮可能会改变某些属性字段,是否有办法通过编程方式标记属性字段的值进行更改(使其始终为粗体)?您需要不同的路径实例,以便它们对于每个实例化的NPC都是唯一的 你的问题很有趣。我做了一个快速的调查给你一个好的答案,但我就是做不到。Unity对此没有内置的解决方案。这肯定会有用,但对不起,不行 我发现唯一有用但自己没有尝试过的是。作者用一段很好的代码回答了自己的问题,他正在使用一种变通方法,您可以根据自己的需要进行调整 为简单起见,我将其粘贴到此处: public overr

我想防止预制件的“应用”按钮可能会改变某些属性字段,是否有办法通过编程方式标记属性字段的值进行更改(使其始终为粗体)?

您需要不同的路径实例,以便它们对于每个实例化的NPC都是唯一的

你的问题很有趣。我做了一个快速的调查给你一个好的答案,但我就是做不到。Unity对此没有内置的解决方案。这肯定会有用,但对不起,不行

我发现唯一有用但自己没有尝试过的是。作者用一段很好的代码回答了自己的问题,他正在使用一种变通方法,您可以根据自己的需要进行调整

为简单起见,我将其粘贴到此处:

public override void OnInspectorGUI ()
{
    serializedObject.Update ();
    DrawDefaultInspector ();

    SerializedProperty myProperty = serializedObject.FindProperty ("maxDistance");

    if (tick) {
       myProperty.floatValue = tempValue;
       tick = false;
    }
if(!Application.isPlaying)
{
    if (!myProperty.prefabOverride) {
       GUI.color = Color.red;
       tick = true;
       tempValue =myProperty.floatValue;
       myProperty.floatValue += 1;
    }
    else
        GUI.color = Color.green;
}
EditorGUILayout.PropertyField (myProperty);

    if (GUI.changed) {
        EditorUtility.SetDirty (target);
    }

serializedObject.ApplyModifiedProperties ();
}
由于问题的日期,我希望这对你有用。
祝你好运

你的意思是使一个属性只读,但仍然显示在编辑器中?感谢你的后续行动,而不是只读,我只想使一些像游戏对象的位置,它将只存储在场景中,而不是同步到同一预制的其他实例。我有一个名为WayPath的MonBehavior脚本。它用来存储NPC巡逻的路线点。显然,在每个NPC中,路径应该保持不同。所以即使那些NPC使用相同的预设,他们仍然应该保持路径不同,尽管我按下了“应用”按钮,路径不应该与其他实例同步。只需制作一个空的游戏对象并设置它的位置?