Unityのデフォルトインスペクタの問題を解決するカスタムインスペクタを作成しています。私のシステムでは、リフレクションと属性を使用してカスタマイズ可能なインスペクタを描画します。 playmodeを入力せずにインスタンスを変更すると正常に動作します。問題は、エディタが私のオブジェクトに加えた変更を見ないように見えることです。これは通常の方法で確認できます。インスペクタの変更された値についてユニティに通知する
- 再生時にインスタンスがリセットされます。
- エディタでインスタンスをリセットし直します。
エディタでシーンを保存するのに約1秒かかり、その間にカーソルが変化します。これは、MonoBehaviour
(f.e. RigidBody
)の値を変更した後にシーンを保存することでトリガーできます。
自分のインスペクタを使用して値を変更してシーンを保存しても、実際の保存プロセス(視覚的手がかりはありません)は発生しません。 Unityが変更がないと考えているかのように。
ゲームオブジェクト私はインスペクタで修正したいと思います:
[EnableIR]
public class CustomerSpawn : MonoBehaviour
{
[Inspect(InspectionKind.DropableObject)]
public GameObject CustomerPrefab; // This field resets to null on play.
}
私はリフレクションを使用して値と参照を変更するPropertyInfo.SetValue
またはFieldInfo.SetValue
を使用しています。 変更についてUnityに通知するために呼び出す必要のあるメソッドはありますか?
リンク:私のカスタムインスペクタを含む
- My GitHub Repository。
- This class in my Repositoryには、実際に値を設定するコードが含まれています。私はそれを自分自身を考え出し
これは奇妙です。 [The docs](https://docs.unity3d.com/ScriptReference/EditorUtility.SetDirty.html)は、何か別のことをし、5.3以降の 'Undo.RecordObject'を使用するように読者に知らせる' EditorUtility.SetDirty'について説明しています。 'Undo.RecordObject'は私のために何もしません。すべてのエキスパート体験:-) –
代わりに 'EditorSceneManager.MarkSceneDirty'を使う必要があります。それを試して、何が起こるかを見てください。現在のシーンを渡してください。 – Programmer
@Programmerそれはうまくいくように思われ、おそらくもっと良いことです。 –