# Multi-Object Editing

**URL:** https://discussions.unity.com/t/multi-object-editing/490158
**Category:** Scripting
**Tags:** Scripting
**Created:** [November 12, 2012, 7:14pm UTC](https://discussions.unity.com/t/multi-object-editing/490158 "2012-11-12T19:14:36Z")
**Posts on this page:** 4
**Page:** 1

<div class="post-metadata">

### Author: ![allebrandt](https://dub1.discourse-cdn.com/unity/user_avatar/discussions.unity.com/allebrandt/32/187176_2.png) [@allebrandt](https://discussions.unity.com/u/allebrandt)
#### Post date: [November 12, 2012, 7:14pm UTC](https://discussions.unity.com/t/multi-object-editing/490158/1 "2012-11-12T19:14:36Z")

</div>

Hey guys!

I’m trying to create a editor script that uses the multi-object editing from Unity, like here [http://docs.unity3d.com/Documentation/Manual/Multi-ObjectEditing.html](http://docs.unity3d.com/Documentation/Manual/Multi-ObjectEditing.html). When I’ve many objects selected with the same component applied to them and with differente values, I’ll have a dash on the field to representate this.

I’ve been using SerializeObject and SerializeField in my script, but looks to be not enough.

Here is a short sample of code of a script with the editor extension that shows how I use SerializeObject and SerializeField.

**MonoBehaviour Script:**

```auto
using UnityEngine;
using System.Collections;

public class Test : MonoBehaviour 
{
    public float Speed = 10.0f;
}

```

**Editor Script:**

```auto
using UnityEditor;
using UnityEngine;
using System.Collections;

[CustomEditor(typeof(Test)), CanEditMultipleObjects]
public class TestInspector : Editor 
{
    private SerializedObject m_Object;
    private SerializedProperty m_Speed;

    private void OnEnable()
    {
       m_Object = new SerializedObject(target as Test);
       m_Speed = m_Object.FindProperty("Speed");
    }

    public override void OnInspectorGUI()
    {
       m_Object.Update();
       EditorGUILayout.PropertyField(m_Speed);
       m_Object.ApplyModifiedProperties();
    }
}

```

---

<div class="post-metadata">

### Author: ![Democre](https://avatars.discourse-cdn.com/v4/letter/d/f0a364/32.png) [@Democre](https://discussions.unity.com/u/Democre)
#### Post date: [November 12, 2012, 9:26pm UTC](https://discussions.unity.com/t/multi-object-editing/490158/2 "2012-11-12T21:26:46Z")

</div>

try this instead:

```auto
using UnityEditor;
using UnityEngine;
using System.Collections;

[CustomEditor(typeof(Test)), CanEditMultipleObjects]
public class TestInspector : Editor
{
	private SerializedProperty m_Speed;

	private void OnEnable ()
	{
		m_Speed = serializedObject.FindProperty ("Speed");
	}

	public override void OnInspectorGUI ()
	{
		serializedObject.Update ();
		EditorGUILayout.PropertyField (m_Speed);
		serializedObject.ApplyModifiedProperties ();
	}
}

```

I believe using the “target” object only picks the last selected object as the value to use/display. In other words, don’t create a new SerializedObject based on target, but rather use the builtin serializedObject member.

I guess you could also create a SerializedObject based on “targets” instead, but I don’t see the point when you already have serializedObject as a member.

---

<div class="post-metadata">

### Author: ![allebrandt](https://dub1.discourse-cdn.com/unity/user_avatar/discussions.unity.com/allebrandt/32/187176_2.png) [@allebrandt](https://discussions.unity.com/u/allebrandt)
#### Post date: [November 12, 2012, 10:49pm UTC](https://discussions.unity.com/t/multi-object-editing/490158/3 "2012-11-12T22:49:51Z")

</div>

Both ways worked to me…  
Using “targets” instead of “target” and using the builtin serializedObject member…

Thanks Democre!

---

<div class="post-metadata">

### Author: ![Esteem](https://dub1.discourse-cdn.com/unity/user_avatar/discussions.unity.com/esteem/32/351240_2.png) [@Esteem](https://discussions.unity.com/u/Esteem)
#### Post date: [April 14, 2018, 5:32pm UTC](https://discussions.unity.com/t/multi-object-editing/490158/4 "2018-04-14T17:32:38Z")

</div>

This works:

```csharp
[CustomEditor(typeof(MyMonoScript)), CanEditMultipleObjects]
public class MyMonoScript_Editor : Editor {

    private MyMonoScript[] myMonoScript;

    private Vector3 startingPoint;

    private void OnEnable() {
        Object[] monoObjects = targets;
        myMonoScript = new MyMonoScript[monoObjects.Length];
        for (int i = 0; i < monoObjects.Length; i++) {
            myMonoScript[i] = monoObjects[i] as MyMonoScript;
        }
    }

    private void OnSceneGUI() {
        for (int i = 0; i < myMonoScript.Length; i++) {
            Debug.Log(myMonoScript[i].transform.position.x);
        }
    }
}

```
