Unity Editor编辑Inspector面板数据保存问题
发表于2018-12-18
使用Editor 编辑脚本,在Inspector显示自定义UI

如下

代码如下 Car.cs
using UnityEngine; using System.Collections; public class Car : MonoBehaviour { public int wheelCount = 0; // Use this for initialization void Start () { } }
编辑脚本 CarEditor.CS
using UnityEngine; using System.Collections; using UnityEditor; [CustomEditor(typeof(Car))] [CanEditMultipleObjects] public class CarEditor : Editor { private Car _car; public override void OnInspectorGUI() { _car = (Car)target; _car.wheelCount = EditorGUILayout.IntSlider("WheelNumber", _car.wheelCount, 0, 20); } }
有一个问题就是在Inspector面板修改 WheelNumber的数值后,运行项目,当项目停止的时候,WheelNumber 的数据又回到以前的数据,(数据未保存成功,数据丢失)
解决办法需要在 修改数据下面加几句代码
if (GUI.changed) { EditorUtility.SetDirty(target); }
修改后完整代码如下:
using UnityEngine; using System.Collections; using UnityEditor; //指定要编辑的脚本为 Car.CS [CustomEditor(typeof(Car))] [CanEditMultipleObjects] // 5.1.2版本只有要在多个对象上挂Car.CS要加该句 public class CarEditor : Editor { private Car _car; // 定义一个 Car 实例 public override void OnInspectorGUI() { _car = (Car)target; //获取 Car 实例(选中对象上挂载的 Car脚本) //将Car 的属性 wheelCount,以滑动条的形式显示在Inspector 面板 _car.wheelCount = EditorGUILayout.IntSlider("WheelNumber", _car.wheelCount, 0, 20); //当Inspector 面板发生变化时保存数据 if (GUI.changed) { EditorUtility.SetDirty(target); } } }
这样在Inspector 面板修改参数后 Ctrl + S 即可保存修改的数据。
如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引