Заменить один объект на другой

Программирование на Юнити.

Заменить один объект на другой

Сообщение Den3D 25 авг 2014, 16:19

Всем доброго времени суток!!!
Есть сцена в которой необходимо заменить все объекты с именем Cube на префаб PCube.pref который лежит в папке asset/model, поместив на то же место
( скопировать компонент Transform ). Проблема состоит в том, чтобы данной скрипт выполнить в редакторе, а не в игровом режиме. Помогите написать скрипт на С#, я смотрел примеры для редактора но так и нечего не понял. Что исполняемые скрипты должны лежать в папке Editor.
Den3D
UNец
 
Сообщения: 7
Зарегистрирован: 11 авг 2013, 09:27

Re: Заменить один объект на другой

Сообщение beatlecore 25 авг 2014, 17:41

создать скрипт, заменить содержимое на

Синтаксис:
Используется csharp
using System.Linq;
using UnityEditor;
using UnityEngine;

public class ReplaceTool : EditorWindow
{
    [MenuItem("Custom/Replace Tool")]
    public static void ShowWindow()
    {
        GetWindow<ReplaceTool>("Replace");
    }

    public ReplaceTool()
    {
        this.Focus();
        this.minSize = new Vector2(300, 150);
    }

    #region Fields

    private string SearchName = "";
    private GameObject prefab;

    #endregion

    private void OnGUI()
    {
        SearchName = EditorGUILayout.TextField("Search name : ", SearchName);
        prefab = EditorGUILayout.ObjectField("Prefab : ", prefab, typeof (GameObject)) as GameObject;

        if (GUILayout.Button("Replace", GUILayout.Height(30)))
        {
            var found = FindObjectsOfType<GameObject>().Where(o => o.name == SearchName).ToArray();

            foreach (var o in found)
            {
                var t = o.transform;

                var rep = Instantiate(prefab, t.position, t.rotation) as GameObject;
                rep.transform.localScale = t.localScale;
                rep.name.Replace("(Clone)", "");

                DestroyImmediate(o);
            }
        }
    }
}


положить скрипт в папку Editor
Аватара пользователя
beatlecore
Старожил
 
Сообщения: 964
Зарегистрирован: 05 фев 2013, 21:26
Откуда: Sun Crimea

Re: Заменить один объект на другой

Сообщение Den3D 25 авг 2014, 20:18

Ооооо.... Спасибо добрый человек !!!! )))))) ты сэкономил мне долгие часы рутинной работы ))))
Den3D
UNец
 
Сообщения: 7
Зарегистрирован: 11 авг 2013, 09:27

Re: Заменить один объект на другой

Сообщение beatlecore 25 авг 2014, 22:10

Den3D писал(а):Ооооо.... Спасибо добрый человек !!!! )))))) ты сэкономил мне долгие часы рутинной работы ))))

я тебе, ты потом кому-то еще)
Аватара пользователя
beatlecore
Старожил
 
Сообщения: 964
Зарегистрирован: 05 фев 2013, 21:26
Откуда: Sun Crimea

Re: Заменить один объект на другой

Сообщение elgreen 18 сен 2017, 22:35

Может кому пригодится, можно префаб привязать:
Синтаксис:
Используется csharp
                var rep = Instantiate(prefab, t.position, t.rotation) as GameObject;
                rep = PrefabUtility.ConnectGameObjectToPrefab(rep, prefab);
                rep.transform.position = t.position;
                rep.transform.rotation = t.rotation;
elgreen
UNец
 
Сообщения: 2
Зарегистрирован: 14 июн 2012, 20:19


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7