Как изменить имя объекта unity

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

Смена имени и тега у объекта

Смена имени и тега у объекта

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

Reynold1
UNIт
 
Сообщения: 54
Зарегистрирован: 17 июн 2013, 16:24

Re: Смена имени и тега у объекта

Сообщение Reynold1 22 июн 2013, 17:17

Есть три объекта:
1. Player с тегом Player
2. Bot с тегом Bot
3. Bot с тегом Bot

Когда я удаляю объект Player со сцены, нужно сменить у первого бота имя и тег на Player. потом должно быть так все по кругу, когда очередной player уничтожается, то bot переименовывается на player

Reynold1
UNIт
 
Сообщения: 54
Зарегистрирован: 17 июн 2013, 16:24

Re: Смена имени и тега у объекта

Сообщение Reynold1 22 июн 2013, 18:37

хелп

Reynold1
UNIт
 
Сообщения: 54
Зарегистрирован: 17 июн 2013, 16:24

Re: Смена имени и тега у объекта

Сообщение Reynold1 22 июн 2013, 19:58

ну помогите
Не апать! seaman

Reynold1
UNIт
 
Сообщения: 54
Зарегистрирован: 17 июн 2013, 16:24

Re: Смена имени и тега у объекта

Сообщение Левш@ 22 июн 2013, 21:45

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

go.name = newName;
go.tag = newTag;

:D

Аватара пользователя
Левш@
Адепт
 
Сообщения: 4073
Зарегистрирован: 14 окт 2009, 16:34
Откуда: IBERIA
Skype: bars_levsha
  • Сайт

Re: Смена имени и тега у объекта

Сообщение Medveckij 22 июн 2013, 22:32

Искать информацию и думать совершенно не хотите. Легче сидеть и целый день апать. Я бы за подобное банил на недельку вторую.

Аватара пользователя
Medveckij
Адепт
 
Сообщения: 1014
Зарегистрирован: 10 ноя 2012, 15:44

Re: Смена имени и тега у объекта

Сообщение Reynold1 23 июн 2013, 07:18

Medveckij писал(а):Искать информацию и думать совершенно не хотите. Легче сидеть и целый день апать. Я бы за подобное банил на недельку вторую.

я ищу, и попадается вон то, в основном, что дали выше. это не то что нужно.

Reynold1
UNIт
 
Сообщения: 54
Зарегистрирован: 17 июн 2013, 16:24

Re: Смена имени и тега у объекта

Сообщение Medveckij 23 июн 2013, 07:31

О том и речь. Вы или не хотите или не умеете думать. Из того что Левша запостил выше я почему-то знаю как выполнить вашу задачу, а вы нет.

Вам нужен готовый скрипт в котором вы замените теги на свои собственные? Это вы так думаете? Тогда советую не тратить свое время, программирование не для вас.

В случае если появится желание учиться, а не клянчить готовые решения, вот вам справочка:

http://docs.unity3d.com/Documentation/S … tions.html

Вот вам переводчик:

http://www.translate.ru/

Справа кнопка Next. Читаем и жмем на кнопочку. Читаем и вновь жмем на кнопочку.

Поверьте на слово, учитывая ваши знания на сегодняшний день, в справке вы найдете 90% ответов на свои вопросы. Если только захотеть учиться.

Аватара пользователя
Medveckij
Адепт
 
Сообщения: 1014
Зарегистрирован: 10 ноя 2012, 15:44

Re: Смена имени и тега у объекта

Сообщение Reynold1 23 июн 2013, 08:02

Medveckij писал(а):О том и речь. Вы или не хотите или не умеете думать. Из того что Левша запостил выше я почему-то знаю как выполнить вашу задачу, а вы нет.

Вам нужен готовый скрипт в котором вы замените теги на свои собственные? Это вы так думаете? Тогда советую не тратить свое время, программирование не для вас.

В случае если появится желание учиться, а не клянчить готовые решения, вот вам справочка:

http://docs.unity3d.com/Documentation/S … tions.html

Вот вам переводчик:

http://www.translate.ru/

Справа кнопка Next. Читаем и жмем на кнопочку. Читаем и вновь жмем на кнопочку.

Поверьте на слово, учитывая ваши знания на сегодняшний день, в справке вы найдете 90% ответов на свои вопросы. Если только захотеть учиться.

да я сделал уже. [V] причем до того как дали код. я просто незнаю как закрыть тему.

Reynold1
UNIт
 
Сообщения: 54
Зарегистрирован: 17 июн 2013, 16:24

Re: Смена имени и тега у объекта

Сообщение Zombie47 22 май 2016, 23:02

Зря вы так на парня, я вот загуглил и первое в гугле именно этот пост выдало =)))

Аватара пользователя
Zombie47
UNIт
 
Сообщения: 100
Зарегистрирован: 12 май 2016, 15:19

Re: Смена имени и тега у объекта

Сообщение lawsonilka 22 май 2016, 23:34

Там вроде есть темы по древней.

lawsonilka
UNIверсал
 
Сообщения: 390
Зарегистрирован: 21 окт 2014, 14:48

Re: Смена имени и тега у объекта

Сообщение Cr0c 23 май 2016, 10:08

lawsonilka писал(а):Там вроде есть темы по древней.

Есть, я тоже нечаянно некрофильнулся уже :D
Если тема попалась в гугле и она без решения — почему бы и не написать ответ? Ведь люди будут находить эту тему, читать — помочь не трудно и время им экономит, а форуму только плюс.

Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81

Re: Смена имени и тега у объекта

Сообщение Zombie47 25 май 2016, 18:35

Так я о том же =))) я до сих пор ищу решение =))) А ссылки в теме битые.

Аватара пользователя
Zombie47
UNIт
 
Сообщения: 100
Зарегистрирован: 12 май 2016, 15:19


Re: Смена имени и тега у объекта

Сообщение Zombie47 25 май 2016, 18:43

все оказалось элементарно gameObject.tag = «name»;

Аватара пользователя
Zombie47
UNIт
 
Сообщения: 100
Зарегистрирован: 12 май 2016, 15:19


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

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

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



В данной статье будут приведены примеры кода и их описания.

Два основных компонента у объекта в Unity3D — это Transform и GameObject.

GameObject

GameObject — основа, контейнер, который содержит в себе все компоненты любой объект в Unity3D. Чтобы удалить, к примеру, игровой объект — удалять нужно именно GameObject этого объекта. Для доступа к GameObject — используется переменная, которая присутствует по умолчанию в любом скрипте, унаследованном от MonoBehaviour (то есть в любом скрипте, созданном через Unity3D).

Получение ссылки на игровой объект

var myGo = gameObject; // мы получили ссылку на GameObject объекта

// однако возможно использовать напрямую через gameObject

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

Уничтожение игрового объекта

Destroy(gameObject); // уничтожает данный объект со сцены

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

Активация/деактивация игрового объекта

gameObject.SetActive(false); // выключает данный объект (и все его дочерние)

gameObject.SetActive(true); // включает данный объект (и все его дочерние)

Деактивация объекта аналогична снятия галочки инспекторе Unity3D, которая обведена красным цветом на скриншоте ниже.

ul0_setActiveFalse

Деактивация элемента деактивирует также все его дочерние объекты и останавливает выполнение в их скриптов.

Добавление новых компонентов и скриптов игровому объекту

gameObject.AddComponent<BoxCollider>(); // добавляет к данному объекту компонент BoxCollider

gameObject.AddComponent<Listener>(); // добавляет к данному объекту скрипт Listener

Таким образом можно добавить абсолютно любой компонент, либо скрипт, который можно добавить в редакторе Unity3D.

Получение доступа к компоненту игрового объекта

var objectBoxCollider = gameObject.GetComponent<BoxCollider>(); // получение ссылки на компонент BoxCollider

Таким же образом можно получить доступ к любому компоненту игрового объекта.

Переименование игрового объекта. Считывание имени объекта

gameObject.name = «ObjectNewName»; // меняем имя объекта

var objectName = gameObject.name; // считываем имя объекта

Сделать объект статичным

gameObject.isStatic = true; // делаем объект статичным

var isObjectStatic = gameObject.isStatic; // считываем — является ли объект статичным

Данный код аналогичен установке/снятию галочки в редакторе Unity3D (на скрине ниже).

ul0_setStatic

Установить слои игровому объекту, а также считать их

gameObject.layer = LayerMask.GetMask(new[] {«Environment», «Tree»}); // устанавливает слой

var objectLayer = gameObject.layer; // получает числовое представление слоев, к которым относится объект

Установить тэг игровому объекту, а также его считывание

gameObject.tag = «newTag»; // устанавливает тэг объекту

var objectTag = gameObject.tag; // считывает тэг объект

Transform

С трансформом всё немного проще — этот компонент не является основой, но тем не менее — является основной и, главное, неотъемлемой частью GameObject’а. Он отвечает за месторасположение объекта на сцене, его «вращении», размерах, а также содержит информацию о дочерних и родительском объектах.

Это единственные компонент, который невозможно удалить из GameObject.

Изменение положение объекта

За положение объекта на сцене отвечает элементы transform.position и transform.localPosition.

Они оба являются переменной типа Vector3 и имеют в себе 3 главных составляющих x,y и z, которые соответствуют координатам в трехмерном пространстве. Следует учитывать, что x, y и z невозможно менять напрямую — они только для чтения. Чтобы добавить единичку к — нужно добавить к самому transform.position новый Vector3, который равен (1,0,0), что добавить к x единицу, а к y и z — нули.

Чем же отличаются transform.position и transform.localPosition?

Их главное (и единственное отличие) заключается в том, что position — показывает и принимает координаты объекта, относительно мировых координат, а localPosition — относительно родительского объекта. Если же игровой объект является «корневым», то есть у него нет родительских объектов, то position и localPosition будут равны.

Движение объекта

Сначала рассмотрим элементарные варианты.

Как мы уже говорили — position (буду далее использовать именно его, так как отличия от localPosition только в том, относительно чего эти координаты) является переменной типа Vector3. Поэтому для его изменения нужно либо прибавить к нему другой вектор, либо вычесть другой вектор, либо заменить его другим вектором.

transform.position += new Vector3(1,0,0); // добавляем к X единицу

transform.position -= new Vector3(1,1,0); // вычитаем из X и Y единицу

transform.position = new Vector3(10,20,30); // устанавливаем объекту координаты 10,20,30 (x,y,z)

Рекомендуется использовать функцию transform.Translate. 

Это уже не переменная, как transform.position — это функция. У неё есть два входящих параметра:

  1. Vector3, который отвечает за то, в каком направлении будет двигаться объект;
  2. Space.Self/Space.World — то, относительно чего будет двигаться игровой объект. Space.Self — аналогичен transform.localPosition, а Space.World — аналогичен transform.position.

Вращение объекта

За вращение объекта отвечает компонент transform.rotation, transform.localRotation и функция transform.Rotate.

Здесь все аналогично transform.position. Кроме одного, несмотря на то, что в редакторе Unity3D Rotation представляет собой Vector3, то есть вращение относительно оси X, оси Y, оси Z.  Но в коде оно представлено в виде кватернионов. Что такое кватернион — отдельная история. И обычно её изучают в вузах. По факту — знание кватернионов не обязательно для разработки игр. К счастью разработчики Unity3D это понимают и сделали две удобные для программистов вещи:

  1. Функция transform.Rotate(Vector3 vector, Space.World(либо Self));
  2. Функция Quaternion.Euler(float x,float y,float z), которая как раз возвращает кватернион;

Меньше слов — больше кода:

var myRotation = Quaternion.Euler(1, 1, 1); //поворачиваем объект по всем трем осям на единицу за такт

transform.rotation *= myRotation; // обращаем внимание, что кватернионы не складывают, а умножают. Делить их нельзя. Поэтому для вычета просто делаем значения вектора отрицательными

Вместо rotation можно применять localRotation, аналогично position.

transform.Rotate(new Vector3(1,0,0),Space.Self); // либо Space.World

Такой подход аналогичен transform.Translate и также является более производительным.

Поиск других объектов на сцене

Есть два подхода поиска объекта на сцене.

  1. GameObject.Find(«имяОбъекта»); Он же «пушка по воробьям». Несмотря на кажущуюся скорость — метод является достаточно прожорливым и при частом использовании на большой сцене может стать большой проблемой. Однако он же самый простой способ (хотя и ненадежный). А ненадежный он потому, что редактор Unity3D позволяет давать одинаковые имена объектам. А GameObject.Find возвращает только один элемент, который он найдет первым.
  2. transform.FindChild(«имяДочернегоОбъекта») — функция возвращает переменную типа transform нужного объекта. Для доступа к GameObject этого объекта особых усилий прилагать не нужно, так как ссылка на него уже содержится в transform (как и ссылка на transform содержится в GameObject’е).

var childTransform = transform.FindChild(«myChild1»);

var childGameObject = childTransform.gameObject;

var anotherTransformLink = childGameObject.transform;

Также можно запрашивать дочерние элементы по их номеру:

var childCount = transform.childCount;

for (var i = 0; i < childCount; i++)

{

   Debug.Log(transform.GetChild(i).name);

}

Также дочерний элемент может запросить родительский, а также родительский родительского и так далее:

var myParent = transform.parent;

var rootObject = transform.parent.parent.parent;

В следующих статьях будет информация о том, что такое private, public, static, отправление сообщений игровым объектам.

Вступление

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

Тег можно применить к одному или нескольким игровым объектам, но игровой объект всегда будет иметь только один тег. По умолчанию тег «Untagged» используется для представления GameObject , который не был специально помечен.

Создание и применение тегов

Теги обычно применяются через редактор; однако вы также можете применять теги через скрипт. Любой пользовательский тег должен быть создан через окно « Теги и слои» перед тем, как его применить к игровому объекту.


Установка тегов в редакторе

При выборе одного или нескольких игровых объектов вы можете выбрать тег из инспектора. Объекты игры всегда будут иметь один тег; по умолчанию игровые объекты будут помечены как «Без тегов» . Вы также можете перейти в окно « Теги и слои» , выбрав «Добавить тег …» ; однако важно отметить, что это приведет вас только к окну Tags & Layers . Любой тэг создается не будет автоматически применяться к объекту игры.

The tag drop-down menu can be found directly below the game objects name in the Inspector window.


Настройка тегов через скрипт

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

Как указано в других примерах, использование серии static string переменных в отличие от ручной записи каждого тега может обеспечить согласованность и надежность.


Следующий сценарий демонстрирует, как мы можем изменить ряд тегов игровых объектов, используя static string ссылки на static string для обеспечения согласованности. Обратите внимание на предположение, что каждая static string представляет собой тег, который уже был создан в окне « Теги и слои» .

using UnityEngine;

public class Tagging : MonoBehaviour
{
    static string tagUntagged = "Untagged";
    static string tagPlayer = "Player";
    static string tagEnemy = "Enemy";

    /// <summary>Represents the player character. This game object should 
    /// be linked up via the inspector.</summary>
    public GameObject player;
    /// <summary>Represents all the enemy characters. All enemies should 
    /// be added to the array via the inspector.</summary>
    public GameObject[] enemy;

    void Start ()
    {
        // We ensure that the game object this script is attached to
        // is left untagged by using the default "Untagged" tag.
        gameObject.tag = tagUntagged;

        // We ensure the player has the player tag.
        player.tag = tagUntagged;

        // We loop through the enemy array to ensure they are all tagged.
        for(int i = 0; i < enemy.Length; i++)
        {
            enemy[i].tag = tagEnemy;
        }
    }
}

Создание пользовательских тегов

Независимо от того, устанавливаете ли вы теги через Inspector или через скрипт, теги должны быть объявлены через окно Tags & Layers перед использованием. Вы можете получить доступ к этому окну, выбрав «Добавить теги …» в раскрывающемся меню тега игровых объектов. Кроме того, вы можете найти окно в разделе « Редактирование»> «Настройки проекта»> «Метки и слои» .

Tags can contain spaces and punctuation.

Просто выберите кнопку + , введите нужное имя и выберите « Сохранить», чтобы создать тег. При выборе кнопки - удаляется текущий выделенный тег. Обратите внимание, что таким образом тег будет немедленно отображаться как «(Удалено)» и будет полностью удален, когда проект будет перезагружен.

Выбор шестерни / зубца в правом верхнем углу окна позволит вам сбросить все пользовательские параметры. Это немедленно удалит все пользовательские теги вместе с любым настраиваемым слоем, который у вас может быть в разделе «Сортировка слоев» и «Слои» .

Поиск GameObjects по тегу:

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


Поиск единого GameObject

Мы можем использовать статическую функцию GameObject.FindGameObjectWithTag(string tag) для поиска отдельных игровых объектов. Важно отметить, что таким образом игровые объекты не запрашиваются в каком-либо конкретном порядке. Если вы ищете тег, который используется в нескольких игровых объектах в сцене, эта функция не сможет гарантировать, какой игровой объект будет возвращен. Таким образом, более удобно, когда мы знаем, что только один игровой объект использует такой тег или когда нас не беспокоит точный экземпляр GameObject который возвращается.

///<summary>We create a static string to allow us consistency.</summary>
string playerTag = "Player"

///<summary>We can now use the tag to reference our player GameObject.</summary>
GameObject player = GameObject.FindGameObjectWithTag(playerTag);

Поиск массива экземпляров GameObject

Мы можем использовать статическую функцию GameObject.FindGameObjectsWithTag(string tag) чтобы искать все игровые объекты, которые используют определенный тег. Это полезно, когда мы хотим итерации через группу определенных игровых объектов. Это также может быть полезно, если мы хотим найти один игровой объект, но можем иметь несколько игровых объектов с использованием одного и того же тега. Поскольку мы не можем гарантировать точный экземпляр , возвращаемый GameObject.FindGameObjectWithTag(string tag) , мы должны вместо этого получить массив всех потенциальных GameObject экземпляров с GameObject.FindGameObjectsWithTag(string tag) , и далее анализировать полученный массив , чтобы найти экземпляр мы находимся находясь в поиске.

///<summary>We create a static string to allow us consistency.</summary>
string enemyTag = "Enemy";

///<summary>We can now use the tag to create an array of all enemy GameObjects.</summary>
GameObject[] enemies = GameObject.FindGameObjectsWithTag(enemyTag );

// We can now freely iterate through our array of enemies
foreach(GameObject enemy in enemies)
{
    // Do something to each enemy (link up a reference, check for damage, etc.)
}

Сравнение тегов

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

if (go.Tag == "myTag")
{ 
    //Stuff 
}

При выполнении этих сравнений внутри Update () и другого обратного вызова обычного или единственного Unity вы должны использовать этот метод без кучи:

if (go.CompareTag("myTag")
{ 
    //Stuff 
}

Кроме того, ваши теги проще хранить в статическом классе.

public static class Tags
{
    public const string Player = "Player";
    public const string MyCustomTag = "MyCustomTag";
}

Тогда вы можете безопасно сравнивать

if (go.CompareTag(Tags.MyCustomTag)
{ 
    //Stuff 
}

таким образом, ваши строки тегов генерируются во время компиляции, и вы ограничиваете последствия орфографических ошибок.


Так же, как сохранение тегов в статическом классе, можно также сохранить его в перечислении:

public enum Tags
{
    Player, Ennemies, MyCustomTag;
}

и затем вы можете сравнить его с помощью метода enum toString() :

if (go.CompareTag(Tags.MyCustomTag.toString())
{ 
    //Stuff 
}

Понравилась статья? Поделить с друзьями:
  • Как изменить имя плательщика
  • Как изменить имя общего ресурса
  • Как изменить имя персонажа icarus
  • Как изменить имя нпс майнкрафт
  • Как изменить имя переменной во всем коде visual studio code