- Home /
Can you make changes to exposed public variables persist in inspector ?
Hello,
I am trying to create system where I need to do the following:
I have public variable exposed to inspector and I want to change it via script during runtime. I want the change to persist, like it would if you changed the value manually.
I have few pictures which explain my intentions.
How my Gameobject currently looks like in the editor
Current script
public class DemoScript : MonoBehaviour
{
public List<int> List = new List<int>();
void Start()
{
// This is not persistent
List.Add(1);
}
}
Once I press play, List will update correctly on the inspector but once I stop executing ,the value will reset back to its original state.
What I am hoping to do, is to run the script and have the inspector look like this:
Is there any way to achieve this? I have googled around and browsed a lot but couldn't find any possible solution for my problem.
Answer by SohailBukhari · Apr 19, 2017 at 12:32 PM
Here your need the scriptable object For you data. First of all make a class and inherit with ScriptableObject as in the code.
using System.Collections.Generic;
using UnityEngine;
[CreateAssetMenu(fileName = "Data", menuName = "Inventory/integerList")]
public class MakeScritableObject : ScriptableObject {
public List<int> IntegerList = new List<int>();
}
Now you will see that in your assets menu -> create->Inventory/integerList menu created. Click on the integerList.
Now you will see that ScriptableObject is created in your project , rename as you want.When You click on the ScriptableObject then you will see the IntegerList which we declared in the MakeScritableObject class.
Now,make a class and access scriptable object data. Make MakeScritableObject instance and pass scriptableObject in hierarchy which you created from the menu.
using UnityEngine;
public class ScriptableDemo : MonoBehaviour
{
public MakeScritableObject MyListClass;
void Start()
{
MyListClass.IntegerList.Add(1);
MyListClass.IntegerList.Add(2);
MyListClass.IntegerList.Add(3);
}
}
Now Attach ScriptableDemo to any active gameObject and when you run values will be stored in your ScriptableObject.When you exit from play mode then your values will never replace.
Your answer
Follow this Question
Related Questions
Adding in other variables through the inspector in a public string 1 Answer
object can't be null when highlighted in the inspector? 1 Answer
Public variables are not showing in the inspector 1 Answer
Changing material during runtime 1 Answer
Public and SerializedField's not showing in inspector 1 Answer