Как создать Тип, или Объект в скрипте Юнити?

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

Как создать Тип, или Объект в скрипте Юнити?

Сообщение Battou 11 янв 2011, 01:02

В общем пытался сделать Объект типовой с набором переменных, что бы потом создовать несколько его экземпляров каждый со своими значениями переменных. Но что-то толи я что-то забыл, толи что-то отличается в Юнити. Может кто-нить написать как создать накой шаблон и как потом создавать его экземпляры? Представляю какой нубский вопрос, но что-то я тут затупил. Сейчас нужно на Джаве, но буду очень признателен если кто-нибудь напишет пример на Джаве и на С-шарпе. Заранее спасибо.) И пардон за то что туплю.)

Уточню. Я говорю про объект внутри скрипта, список переменных.
Ну вот например что-то типа:


Задание{
Номер = 1
Опыт = 300
описание = "Описалово"
т.п
}

И вот что бы можно было создовать экземпляры такого задания с разными значениями переменных для каждого экземпляра. Переберать их потом я так понимаю можно через For,а вот как создавать я что-то затупил. (
Последний раз редактировалось Battou 11 янв 2011, 01:15, всего редактировалось 1 раз.
Battou
UNIт
 
Сообщения: 116
Зарегистрирован: 24 ноя 2010, 18:08

Re: Как создать Тип, или Объект в скрипте Юнити?

Сообщение DbIMok 11 янв 2011, 01:09




правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.8k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: Как создать Тип, или Объект в скрипте Юнити?

Сообщение Battou 11 янв 2011, 01:13

Неее, Объект не всмысле объекта в сцене. А всмысле в скрипте набор переменных. Ну вот например что-то типа:


Задание{
Номер = 1
Опыт = 300
описание = "Описалово"
т.п
}

И вот что бы можно было создовать экземпляры такого задания с разными значениями переменных для каждого экземпляра. Переберать их потом я так понимаю можно через For,а вот как создавать я что-то затупил. (
Battou
UNIт
 
Сообщения: 116
Зарегистрирован: 24 ноя 2010, 18:08


Re: Как создать Тип, или Объект в скрипте Юнити?

Сообщение Battou 11 янв 2011, 02:14

Попробовал через классы. Получилось примерно такое.



Синтаксис:
Используется javascript

var proverka = new Array();

class Taskss{
        var _id;
        var _start;
        var _end;
        var _left;
        function Taskss(f_id,f_start,f_end){
                _id=f_id;
                _start=f_start;
                _end=f_end;
                _left=f_end-f_start;
        }
}


Создать его экземпляры получается. Например так:
Синтаксис:
Используется javascript
        for(i=0;i<4;i++){
                task = new Taskss(i,0,180);
        }


Но вот как потом перебирать эти экземпляры поочереди??? Пробовал так в цикле Start:
Синтаксис:
Используется javascript
        for(i in Taskss){
                proverka.Add(i);
        }


Но юнити ругается: "ApplicationException: Argument is not enumerable (does not implement System.Collections.IEnumerable).
Boo.Lang.Runtime.RuntimeServices.Error (System.String name)
Boo.Lang.Runtime.RuntimeServices.GetEnumerable (System.Object enumerable)
UnityScript.Lang.UnityRuntimeServices.GetEnumerator (System.Object obj)
HelloJS.Start () (at Assets/HelloJS.js:45)"


Что я делаю не так??
Как мне скажем перебрать все экземпляры и записать в массив proverka значения из параметра _id?

Подскажите пожалуйста. ^_^
Battou
UNIт
 
Сообщения: 116
Зарегистрирован: 24 ноя 2010, 18:08

Re: Как создать Тип, или Объект в скрипте Юнити?

Сообщение Battou 11 янв 2011, 03:02

Не знаю, может конечно криво объяснил что надо. Просто перешёл с Blitz3D, атм была такая штука как Type.

Делаешь например

Type Alien
Field species$
Field xpos,ypos
Field health
Field direction
Field speed#
End Type

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

MyPointer.Alien = New Alien
MyPointer\Species$ = "purple tentacled"
MyPointer\xpos = 0
MyPointer\ypos = 0
MyPointer\health = 100
MyPointer\direction = D
MyPointer\speed# = 1.0
;------------------------------------
MyPointer.Alien = New Alien
MyPointer\Species$ = "green blob"
MyPointer\xpos = 256
MyPointer\ypos = 256
MyPointer\health = 100
MyPointer\direction = R
MyPointer\speed# = 1.0
;------------------------------------
MyPointer.Alien = New Alien
MyPointer\Species$ = "space platypus"
MyPointer\xpos = 512
MyPointer\ypos = 64
MyPointer\health = 100
MyPointer\direction = R
MyPointer\speed# = 2.0


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

For A.Alien = Each Alien

Next


Вот собюственно аналог этому и ищу. Я в нужную сторону копать начал с этими классами и тп??
Battou
UNIт
 
Сообщения: 116
Зарегистрирован: 24 ноя 2010, 18:08

Re: Как создать Тип, или Объект в скрипте Юнити?

Сообщение Neyl 11 янв 2011, 03:50

Как-то так
Синтаксис:
Используется javascript
var proverka = new Array(); // массив значений _id

var TaskssArray = new Array(); // массив экземпляров

class Taskss{
        var _id;
        var _start;
        var _end;
        var _left;
        function Taskss(f_id,f_start,f_end){
                _id=f_id;
                _start=f_start;
                _end=f_end;
                _left=f_end-f_start;
        }
}

function Start () {

        // заполняем массив экземплярами класса Taskss
        for(i=0;i<4;i++)        {
                TaskssArray.Push (Taskss(i,0,180));
    }
       
        // перебираем массив и смотрим значения членов класса
        for(var i : Taskss in TaskssArray)
        {
                print(i._id + " " + i._start + " " + i._end);
        }
       
        // заполняем массив proverka значениями _id из массива TaskssArray экземпляров класса Taskss
        for(var i : Taskss in TaskssArray)
        {
                proverka.Push(i._id);
        }
       
        // смотрим значения в массиве proverka
        for(var i : int in proverka)
        {
                print ("proverka " + i);
        }
       
}
 
Аватара пользователя
Neyl
UNIверсал
 
Сообщения: 404
Зарегистрирован: 20 июн 2010, 10:17

Re: Как создать Тип, или Объект в скрипте Юнити?

Сообщение Battou 11 янв 2011, 04:14

Спасибо!) Я тоже уже начал думать в сторону того что просто классом не отделаться, и нужно массив ещё делать.) Примерно тоже получилось, но у вас аккуратнее.) Привык блин в блитце что там в один заход всё.) Ещё раз спасибо.)
Battou
UNIт
 
Сообщения: 116
Зарегистрирован: 24 ноя 2010, 18:08

Re: Как создать Тип, или Объект в скрипте Юнити?

Сообщение Fredo 11 янв 2011, 11:18

В сиарпе для таких дел рекомендуют использовать не class а struct . А массивы для удобства можно там же сохранить как статичные поля.
Синтаксис:
Используется csharp
public struct Taskss
{
        public static int[] proverka = new Array(); // массив значений _id
        public static Taskss[] TaskssArray = new Array(); // массив экземпляров


        public int _id;
        public int _start;
        public int _end;
        public int _left;

        public void Taskss(int f_id,int f_start,int f_end){
                _id=f_id;
                _start=f_start;
                _end=f_end;
                _left=f_end-f_start;
        }
}
 

Типы полей я поставил от балды поскольку я незнаю для чего они нужны, вам лучше знать какие использовать.
Аватара пользователя
Fredo
UNITрон
 
Сообщения: 213
Зарегистрирован: 06 янв 2011, 05:37

Re: Как создать Тип, или Объект в скрипте Юнити?

Сообщение Serge 11 янв 2011, 11:54

Непонятно зачем внутри структуры массивы? Логичней сделать массив структур для их перебора :-? .
Информация по структурам Структуры.
О, сколько нам открытий чудных Готовят просвещенья дух И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель.
Аватара пользователя
Serge
UNIверсал
 
Сообщения: 476
Зарегистрирован: 20 мар 2009, 15:53
Откуда: Сибирь г. Омск
  • Сайт
  • ICQ

Re: Как создать Тип, или Объект в скрипте Юнити?

Сообщение Fredo 11 янв 2011, 13:12

А что мешает сделать перебор массива Taskss.TaskssArray ? Мне кажется просто более логично его запихать внутрь структуры для того чтобы было более наглядно. Можно сразу в конструкторе сделать TaskssArray.Push(this); А в деструкторе можно находить этот элемент массива и удалять, получится очень удобно помоему. Да затупил, тогда нада будет использовать класс а не структуру ).
Аватара пользователя
Fredo
UNITрон
 
Сообщения: 213
Зарегистрирован: 06 янв 2011, 05:37


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

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

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