Как добавить Property (Attribute) объекту?

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

Как добавить Property (Attribute) объекту?

Сообщение fallenart 08 фев 2011, 23:38

Как добавить Property/Attribute объекту (например, переменную, которая бы увеличивалась на 1, при выполнении некоторого условия)? Что-то не вижу в справке.
fallenart
UNIт
 
Сообщения: 81
Зарегистрирован: 19 дек 2010, 23:52

Re: Как добавить Property (Attribute) объекту?

Сообщение Neodrop 09 фев 2011, 05:26

Пройдите 3D Platform Tutorial. Сразу всем станет легче. В разделе Уроки есть перевод на русский.
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Как добавить Property (Attribute) объекту?

Сообщение fallenart 09 фев 2011, 23:23

Сразу всем станет легче.


Что-то не полегчало... Что я должен был там узнать? Что переменные из скрипта, повешенного на объект появляются в Inspector? Мне нужно что-то типа addAttr в Maya. Чтобы после добавления атрибута я смог получить его значение через название объекта, примерно так: <имя_объекта>.<имя_атрибута>. Например так, как реализован способ обращения к трансформу: (GameObject.Find("<имя_объекта>")).transform
Кстати, мегаидиотизм, что при наличии GameObject.Find("<имя_объекта>") в сцене может быть сколько угодно объектов с одинаковыми именами.
Заодно еще такой вопрос - на что мне вешать скрипт, который не имеет непосредственного отношения ни к одному объекту в сцене, чтобы этот скрипт выполнялся? Например, служебный скрипт, который что-то там сетит (например, я хочу процедурно генерить объекты). На абстрактный GameObject? Т.е. как мне получить доступ к глобальному циклу, минуя какие-либо объекты.
Последний раз редактировалось fallenart 09 фев 2011, 23:55, всего редактировалось 2 раз(а).
fallenart
UNIт
 
Сообщения: 81
Зарегистрирован: 19 дек 2010, 23:52

Re: Как добавить Property (Attribute) объекту?

Сообщение Golandez 09 фев 2011, 23:32

Мегаидиотизм искать кучу обьектов в сцене с одинаковым именем не через GameObject. FindGameObjectsWithTag .
Ты нужен только тогда,когда нужен.(С)
Сказать спасибо
Аватара пользователя
Golandez
Пилигрим
 
Сообщения: 1637
Зарегистрирован: 06 авг 2009, 13:55
Откуда: Харьков
Skype: lestardigital

Re: Как добавить Property (Attribute) объекту?

Сообщение fallenart 09 фев 2011, 23:38

В нормальном софте одинаковые имена на одном уровне иерархии не допустимы (как например в Maya). Уникальным должен быть не какой-то там ID или еще что скрытое, а имя (точнее полный путь в иерархии). Софт все-таки для юзеров делается, а не дня UNIT#12Grt_MB. Это тоже самое что допустить одинаковые имена файлов в одной директории, и искать файлы по физическому адресу на диске, или по какому-то сктытому идентификатору...
fallenart
UNIт
 
Сообщения: 81
Зарегистрирован: 19 дек 2010, 23:52

Re: Как добавить Property (Attribute) объекту?

Сообщение fallenart 10 фев 2011, 00:01

Простой пример. Объект падает на землю, и сколько там раз подпрыгивает. Я хочу добавить этому объекту атрибут, и увеличивать его значение на 1 при каждом подпрыгивании. Потом спросить этот самый объект, "сколько раз ты подпрыгнул?" Спросить хочу через <имя_объекта>.<имя_атрибута>. Ну или <имя_объекта>.GetAttr(<имя_атрибута>). Вроде бы как нормальный ООП подход... Но не через имя скрипта (который, ко всему прочему, может быть повешен на 1000 точно таких же подпрыгивающих объектов).
Последний раз редактировалось fallenart 10 фев 2011, 00:40, всего редактировалось 1 раз.
fallenart
UNIт
 
Сообщения: 81
Зарегистрирован: 19 дек 2010, 23:52

Re: Как добавить Property (Attribute) объекту?

Сообщение Golandez 10 фев 2011, 00:05

Перед тем как распинаться,попробуйте в проекте назвать два разных обьекта одним именем.А то что у вас хватает сообразительности при вставке разных обьектов в сцену переименовать их дать им одинаковые имена,это уже клиника.
Ты нужен только тогда,когда нужен.(С)
Сказать спасибо
Аватара пользователя
Golandez
Пилигрим
 
Сообщения: 1637
Зарегистрирован: 06 авг 2009, 13:55
Откуда: Харьков
Skype: lestardigital

Re: Как добавить Property (Attribute) объекту?

Сообщение fallenart 10 фев 2011, 00:09

Ок. Но это не решает проблему (мой пост 00:01).
fallenart
UNIт
 
Сообщения: 81
Зарегистрирован: 19 дек 2010, 23:52

Re: Как добавить Property (Attribute) объекту?

Сообщение seaman 10 фев 2011, 08:12

<имя_объекта>.<имя_атрибута> - нормальный ООП подход...

Перед этим вы что делаете?
<тип_объекта> <имя_объекта> = new <тип_объекта>();
Так? Вот это нормальный ООП подход. Создаем объект - получаем указатель на него. После этого можно обращаться к объекту по имени.
Здесь же ты в редакторе создал объект, а не в своем скрипте. Твой скрипт не имеет указателя на скрипты, навешенные на этот объект. Найдя его (по тегу объекта, например) мы узнаем указатель, и можем обратиться к нему. По моему все очень логично.
на что мне вешать скрипт, который не имеет непосредственного отношения ни к одному объекту в сцене

Ни на что. Создай статический класс. Он будет всегда присутствовать в сцене...
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Как добавить Property (Attribute) объекту?

Сообщение Zaicheg 10 фев 2011, 10:25

fallenart писал(а):Например, служебный скрипт, который что-то там сетит (например, я хочу процедурно генерить объекты). На абстрактный GameObject? Т.е. как мне получить доступ к глобальному циклу, минуя какие-либо объекты.

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

Кстати, мегаидиотизм, что при наличии GameObject.Find("<имя_объекта>") в сцене может быть сколько угодно объектов с одинаковыми именами.
В нормальном софте одинаковые имена на одном уровне иерархии не допустимы (как например в Maya).

Отнюдь. В данном случае юнитехи просто не стали ограничивать вас в работе со сценой, предположив, что у вас защита от дурака встроена в голову.
Я сейчас взял и в Photoshop создал два слоя на одном уровне с одинаковыми именами. Потом в 3ds Max создал два куба "Box". Взрыва не последовало. Если вы считаете Maya неким эталоном -- используйте её, а не Unity.

Спросить хочу через <имя_объекта>.<имя_атрибута>

GameObject go = GameObject.Find("MyName");
MyScript myScript = go.GetComponent<MyScript>();
myScript.myAttribute = 2;

Просто вам надо понимать, что объектом, владеющим аттрибутом, выступает не геймобъект, а скрипт (компонент).
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Как добавить Property (Attribute) объекту?

Сообщение DanielDem 10 фев 2011, 11:40

Да, такая простая возможность как добавлять атрибуты (хотя бы ограниченных типов) отсутсвует.
GameObject go = GameObject.Find("MyName");
MyScript myScript = go.GetComponent<MyScript>();
myScript.myAttribute = 2;

Это наверное единственная возможность.
Как вариант автоматизации, написать свой редактор для компонента Transform, который бы при необходимости добавлял бы объект "Attеributes" а уже через это объект можно было бы реализовать доступ собственно к атрибутам игрового объекта. При этом работ с собственно типом Attеributes можно скрыть, а работать непосредственно с атрибутами объекта.
Тогда доступ доп. атрибуты объекта можно использовать например так:
GameObject go = GameObject.Find("MyName")
go.Attеributes[<имя атрибута>] = <значение>
Да прибудет с Вами сила...
Аватара пользователя
DanielDem
UNITрон
 
Сообщения: 174
Зарегистрирован: 07 янв 2010, 13:27
Откуда: Россия
  • ICQ

Re: Как добавить Property (Attribute) объекту?

Сообщение Neodrop 10 фев 2011, 11:41

Проще написать расширяющий метод для любого удобного класса. К примеру для GameObject
Справка на MSDN
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Как добавить Property (Attribute) объекту?

Сообщение fallenart 10 фев 2011, 18:23

Елы-палы... Сколько сразу решений и ответов насыпалось! Спасибо.
Больше всего нравится решение Neodrop. Осталось только разобраться как юзать не MonoBehaviour класс в качестве родительского.
fallenart
UNIт
 
Сообщения: 81
Зарегистрирован: 19 дек 2010, 23:52

Re: Как добавить Property (Attribute) объекту?

Сообщение Zaicheg 10 фев 2011, 20:22

public class MyClass : MyParentClass
Снова не ясно, в чём у вас сложности.
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Как добавить Property (Attribute) объекту?

Сообщение fallenart 10 фев 2011, 20:42

Zaicheg
В "cannot derive from sealed type..." и в том, что C# я сегодня первый раз в жизни трогаю :) И в том что у меня уже каша в голове, нет четкого представления что и как работает в Unity. И чем больше получаю инфы, тем больше путаюсь. Буду счастлив, если кто-нибудь покажет, как создать класс от, например, SphereCollider c добавленной переменной (без каких-либо подробностей), и как потом повесить этот Collider на сферу.
fallenart
UNIт
 
Сообщения: 81
Зарегистрирован: 19 дек 2010, 23:52

След.

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

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

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