facebook twitter hatena line email

「Unity/Editor/inspector値更新」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
 
(同じ利用者による、間の8版が非表示)
行1: 行1:
 +
==Inspector更新サンプル==
 +
以下メンバを更新するサンプル
 
*testObjectに、TestObjectをいれる。
 
*testObjectに、TestObjectをいれる。
 
*numに、3をいれる。
 
*numに、3をいれる。
 +
*usersにGameObjectをいれる。
  
 
SampleScene.cs
 
SampleScene.cs
行8: 行11:
 
public class SampleScene : MonoBehaviour
 
public class SampleScene : MonoBehaviour
 
{
 
{
    [SerializeField] GameObject testObject;
 
 
     [SerializeField] int num;
 
     [SerializeField] int num;
 +
    [SerializeField] GameObject testObject;
 +
    [SerializeField] List<GameObject> users;
 
     // Start is called before the first frame update
 
     // Start is called before the first frame update
 
     void Start()
 
     void Start()
行24: 行28:
 
</pre>
 
</pre>
  
SampleSceneInspectorEditor.cs
+
SampleSceneUpdateEditor.cs
 
<pre>
 
<pre>
 
using UnityEngine;
 
using UnityEngine;
行30: 行34:
  
 
[CustomEditor(typeof(SampleScene))]
 
[CustomEditor(typeof(SampleScene))]
public class SampleSceneInspectorEditor : Editor
+
public class SampleSceneUpdateEditor : Editor
 
{
 
{
 
     public override void OnInspectorGUI()
 
     public override void OnInspectorGUI()
行36: 行40:
 
         serializedObject.Update();
 
         serializedObject.Update();
  
         var testObject = serializedObject.FindProperty("testObject");
+
         // num
 
         var num = serializedObject.FindProperty("num");
 
         var num = serializedObject.FindProperty("num");
 
 
         num.intValue = 3;
 
         num.intValue = 3;
 +
        EditorGUILayout.PropertyField(num);
 +
 +
        // testObject
 +
        var testObject = serializedObject.FindProperty("testObject");
 
         testObject.objectReferenceValue = GameObject.Find("TestObject");
 
         testObject.objectReferenceValue = GameObject.Find("TestObject");
       
 
 
         EditorGUILayout.PropertyField(testObject);
 
         EditorGUILayout.PropertyField(testObject);
         EditorGUILayout.PropertyField(num);
+
 
 +
        // users配列
 +
        var users = serializedObject.FindProperty("users");
 +
        if (users.arraySize == 0)
 +
        {
 +
            users.InsertArrayElementAtIndex(0);
 +
        }
 +
        var user = users.GetArrayElementAtIndex(0);
 +
        user.objectReferenceValue = GameObject.Find("User");
 +
         EditorGUILayout.PropertyField(users);
  
 
         serializedObject.ApplyModifiedProperties();
 
         serializedObject.ApplyModifiedProperties();
行50: 行65:
 
</pre>
 
</pre>
 
参考:https://www.hanachiru-blog.com/entry/2020/10/19/120000#SerializedObject%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F%E3%82%84%E3%82%8A%E6%96%B9
 
参考:https://www.hanachiru-blog.com/entry/2020/10/19/120000#SerializedObject%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F%E3%82%84%E3%82%8A%E6%96%B9
 +
 +
参考:https://qiita.com/albatrus/items/b9799f7f2a805faf3da8

2022年2月23日 (水) 15:33時点における最新版

Inspector更新サンプル

以下メンバを更新するサンプル

  • testObjectに、TestObjectをいれる。
  • numに、3をいれる。
  • usersにGameObjectをいれる。

SampleScene.cs

using UnityEngine;

public class SampleScene : MonoBehaviour
{
    [SerializeField] int num;
    [SerializeField] GameObject testObject;
    [SerializeField] List<GameObject> users;
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

SampleSceneUpdateEditor.cs

using UnityEngine;
using UnityEditor;

[CustomEditor(typeof(SampleScene))]
public class SampleSceneUpdateEditor : Editor
{
    public override void OnInspectorGUI()
    {
        serializedObject.Update();

        // num
        var num = serializedObject.FindProperty("num");
        num.intValue = 3;
        EditorGUILayout.PropertyField(num);

        // testObject
        var testObject = serializedObject.FindProperty("testObject");
        testObject.objectReferenceValue = GameObject.Find("TestObject");
        EditorGUILayout.PropertyField(testObject);

        // users配列
        var users = serializedObject.FindProperty("users");
        if (users.arraySize == 0)
        {
            users.InsertArrayElementAtIndex(0);
        }
        var user = users.GetArrayElementAtIndex(0);
        user.objectReferenceValue = GameObject.Find("User");
        EditorGUILayout.PropertyField(users);

        serializedObject.ApplyModifiedProperties();
    }
}

参考:https://www.hanachiru-blog.com/entry/2020/10/19/120000#SerializedObject%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F%E3%82%84%E3%82%8A%E6%96%B9

参考:https://qiita.com/albatrus/items/b9799f7f2a805faf3da8