2017-09-19 16 views
0

今日私はカスタムのUnityスクリプトインスペクタを作成しようとしていますが、私は問題に直面しています。ファイルの内容を取得できません。ユニティ - カスタム変数設定ソリューション

これは私のコードです:私は、ファイルのテキストエリアテキストOTテキスト(スクリプト)を設定するために、私はOnInspectorGUI()以外の機能を使用する必要があり、それを編集可能にする必要がありますが、:

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 
    } 
} 

そして今、問題私がコードをpublic SimpleEditCore()に入れると、ファイルのパスがターゲットであり、このターゲットはOnInspectorGUI()にしか定義されていないので、ファイルのパスを取得できません。それを解決するには?

答えて

1

ドキュメントオブジェクトが

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!"); 
    } 
} 
} 

にロードされたときにシリアライズされた値を取得するために使用することができますOnEnableと呼ばれる方法は、しかし全体的に、私はあなたがこのオブジェクトの値が欠落していると思う示しています。ファイルパスを知らなくてもデータをシリアル化するためのインターフェースを提供するはずです。データ要素を格納して、ファイルパスを知らなくてもそれらを直列化できるだけです。

関連する問題