Как найти скрипт на объекте unity

Найти любой скрипт в родительском объекте.

Найти любой скрипт в родительском объекте.

Не могу найти в гугле , как найти скрипт в объекте для любого имени, кароче мне нужно чтобы скрипт находил скрипт из другого объекта и неважно какое у него название , я могу найти только зная название скрипта , на пример вот так

Используется csharp

boxscript script;
void Awake()
{
script = GetComponentInParent<boxscript>();
}
 

Тут я заранее знаю название скрипта, а мне надо чтобы я вставил объект с этим скриптом в другой объект с уже названием скрипта wallscript , и всё заработало .

NAGIBATOR228pacan
UNITрон
 
Сообщения: 318
Зарегистрирован: 15 мар 2017, 20:39

Re: Найти любой скрипт в родительском объекте.

Сообщение Rpabuj1 23 мар 2017, 19:36

NAGIBATOR228pacan писал(а):Не могу найти в гугле , как найти скрипт в объекте для любого имени, кароче мне нужно чтобы скрипт находил скрипт из другого объекта и неважно какое у него название , я могу найти только зная название скрипта , на пример вот так

Используется csharp

boxscript script;
void Awake()
{
script = GetComponentInParent<boxscript>();
}
 

Тут я заранее знаю название скрипта, а мне надо чтобы я вставил объект с этим скриптом в другой объект с уже названием скрипта wallscript , и всё заработало .

Добрый вечер :)
Не совсем понял. Вам нужно найти скрипт на объекте? Объект можно найти по названию и по тегу…

Rpabuj1
Старожил
 
Сообщения: 639
Зарегистрирован: 04 авг 2015, 12:07

Re: Найти любой скрипт в родительском объекте.

Сообщение NAGIBATOR228pacan 23 мар 2017, 21:33

Да мне надо найти скрипт вложенный в объект в который вложен объект с скриптом который я пишу .

NAGIBATOR228pacan
UNITрон
 
Сообщения: 318
Зарегистрирован: 15 мар 2017, 20:39

Re: Найти любой скрипт в родительском объекте.

Сообщение Rpabuj1 23 мар 2017, 21:43

NAGIBATOR228pacan писал(а):Да мне надо найти скрипт вложенный в объект в который вложен объект с скриптом который я пишу .

GameObject.Find?

Rpabuj1
Старожил
 
Сообщения: 639
Зарегистрирован: 04 авг 2015, 12:07

Re: Найти любой скрипт в родительском объекте.

Сообщение NAGIBATOR228pacan 24 мар 2017, 23:59

изначально я не знаю название скрипта, например в скрипте озеро , если туда кто то заехал то озеро обращается к скрипту этого объекта ,и меняет там что нибудь, но изначально я не знаю название объекта, есть ли что нибудь типо gercomponent<script>?

NAGIBATOR228pacan
UNITрон
 
Сообщения: 318
Зарегистрирован: 15 мар 2017, 20:39

Re: Найти любой скрипт в родительском объекте.

Сообщение Tolking 25 мар 2017, 00:59

Чтобы изменить что-нибуть, нужно знать, что менять и у чего, а значит нужно знать название… Не нужно искать решение не существующих проблем…

Ковчег построил любитель, профессионалы построили Титаник.

Аватара пользователя
Tolking
Адепт
 
Сообщения: 2694
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

Re: Найти любой скрипт в родительском объекте.

Сообщение NAGIBATOR228pacan 25 мар 2017, 01:30

Не всегда, с каким нибудь риджибади например я же могу так сделать , я еще даже не зная что за объект могу написать например col.getcomponent<rigidbody>(); и включать / выключать его , мне нужно именно компонент скрипта найти.

NAGIBATOR228pacan
UNITрон
 
Сообщения: 318
Зарегистрирован: 15 мар 2017, 20:39

Re: Найти любой скрипт в родительском объекте.

Сообщение waruiyume 25 мар 2017, 04:18

Что значит “компонент скрипта”, член класса? Тогда вам нужна рефлексия, но это забивание гвоздей отвёрткой.
Унаследуйте свои классы от интерфейса и ищите этот интерфейс, через GetComponent.

Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6103
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Найти любой скрипт в родительском объекте.

Сообщение Tolking 25 мар 2017, 10:57

NAGIBATOR228pacan писал(а):Не всегда, с каким нибудь риджибади например я же могу так сделать , я еще даже не зная что за объект могу написать например col.getcomponent<rigidbody>(); и включать / выключать его , мне нужно именно компонент скрипта найти.

Ну? Зная что тебе нужен rigidbody, ты можешь его получить, так же с любым другим компонентом. Знаешь? Получай! Не знаешь? Тебе – ненужно!

Ковчег построил любитель, профессионалы построили Титаник.

Аватара пользователя
Tolking
Адепт
 
Сообщения: 2694
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

Re: Найти любой скрипт в родительском объекте.

Сообщение NAGIBATOR228pacan 25 мар 2017, 13:33

Получается нельзя получить скрипт, который точно есть в объекте ? я знаю что там есть скрипт но не знаю его название. Неужели нету типо getcompinent<script> который получит первый попавшийся скрипт несмотря на название.

NAGIBATOR228pacan
UNITрон
 
Сообщения: 318
Зарегистрирован: 15 мар 2017, 20:39

Re: Найти любой скрипт в родительском объекте.

Сообщение NAGIBATOR228pacan 25 мар 2017, 13:33

waruiyume писал(а):Что значит “компонент скрипта”, член класса? Тогда вам нужна рефлексия, но это забивание гвоздей отвёрткой.
Унаследуйте свои классы от интерфейса и ищите этот интерфейс, через GetComponent.

Нет мне просто нужно найти этот скрипт что бы менять его.

NAGIBATOR228pacan
UNITрон
 
Сообщения: 318
Зарегистрирован: 15 мар 2017, 20:39

Re: Найти любой скрипт в родительском объекте.

Сообщение samana 25 мар 2017, 13:46

NAGIBATOR228pacan писал(а):я знаю что там есть скрипт но не знаю его название. Неужели нету типо getcompinent<script> который получит первый попавшийся скрипт несмотря на название.

Используется csharp

GetComponent<MonoBehaviour>()

Но у вас уже явно страдает архитектура проекта. Ведь не факт, что на объекте висит именно один скрипт, и что первый именно тот, который вы хотите поменять и т.д.

Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Найти любой скрипт в родительском объекте.

Сообщение NAGIBATOR228pacan 25 мар 2017, 14:19

Большое спасибо , у меня игра не сложная , так что я классами даже не интересовался.
За одно можно сказать как пользоваться getcomponents что то вообще не могу понять , например мне надо 2 аудиосурса получить.

а нет всё разобрался.

NAGIBATOR228pacan
UNITрон
 
Сообщения: 318
Зарегистрирован: 15 мар 2017, 20:39


Вернуться в Почемучка

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

Сейчас этот форум просматривают: Google [Bot] и гости: 20



Рассмотрим, как в Unity на языке C# получать доступ из одного скрипта к переменным и функциям других скриптов.

Юнити: Как обратиться к другому скрипту на том же объекте

GetComponent<DrygoiScript>().peremennayaScripta = 5;

Эта “команда” обращается к другому скрипту, который в виде компонента висит на том же объекте, что и скрипт, где вы это пишете. У этого скрипта есть переменная с именем peremennayaScripta, ей присваивается значение 5. Так можно обращаться к любым компонентам вашего игрового объекта, начиная от ваших скриптов, висящих на нем, и заканчивая обычными юнитивскими компонентами – Rigitbody, Animator, Transform и прочими.

Unity: Как получить ссылку на другой скрипт с одного объекта

Но вы можете не писать каждый раз “команду” GetComponent<>, а создать переменную для ссылки на компонент. Пишете:

DrygoiScript peremennayaSsilkaNaDrygoiScript = GetComponent<DrygoiScript>();

Вы тут сначала создали переменную с именем peremennayaSsilkaNaDrygoiScript и тип переменной DrygoiScript (что означает, что туда можно поместить только ссылку на DrygoiScript, но не на любой другой скрипт).

Потом вы через знак “=” присвоили этой переменной ссылку на DrygoiScript, который висит на том же объекте, что и этот скрипт с кодом.

Теперь вы можете написать:

peremennayaSsilkaNaDrygoiScript.peremennayaScripta = 5;

Через peremennayaSsilkaNaDrygoiScript произойдет обращение к тому скрипту (это аналогично GetComponent<DrygoiScript>()), и его переменная peremennayaScripta установится в значение 5. 

Unity3d: как получить ссылку на другой объект

На другом объекте может висеть нужный вам скрипт, и вы хотите изменить его переменные или вызвать его функцию из другого скрипта? Тогда сначала нужно получить ссылку на него. Для этого создаете переменную в исходном скрипте:

public GameObject ssilkaNaObject;

Тут вы создали публичную переменную (теперь она будет видна в инспекторе) с типом GameObject (это базовый тип для любого объекта на сцене) и именем ssilkaNaObject. Теперь в инспектор вы можете перетянуть в нее нужный вам объект. Но надо еще получить ссылку на конкретный компонент (скрипт или еще что-либо навешанное на него) этого объекта. Например, на объекте висит скрипт с именем DrygoiScript, и вы хотите получить к нему доступ:

 ssilkaNaObject.GetComponent<DrygoiScript>().peremennayaScripta = 5;

Тут вы по ссылке ssilkaNaObject обращаетесь к объекту, который перетянули в инспекторе в переменную ssilkaNaObject, и далее обращаетесь к конкретному компоненту GetComponent<DrygoiScript>(), это нужный вам скрипт, и меняете у этого скрипта переменную под названием peremennayaScripta на 5. Аналогично с вызовом какой-либо функций:

ssilkaNaObject.GetComponent<DrygoiScript>().MyFuction();

Тут вы вызвали функцию с именем MyFuction() в скрипте DrygoiScript, который висит на ssilkaNaObject.

Юнити: как кешировать ссылку на ваш скрипт

Но GetComponent<> ресурсозатратная операция, поэтому лучше сразу создать переменную, чтобы положить туда ссылку на конкретный компонент (ваш скрипт). Ссылку на объект мы уже получили, и она называется ssilkaNaObject, но не получили ссылку на скрипт DrygoiScript, поэтому и приходится каждый раз писать GetComponent<DrygoiScript>().

DrygoiScript peremennayaSsilkaNaDrygoiScript = ssilkaNaObject.GetComponent<DrygoiScript>();

Теперь переменная peremennayaSsilkaNaDrygoiScript будет содержать ссылку на ваш скрипт, который висит на объекте, на который ссылается ssilkaNaObject. И можно без всяких GetComponent писать:

peremennayaSsilkaNaDrygoiScript.peremennayaScripta = 5; // изменение значения переменной в другом скрипте

peremennayaSsilkaNaDrygoiScript.MyFuction(); // вызов функции другого скрипта

Это называется кеширование. Мы с вами закешировали, как сам объект, на котором скрипт, так и ссылку на скрипт. Грубо говоря – кеширование это создание ссылки на нужную вещь, по которой потом можно обращаться к объекту, чтобы не приходилось каждый раз его искать заново.

Юнити3Д: как получить доступ к объекту из другого скрипта

До этого мы нужный нам объект переносили вручную через инспектор Unity в переменную ssilkaNaObject , но получить к нему доступ из кода можно несколькими способами.

public GameObject ssilkaNaObject; // не забывайте создавать переменную, которая будет ссылкой на объект

ssilkaNaObject = GameObject.Find("ИмяОбъектаПоИерархии"); // поиск объекта по имени

Тут в переменную ssilkaNaObject мы заносим то, что найдет компьютер по имени в иерархии сцены Unity. Минус в том, что придется запоминать, что переименовывать объект нельзя.

ssilkaNaObject = GameObject.FindGameObjectWithTag("Player"); // поиск объекта по тегу


Так мы получим ссылку на первый объект, который найдет компьютер по тегу Player (задается в инспекторе). Если объектов несколько с одним тегом, то в ссылку компьютер положит первый попавшийся.

Советы

Все операции, когда вы переменной присваиваете ссылку на объект или компонент (скрипт) проводят, как правило, в методе Start. Сами переменные создаются вне методов, чтобы они были доступны по всему скрипту, а не были локальными в каком-то методе. А значения им присваиваются в методе Start, который срабатывает когда запускается сцена, тогда Unity3d и найдет нужный объекты, и запишет в ваши переменные ссылки на них. Например:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TestPoiskObjectov : MonoBehaviour {

  // это место вне каких-либо методов
  
    public GameObject ssilkaNaObject; // не забывайте создавать переменную, которая будет ссылкой на объект
    public DrygoiScript peremennayaSsilkaNaDrygoiScript; // переменная для ссылки на конкретный скрипт

    void Start () {
       // поиск объекта по имени
        ssilkaNaObject = GameObject.Find("ИмяОбъектаПоИерархии");
      
      // получение ссылки на компонент с другого объекта
        DrygoiScript peremennayaSsilkaNaDrygoiScript = ssilkaNaObject.GetComponent<DrygoiScript>();
    }
	
	void Update () {
		
	}
}

1: Первый
 WIndow Test Runner
2: всплывающее окно внизу

3: папка «Редактор» автоматически создается на панели «Проект» и в ней есть сценарий

4: Напишите два скрипта в папке редактора. Один используется для *** хранения этих объектов, которые можно найти ***, другой – *** для хранения того, что вы хотите Чтобы найти сценарий, смонтированный объектом: ***

5: код для хранения объектов`
using UnityEngine;
using UnityEditor;
using UnityEngine.TestTools;
using NUnit.Framework;
using System.Collections;

public class FindMissingScriptsRecursively : EditorWindow
{
static int go_count = 0, components_count = 0, missing_count = 0;
[MenuItem(“Window/FindMissingScriptsRecursively”)]
public static void ShowWindow()
{
EditorWindow.GetWindow(typeof(FindMissingScriptsRecursively));
}
public void OnGUI()
{
if (GUILayout.Button(“Find Missing Scripts in selected GameObjects”))
{
FindInSelected();
}
}
private static void FindInSelected()
{
GameObject[] go = Selection.gameObjects;
go_count = 0;
components_count = 0;
missing_count = 0;
foreach (GameObject g in go)
{
FindInGO(g);
}
Debug.Log(string.Format(“Searched {0} GameObjects, {1} components, found {2} missing”, go_count, components_count, missing_count));
}
private static void FindInGO(GameObject g)
{
go_count++;
Component[] components = g.GetComponents();
for (int i = 0; i < components.Length; i++)
{
components_count++;
if (components[i] == null)
{
missing_count++;
string s = g.name;
Transform t = g.transform;
while (t.parent != null)
{
s = t.parent.name + “/” + s;
t = t.parent;
}
Debug.Log(s + ” has an empty script attached in position: ” + i, g);
}
}
// Now recurse through each child GO (if there are any):
foreach (Transform childT in g.transform)
{
//Debug.Log(“Searching ” + childT.name + ” ” );
FindInGO(childT.gameObject);
}
}

}
6: код, содержащий скрипт

using UnityEngine;
using UnityEditor;
using UnityEngine.TestTools;
using NUnit.Framework;
using System.Collections;
using System.Collections.Generic;

public class MonoFinder : EditorWindow
{
Transform root = null;
MonoScript scriptObj = null;
int loopCount = 0;
List results = new List();
[MenuItem(“Seek/Finder/MonoFinder”)]
static void Init()
{
EditorWindow.GetWindow(typeof(MonoFinder));
}
void OnGUI()
{
GUILayout.Label (“Узел:”);
root = (Transform)EditorGUILayout.ObjectField(root, typeof(Transform), true);
GUILayout.Label (“Тип сценария:”);
scriptObj = (MonoScript)EditorGUILayout.ObjectField(scriptObj, typeof(MonoScript), true);
if (GUILayout.Button(“Find”))
{
results.Clear();
loopCount = 0;
Debug.Log («Начать поиск.»);
FindScript(root);
}
if (results.Count > 0)
{
foreach (Transform t in results)
{
EditorGUILayout.ObjectField(t, typeof(Transform), false);
}
}
else
{
GUILayout.Label («Нет данных»);
}
}
void FindScript(Transform root)
{
if (root != null && scriptObj != null)
{
loopCount++;
Debug.Log(“…” + loopCount + “:” + root.gameObject.name);
if (root.GetComponent(scriptObj.GetClass()) != null)
{
results.Add(root);
}
foreach (Transform t in root)
{
FindScript(t);
}
}
}

}

7: С этими двумя сценариями вы найдете опцию Seek (на картинке) в меню единства, а затем щелкните по ней, появится всплывающее окно. Верхний узел (на рисунке) предназначен для объектов, а нижний тип сценария (на рисунке) предназначен для сценариев.
Например, в следующем случае я хочу выяснить, сколько сценария с именем MainPanel смонтировано в объекте Canves. Перетащите соответствующую вещь напрямую, а затем нажмите найти, чтобы найти этот скрипт в подобъекте MainPanel.

UNITY MISSING SCRIPTS

English | Russian


ENG

Overview

This util provides easy search and replace for the missing scripts GUIDs in your Unity3D scene.

Provided functionality

  • Can find all GameObjects with missing scripts on currenty opened Scene.
  • Can find GUIDs of both alive and missing MonoBehaviour scripts (it does not apply to Unity “system” scripts such as Transform, Camera and so on because they don’t have m_Script field).
  • Can select group of objects with the same lost script (if these objects are not prefabed), so you can mass replace broken script without having to do this with each script individually.
  • Allows you to browse and survey script’s and GameObject’s scene file’s entry in Unity window.
  • Project has full and switchable ENG/RU localization in EditorWindow.

Current limitations:

  • Works under Unity 2019.2, 2019.3 and higher. Earlier versions of Unity do not support some functions.
  • Works only in opened scene, not in whole project.
  • Cannot find GUIDs if missing scripts objects are inside prefabs (still, objects with broken scripts can be found as well), except object in prefab’s root. This limitation is associated with a scene file search.
  • Can be very slow on the scenes with big amount (more than thousand) of objects.
  • Most of the comments in the code are still in Russian. Sorry, too lazy to rewrite everything into English (and most of the code is self-explanatory).

Installation, launch and usage

Copy folder into your project Assets folder, than rename it into something like “DeadScriptSearcher” or whatever you want. After that, you can see Spiral Tools added to your upper menu in UnityEditor. There are two menu items: Dead Script Searcher and Object Auditor that open two different EditorWindow’s.

  • Dead Script Searcher opens windows to search missing scripts in your scene.
  • Object Auditor allows you to inspect GameObjects selected in Scene Hierarchy, looking for GUID’s and some other information on alive and dead scripts on it.

Dead Script Searcher window

Here are some elements:

  • Editor – navigates you to Dead Script Searcher editor’s script.
  • Language – switch localization.
  • Re-upload scene text – allows you to forcely re-import current %insertnamehere%.scene into Searcher. Be aware that this button loads scene file, not current state of the scene, so you need to save scene first to be sure Searcher and Auditor are working correctly (if not, you may have some warnings/errors in Unity’s console).
  • Debug mode – if you use debug mode, all actions during finding dead GUIDs procedure will be outputed in Unity’s console along with corresponding data. This can significally slowdown the checkup of the scenes with a large number of objects.
  • Find and select objects with dead scripts – do exactly what it says. It’s very fast, but it does not looks for dead GUID’s. Just find dead objects, nothing more. But it can find missing scripts in prefabs (still you cannot see their data).
  • Find dead GUIDs in the scene – collects and display all missing scripts data on the scene (excluding prefabed objects and scripts without m_Script fields). For each unique GUID, Searcher generates panel with:
    • Script GUID (selectable).
    • Number of MonoBehaviours (most often, but not necessarily equal to GameObjects count) with this type of missing script. This is foldout filed with clickable MonoBehaviours’ IDs, so you can find every script on scene individually. Every account have individual MonoBehaviour’s data: its ID in scene file, button to select target GameObject, corresponding scene file’s entry. If script has any custom serialized fields, you will see their variables names and values in this entry.
    • Button to select group of the objects with the same script.

Object Auditor window

Like Dead Script Searcher window, it has an editor script field, localization switcher and button for re-uploading the scene file.

Everytime you select some object(s) on scene, an information panels appears in Object Auditor window. Each panel corresponds to one of the selected objects. It contains:

  • File ID – GameObject’s scene file ID.
  • File caption IDX – the number of the string in scene file in which the GameObject’s caption contains.
  • Show components list – foldout that contains brief GameObject’s components information such as: script name, scene file ID, script GUID (if has one, if not – there is an explanation why: because of prefabed or not MonoBehaviour). If script is dead, it shows light red, otherwise – light green.

Useful information

You can see the implementation of rendering editor script fields in SpiralEditor.cs and use it freely in your projects. Just do not forget that the Editor script should always be in a separate file with a name identical to the class name, otherwise Unity will not see it as MonoScript.

License comments

The MIT License (MIT)

Copyright © 2020 SpiralBlack https://github.com/SpiralBlack15

This project provides under the MIT License, see LICENSE file. Most .cs files in project include part of license about no warranity. Just remember it 🙂


RU

Обзор

Утилита предоставляет удобный инструментарий для поиска и замены GUID’ов от потерянных скриптов в сцене Unity3D.

Функционал:

  • Находит все объекты с потерянными скриптами на открытой сцене.
  • Может находить GUID’ы как живых, так и мёртвых MonoBehaviours (это не относится к таким “системным” скриптам Unity как Transform, Camera и подобным, поскольку они не имеют поля m_Script).
  • Может выделять группу объектов, имеющих одинаковый потерянный скрипт (если эти объекты не входят в состав префаба, см. ограничения), так что вы можете массово заменять потерянные скрипты существующими без необходимости делать это с каждым скриптом по отдельности.
  • Позволяет просматривать в окне Unity записи конкретных скриптов и объектов из файла сцены.
  • Проект имеет две равноценные переключаемые локализации ENG/RU в окне редактора.

Текущие ограничения:

  • Работает под версиями Unity 2019.2, 2019.3 и выше. Ранние версии Unity не поддерживают часть функций.
  • Работает только с текущей открытой сценой, не с проектом в целом.
  • Не может идентифицировать GUID’ы мёртвых скрпитов, если те находятся на объектах, входящих в состав префаба (тем не менее, сами объекты она находит), если только объект не является корнем префаба. Это ограничение связано с поиском GUID’ов через файл сцены.
  • Может быть очень медленной для сцен с большим количеством (больше тысячи) объектов.
  • Большая часть комментариев в коде на русском. Хотя для русской локали это скорее плюс, чем минус.

Установка, запуск и использование

Скопируйте папку в ваш проект, после чего переименуйте её во что-то типа “DeadScriptSearcher”, на ваше усмотрение. После этого в верхнее меню Unity будет добавлен выпадающий список Spiral Tools. В нём два элемента: Dead Script Searcher и Object Auditor, которые открывают отдельные перетаскиваемые окна в редакторе.

  • Dead Script Searcher (Поиск мёртвых скриптов) открывает окно поиска мёртвых скриптов в текущей сцене.
  • Object Auditor (Ревизор) позволяет инспектировать выделенные в иерархии объекты, просматривая GUID’ы и прочую информацию с их скриптов, как живых, так и мёртвых.

Окно “Поиск мёртвых скриптов”

Здесь есть несколько элементов:

  • Editor – показывает EditorWindow-скрипт от Dead Script Searcher’a.
  • Язык – переключатель локализации.
  • Синхронизировать текст сцены с её файлом – позволяет принудительно импортировать %названиесцены%.scene в Поисковик. Обратите внимание на то, что эта кнопка загружает файл сцены, не текущее состояние сцены, поэтому необходимо сначала сохранить сцену, чтобы быть уверенным, что Поисковик и Ревизор работают правильно (если нет, у вас могут изредка сыпаться сообщения в консоль, что что-то там не найдено).
  • Режим отладки – если включен, все действия Поисковика во время поиска мёртвых GUID’ов будут выводиться в консоль вместе со всей сопутствующей информацией. Это может существенно замедлить поиск по сценам с большим количеством объектов.
  • Найти и выделить объекты с мёртвыми скриптами – делает именно то, что написано: просто быстро находит все объекты, имеющие на себе битые скрипты. Эта функция не ищет мёртвые GUID’ы, однако находит объекты, являющиеся частью префаба.
  • Найти мёртвые GUID в сцене – собирает и отображает всю информацию о потерянных скриптах на сцене (исключая объекты, являющиеся частью, но не корнем префаба, а также скрипты, не имеющие поля m_Script). Для каждого уникального GUID’а Поисковик формирует отдельную панель со следующими элементами:
    • GUID скрипта (выделяемый).
    • Количество MonoBehaviour (в основном, но необязательно соответствует количеству GameObject’ов), имеющих данный тип потерянного скрипта. Это выпадающий список, содержащий кликабельные подпункты с номерами MonoBehaviour’ов, позволяющие найти каждый скрипт на сцене индивидуально. Каждый такой аккаунт содержит данные о конкретном MonoBehaviour: его ID в файле сцены, кнопку для выбора соответствующего GameObject’a, а также соответствующую запись из файла сцены (если скрипт имел сериализованные поля, вы увидите названия переменных и их значения в записи).
    • Кнопка для группового выделения скриптов с одинаковым GUID.

Окно “Ревизор”

Как и окно Поисковика, имеет поле, указывающее на скрипт редактора, переключатель локализации и кнопку для перезагрузки файла сцены.

Каждый раз, когда вы выделяете объект(ы) на сцене, в окне Ревизора появляются плашки, соответствующие выбранным объектам. Каждая плашка содержит:

  • File ID – ID выбранного объекта в файле сцены.
  • File caption IDX – номер строки, соответствующей заголовку данного объекта в файле сцены.
  • Развернуть список компонент – разворачивающийся лист, содержащий краткую информацию по всем компонентам на объекте. Информация по каждому компоненту содержит: название скрипта компонента, индекс компонента в файле сцены, GUID скрипта (если есть, если нет – пояснение, почему нет: например, потому что объект является частью префаба ли не является MonoBehaviour). Если скрипт потерян, он будет высвечиваться светло-красным, если всё в порядке – светло-зелёным.

Полезная информация

Реализацию отрисовки полей скрипта редактора можете посмотреть в SpiralEditor.cs и свободно использовать. Не забывайте, что скрипт Editor’a всегда должен лежать в отдельном файле с названием, идентичным названию класса, иначе Unity его не воспринимает как MonoScript.

Комментарии к лицензии

The MIT License (MIT)

Copyright © 2020 SpiralBlack https://github.com/SpiralBlack15

Проект предоставляется в комплекте с открытой лицензией MIT, по всем подробностям – в файл лицензии (или в Интернет, если нужен перевод на русский). Большая часть .cs файлов проекта содержит часть лицензии, относящуюся, в первую очередь, к отсутствию каких бы то ни было гарантий и ответственности. Мало ли, вдруг вы не читаете лицензии прежде чем копировать всё без разбору 🙂

Добавить комментарий