2014-10-01 2 views
0

Я хочу, чтобы какое-либо поле свойства могло измениться с помощью кнопки «Применить» prefab, существует ли способ изменить значение поля свойства программы (сделайте это всегда жирный)?Редактор Unity Editor, чтобы изменить значение поля свойства

+0

Вы имеете в виду сделать свойство только для чтения, но все же отображаться в редакторе? –

+0

Спасибо за ваше наблюдение, а не только для чтения, я просто хочу сделать что-то вроде положения GameObject, он будет храниться только в сцене и не синхронизироваться с другим экземпляром того же сборника. У меня есть сценарий MonBehavior под названием WayPath. Он использовался для хранения путевых точек для патрулирования NPC. Очевидно, что WayPath должен отличаться в каждом NPC. Таким образом, даже те, кто использовали NPC, использовали тот же Prefab, они все равно должны держать WayPath другим, хотя я нажал «Применить», WayPath не должен синхронизироваться с другим экземпляром. –

+0

Просто сделайте пустой объект gameObject и установите его положение? –

ответ

0

Вам нужны разные экземпляры Waypath, поэтому они уникальны для каждого из созданных NPC.

0

Ваш вопрос довольно интересный. Я сделал быстрое исследование, чтобы дать вам хороший ответ, но я просто не мог. Unity не имеет встроенного решения для этого. Это будет полезно, но, к сожалению, нет.

Единственное, что я нашел полезным, но не пробовал себя: this forum post. Автор отвечает на себя хорошим кодом для обходного пути, который он использует, вы можете просто адаптироваться к вашим потребностям.

Для простоты я вставить здесь:

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(); 
} 

Я надеюсь, что это полезно для вас, из-за даты вопроса. Удачи!

Смежные вопросы