- Home /
How to update serializedField showed on the inspector by script?
So, I have a serialized object which contain a component like this:
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using System.Collections.Generic;
[System.SerializableAttribute]
public class ControllerComponent : MonoBehaviour {
public bool image = false;
public bool quiz = false;
public Vector3 originalRotation;
[SerializeField]
public float timeStamp;
[SerializeField]
public Sprite displayedImage;
Now, on [InitializeOnLoad] from other script I initialize the field "timeStamp" to 5. As I edit the xml file to get the data from, [InitializeOnLoad] will create another object with the above component. However, I don't want to have duplicated components, so I want to get the data from the new component and update them to the old component, and then remove the new component. When I print out something, I can see the data is updated to the old component, but nothing changes on the inspector. Here is how I did it:
static void updateContent(Transform a, Transform b){
ControllerComponent componentA = a.gameObject.GetComponent<ControllerComponent> ();
ControllerComponent componentB = b.gameObject.GetComponent<ControllerComponent> ();
EditorGUI.BeginChangeCheck ();
var serializedObjectA = new SerializedObject(componentA);
var serializedObjectB = new SerializedObject(componentB);
serializedObjectA.CopyFromSerializedProperty(serializedObjectB.FindProperty("timeStamp"));
if (EditorGUI.EndChangeCheck ()) {
serializedObjectA.ApplyModifiedProperties ();
EditorGUIUtility.LookLikeControls ();
EditorUtility.SetDirty (componentA);
}
Debug.Log("current Time " + serializedObjectA.FindProperty("timeStamp").floatValue);
}
Can someone show me how to update it on the inspector please? Thank you!
Answer by Masterio · Jan 08, 2016 at 08:08 AM
Thanks! But the thing is I did the "updateContent" inside a [InitializeOnLoad] which require a static object. Thus when I type "Editor.R", nothing showed up for Repaint() method. I typed it in anyway an force it to compile. Then the error is:" An object reference is required to access non-static member `UnityEditor.Editor.Repaint()'"
Your answer
Follow this Question
Related Questions
Finding property with serializedObject on script with a generic 0 Answers
[SerializeField] Not Working Properly? 1 Answer
Error when trying to Serialize a field that is in a class 0 Answers
Why does the prefabOverride not work on fields marked as SerializeField? 0 Answers
Custom Inspector: Using 'serializedObject' to access inherited members 1 Answer