今天我只是想制作自定义Unity脚本检查器,但我遇到了一个问题:我无法获取文件内容。
这是我的代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System.IO;
[CustomEditor(typeof(MonoScript))]
public class SimpleEditCore : Editor {
public string text;
public string path;
public SimpleEditCore(){
text = new StreamReader (path).ReadToEnd ();
}
public override void OnInspectorGUI()
{
path = AssetDatabase.GetAssetPath (target);
// code using text and path
}
}
现在问题是:我需要设置textarea文本或文件(脚本)文本,但要使其可编辑我需要使用除OnInspectorGUI()
之外的其他功能,但是当我将代码放入{{1}时我只是无法得到文件的路径,因为文件的路径是目标,而且这个目标只在public SimpleEditCore()
中定义。怎么解决?
答案 0 :(得分:1)
文档显示了一个名为OnEnable的方法,可用于在加载对象时获取序列化值
https://docs.unity3d.com/ScriptReference/Editor.html
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System.IO;
[CustomEditor(typeof(MonoScript))]
public class SimpleEditCore : Editor {
public string text;
public string path;
void OnEnable()
{
text = serializedObject.FindProperty ("text");
}
public override void OnInspectorGUI()
{
path = AssetDatabase.GetAssetPath (target);
EditorGUILayout.LabelField ("Location: ", path.ToString ());
text = EditorGUILayout.TextArea (text);
if (GUILayout.Button ("Save!")) {
StreamWriter writer = new StreamWriter(path, false);
writer.Write (text);
writer.Close ();
Debug.Log ("[SimpleEdit] Yep!");
}
}
}
但总的来说,我认为你错过了这个对象的价值。它应该提供一个接口来序列化数据,而无需知道文件路径。您应该能够只存储数据元素并在不知道文件路径的情况下序列化它们。