Как создать экземпляр класса?

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

Как создать экземпляр класса?

Сообщение GrueGames 18 апр 2009, 09:15

Добрый день!
Если я правильно понял, каждый скрипт в [unity 3D] это класс.

Вот я создал такой скрипт-класс Accounts.js
Код: Выделить всё
public var id : int;//номер аккаунта
public var login : String; //логин
public var password : String; //пассворд
public var status : String; //статус
public var date : String; //дата регистрации
public var comment : String; //комментарий к аккаунту


Теперь хочу создать экземпляр этого класса из другого скрипта, с целью хранения там информации об аккаунте
Server.js
Код: Выделить всё
function Start () {
    var Acc1 = new Account();
    Acc1.login = "zzzz2";
    Debug.Log(Acc1.login); //смотрим что получилось
}


Запускаю:
11111.jpg


Что бы это могло значить? :)
Спасибо!
У вас нет доступа для просмотра вложений в этом сообщении.
Аватара пользователя
GrueGames
UNITрон
 
Сообщения: 200
Зарегистрирован: 11 апр 2009, 16:42
Откуда: Samara, Russia
  • Сайт
  • ICQ

Re: Как создать экземпляр класса?

Сообщение GrueGames 18 апр 2009, 09:48

А вот так работает без ошибок:
Код: Выделить всё
server.js
class Acc{
   public var id : int; //номер аккаунта
   public var login : String; //логин (совпадает с регистрационным емейлом)
   public var password : String; //пассворд
   public var status : String; //статус
   public var date : String; //дата регистрации
   public var comment : String; //комментарий к аккаунту
}

function Start () {
    var AccTest = new Acc();
    AccTest.login = "zzzz2";
    Debug.Log(AccTest.login);
}


Вот такой теперь вопрос нескромный: в чем разница и каким методом пользоваться?
Аватара пользователя
GrueGames
UNITрон
 
Сообщения: 200
Зарегистрирован: 11 апр 2009, 16:42
Откуда: Samara, Russia
  • Сайт
  • ICQ

Re: Как создать экземпляр класса?

Сообщение Neodrop 18 апр 2009, 12:43

Каждый скрипт в ЖабаСкрипте это класс, но не каждый класс нужно инициализировать с операндом new.
Если у тебя непосредственно указан класс (как во втором варианте), то всё правильно, если же как в первом, то экземпляр создаётся просто через определение его типа :

Server.js
Код: Выделить всё
var acc : Account;


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

Re: Как создать экземпляр класса?

Сообщение GrueGames 19 апр 2009, 16:32

Спасибо большое!
Эм.. а можно поподробнее про инициализацию, я что-то делаю неверно:

Item.js
Код: Выделить всё
class Location{ //Позиция объекта в мире
   public var x : int;
   public var y : int; 
}

public var amount : int; //количество
public var value : int; //цена
public var Loc : Location; //Позиция


Server.js
Код: Выделить всё
function Start() {
var Foo : Item; //создаем пробный айтем
Foo.value = 10;
}


Получаю ошибку:
NullReferenceException: Object reference not set to an instance of an object
Server.Start () (at Assets\Server.js:9)

Видимо нужно еще что-то сделать кроме перетаскивания обоих этих скриптов на один game object?
Аватара пользователя
GrueGames
UNITрон
 
Сообщения: 200
Зарегистрирован: 11 апр 2009, 16:42
Откуда: Samara, Russia
  • Сайт
  • ICQ

Re: Как создать экземпляр класса?

Сообщение Neodrop 19 апр 2009, 16:48

Код: Выделить всё
import Item;
    function Start()
{
    var Foo : Item = new Item();//создаем пробный айтем
    Foo.value = 10;
}
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Как создать экземпляр класса?

Сообщение GrueGames 19 апр 2009, 18:53

а там каких-нибудь символов перед include не надо поставить?
не понимает unity эту строку
Аватара пользователя
GrueGames
UNITрон
 
Сообщения: 200
Зарегистрирован: 11 апр 2009, 16:42
Откуда: Samara, Russia
  • Сайт
  • ICQ

Re: Как создать экземпляр класса?

Сообщение Neodrop 19 апр 2009, 19:06

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

Re: Как создать экземпляр класса?

Сообщение Neodrop 19 апр 2009, 19:23

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

Re: Как создать экземпляр класса?

Сообщение GrueGames 19 апр 2009, 20:41

Спасибо, буду знать.
добавил строку
Код: Выделить всё
import Item;

но ошибка не исчезла.
NullReferenceException: Object reference not set to an instance of an object
Server.Start () (at Assets\Server.js:11)
указывает на эту строку foo.value = 10;
Аватара пользователя
GrueGames
UNITрон
 
Сообщения: 200
Зарегистрирован: 11 апр 2009, 16:42
Откуда: Samara, Russia
  • Сайт
  • ICQ

Re: Как создать экземпляр класса?

Сообщение Neodrop 19 апр 2009, 21:26

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

Re: Как создать экземпляр класса?

Сообщение GrueGames 19 апр 2009, 22:00

Спасибо но не очень понятно где должна находиться эта папка.
Положил в "project_folder\Assets\Plugins\" но ошибка осталась :(
Аватара пользователя
GrueGames
UNITрон
 
Сообщения: 200
Зарегистрирован: 11 апр 2009, 16:42
Откуда: Samara, Russia
  • Сайт
  • ICQ

Re: Как создать экземпляр класса?

Сообщение Neodrop 19 апр 2009, 22:55

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

Re: Как создать экземпляр класса?

Сообщение GrueGames 19 апр 2009, 23:19

Эм... вместо нехорошего слова лучше объясните новичку, почему несмотря на правильный путь к папке, почерпнутый из мудрой документации, ошибка не устраняется :(
Аватара пользователя
GrueGames
UNITрон
 
Сообщения: 200
Зарегистрирован: 11 апр 2009, 16:42
Откуда: Samara, Russia
  • Сайт
  • ICQ

Re: Как создать экземпляр класса?

Сообщение Neodrop 19 апр 2009, 23:52

А вот это вы добавили? (Оператор new).

Код: Выделить всё
var Foo : Item = new Item();


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

Re: Как создать экземпляр класса?

Сообщение GrueGames 20 апр 2009, 01:16

Все, начались танцы с бубном...

Item.js
Код: Выделить всё
class Item {
   public var amount : int; //количество
   public var value : int; //цена
   public var loc : Location; //Позиция

}

class Location{ //Позиция объекта в мире
   public var x : int;
   public var y : int; 
}


Server.js
Код: Выделить всё
import Item;

function Start() {
var foo : Item = new Item(); //создаем пробный айтем
foo.value = 10;
foo.loc.x = 55;
}


NullReferenceException: Object reference not set to an instance of an object
Ошибка возникает вот на этой строке из Server.js
foo.loc.x = 55;
Тоесть класс Item он видит, а класс Location - нет.
Аватара пользователя
GrueGames
UNITрон
 
Сообщения: 200
Зарегистрирован: 11 апр 2009, 16:42
Откуда: Samara, Russia
  • Сайт
  • ICQ

След.

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

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

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