「Unity/Editor/inspector値更新」の版間の差分
提供: 初心者エンジニアの簡易メモ
| (同じ利用者による、間の9版が非表示) | |||
| 行1: | 行1: | ||
| + | ==Inspector更新サンプル== | ||
| + | 以下メンバを更新するサンプル | ||
| + | *testObjectに、TestObjectをいれる。 | ||
| + | *numに、3をいれる。 | ||
| + | *usersにGameObjectをいれる。 | ||
| + | |||
SampleScene.cs | SampleScene.cs | ||
<pre> | <pre> | ||
| 行5: | 行11: | ||
public class SampleScene : MonoBehaviour | public class SampleScene : MonoBehaviour | ||
{ | { | ||
| − | |||
[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() | ||
| 行21: | 行28: | ||
</pre> | </pre> | ||
| − | + | SampleSceneUpdateEditor.cs | |
<pre> | <pre> | ||
using UnityEngine; | using UnityEngine; | ||
| 行27: | 行34: | ||
[CustomEditor(typeof(SampleScene))] | [CustomEditor(typeof(SampleScene))] | ||
| − | public class | + | public class SampleSceneUpdateEditor : Editor |
{ | { | ||
public override void OnInspectorGUI() | public override void OnInspectorGUI() | ||
| 行33: | 行40: | ||
serializedObject.Update(); | serializedObject.Update(); | ||
| − | + | // 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( | + | |
| + | // 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(); | ||
| 行47: | 行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();
}
}
