Unity Js - с чего начать? АЗЫ. Урок 1. - Страница 2 - Форум Игроделов
Чт, 02 Май 2024, 07:52 
 
Приветствую Вас Гость Главная | Регистрация | Вход
Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Форум Игроделов » UNITY3D » СКРИПТИНГ » Unity Js - с чего начать? АЗЫ. Урок 1. (Первые шаги в скриптинге.)
Unity Js - с чего начать? АЗЫ. Урок 1.
ЛевшаДата: Вс, 27 Фев 2011, 14:51 | Сообщение # 1
Черный Волк
 
Сообщений: 7257
Награды: 30
Репутация: 3313
Статус: Offline
cool Эта тема специально создана для первичного обучения азам скриптинга на Unity Js.
Здесь консультируемся по этим вопросам.


АЗЫ СКРИПТИНГА на UNITY Js.

Из чего состоит сам скрипт? Разобьем содержимое на части.
Но начнем с того что строки скрипта комп считывает по порядку очередности (сверху, вниз), запомните это и учитывайте во избежание недоразумений.
Скрипт всегда нужно начинать с обьявления переменных которые будут задействованы в данном скрипте, ибо сам унити их за вас сочинять скорее всего не станет. smile Рассмотрим все выше написанное на простом примере живого скрипта. Допустим мы хотим поставить на сцену простой куб и заставить его двигаться (колебаться) влево, вправо.
Что нам понадобиться в 1 очередь? Как и писал выше начнем наш скрипт с обьявления переменных. Давайте подумаем какие значения нам понадобиться в них хранить (ибо известно что в коде переменная являеться своеобразным контейнером для хранения значений, которые можно изменять, проверять и присваивать другим переменным и параметрам обьектов). Для данного случая нам понадобиться прежде всего переменная - скорость движения куба, чтобы урок проще было усвоить я буду использовать самые простые методы. Двигать куб в коде мы будем только через transform, вернее мы будем изменять из кода значения в его ячейках (трансформ находиться в инспекторе, справа, вверху), как мы знаем он отвечает за позицию, поворот и массштабирование обьекта, вот на эти параметры мы и будем воздействовать. Как я и писал для скрипта нам нужна в 1 очередь скорость, из чего состоит параметр скорости - из расстояния проходящего обьектом за промежуток времени и из непосредственно отрезков времени задержки (пауз) выполнения строк кода, если не делать пауз, то обьект будет перемещаться мгновенно, и незаметно глазу. smile Мы же собираемся сделать его движение по возможности плавным. Поэтому для параметра скорости я создаю 2 переменные - это moveDistanse - расстояние и moveTime - отрезок времени паузы между строками действий, из этих 2 параметров будет складываться скорость передвижения обьекта. Начинаем писать скрипт, обьявляем наши переменные:

Код
var moveDistanse = 1;
var moveTime = 0.1;


Сразу оговорюсь что значения пока берем от балды, их всегда можно поменять. Здесь настало время немного рассказать о типах переменных в данном концепте, а именно если мы перед переменной пишем var, то такая переменная доступна в инспекторе и ее значение можно менять не открывая скрипта, прямо там же. Если припишем перед переменной private var, то эта переменная будет работать локально внутри скрипта, но не будет доступна из инспектора (будет скрыта). И 3 тип - это static var, такая переменная недоступна в инспекторе, но работает внутри скрипта локально, а так же доступна из и видима из любого другого скрипта, иными словами - это не что иное как глобальная переменная. И вызывать ее можно так:

Код
Имя скрипта.имя переменной = ХХХ;


Для изменения значения например:

Код
Weapons.reload = true;


Для условия:

Код
if (Weapons.reload == true) {
                // тут наши действия по условию.
}


Вернемся к нашим баранам (переменным)... мы их обьявили и дали им первичные значения.
Дальше - чтобы выполнить какие либо действия в нашем скрипте, мы должны их (действия) так же описать кодом.
Но! код действий обязательно должен быть прописан внутри функций.
Что из себя представляет червяк по кличке *функция*? Это собственно отрезок кода, который помещаеться вовнутрь этой самой функции (между скобок {}, после вызова cамой функции), выглядет в коде примерно так:

Код
function Blabla () {
               // тут участок кода
               // тут участок кода
               // и т.д.
}


Функции в унити вызываються, запускаються и работают по определенным правилам.
Фунции деляться на встроенные специфические и те что создаем мы сами в своем коде.
Внимание! Создаваемые нами функции не должны совпадать именами с встроенными!
Итак немного выше мы с вами создали функцию (в примере). Вызвать ее и заставить выполниться можно выполнив действие вызова функции.
Кокретно для приведенного примера код вызова будет выглядеть так:

Код
Blabla ();


такая команда введенная в скрипте, заставит запуститься участок кода между скобками этой функции и выпониться 1 раз.
Если команда будет повторяться, то функция будет выполняться все время.

Это что касательно созданных нами функций. Теперь немного о встроенных функциях которые нам понадобяться для нашего урока.
(об остальных, вы можете узнать, почитав скрипт референсе, когда немного научитесь стоять на ногах прогера biggrin )
Итак я перечислю несколько функций первой необходимости и опишу как они работают...
1. function Start - вызываеться движком, только один раз при старте. Очень удобно, чтоб присвоить переменным разовые значения. Например при смене оружия указать магазину на сколько патронов он должен заряжаться.
2. function Update () - вызываеться самим движком игры, каждый кадр и не зависимо от нашего желания. Самая быстрореагирующая функция, но так же и самая грузящая двиг и самая пожирающая ресурсы. Применяеться только по необходимости, например для управления контроллером и камерой.
3. function LateUpdate - тоже вызываеться движком, тоже выполняеться каждый кадр, но в самом коце скрипта, после всех остальных команд и т.д.
4. function FixedUpdate - эта функция вызываеться движком через определенные промежутки времени и скорость ее повторения не зависит от частоты кадров (fps). В основном применяеться для работы физики в игре. Наиболее рекумендуемая функция для постоянного контроля чего нибудь.
Обратите внимание на большие буквы в имени функций! Все функции имеют имена с первой заглавной буквой.
Функции так же можно вызывать из других скриптов, но об этом в текущем уроке мы говорить не будем... (может когда нибудь в следующем).
Итак мы с вами узнали структуру скрипта, из чего он состоит и как это дело приблизительно работает. Думаю самое время попытаться нам самим что нибудь написать... smile Я буду писать скрипт и делать подробные коментарии к каждой строке кода (все что написано в скриптовой строке через *//* не читаеться как код), а ваша задача следить за мыслью. Итак поехали:

Код
var moveRange = 1;   // обявил публичную переменную хранящую значение расстояния.
var moveTime = 1;   // обьявил публичную переменную хранящую значение времени.
private var range = 0;   // обьявил локальную переменную расстояния.
private var time = 0;   // обьявил локальную переменную времени.

function Start ()  {   // запускаем функцию Старт.
         range = moveRange;   // присваиваем значение.
         time = moveTime;   // присваиваем значение.
}   // закрываем функцию.

function FixedUpdate ()  {   // запускаем функцию.
         Move ();   // вызываем соответствующую функцию (function Move ()).
}   //

function Move ()  {   // запускаеться вызванная функция.
         Move_left ();   // вызываем функцию движения влево.
         yield WaitForSeconds (time);   // приостанавливаем выполнение кода на время (time * 3), (3 цикла, догадайтесь почему).
         Move_right ();   // вызываем функцию движения в право.
}   // закрыли функцию.

function Move_left ()  {   // запускаеться вызваная функция движения влево.
         transform.localPosition.x -= range;   // командуем сдвинуть обьект по оси х на расстояние (range).
         yield WaitForSeconds (time);   // ждем, пауза.
         transform.localPosition.x -= range;
         yield WaitForSeconds (time);
         transform.localPosition.x -= range;
         yield WaitForSeconds (time);   // повторяем 3 раза.
}

function Move_right ()  {   // запускаеться вызваная функция движения вправо.
         transform.localPosition.x += range;
         yield WaitForSeconds (time);
         transform.localPosition.x += range;
         yield WaitForSeconds (time);
         transform.localPosition.x += range;
         yield WaitForSeconds (time);
}

Если этот код присвоить какому нибудь обьекту сцены, например кубу, то при тесте он будет колебаться по оси Х.

На этом 1. урок закончен, надеюсь будут еще... пишите что непонятно. smile


X.cor.R (Prologue)
 
Сообщениеcool Эта тема специально создана для первичного обучения азам скриптинга на Unity Js.
Здесь консультируемся по этим вопросам.


АЗЫ СКРИПТИНГА на UNITY Js.

Из чего состоит сам скрипт? Разобьем содержимое на части.
Но начнем с того что строки скрипта комп считывает по порядку очередности (сверху, вниз), запомните это и учитывайте во избежание недоразумений.
Скрипт всегда нужно начинать с обьявления переменных которые будут задействованы в данном скрипте, ибо сам унити их за вас сочинять скорее всего не станет. smile Рассмотрим все выше написанное на простом примере живого скрипта. Допустим мы хотим поставить на сцену простой куб и заставить его двигаться (колебаться) влево, вправо.
Что нам понадобиться в 1 очередь? Как и писал выше начнем наш скрипт с обьявления переменных. Давайте подумаем какие значения нам понадобиться в них хранить (ибо известно что в коде переменная являеться своеобразным контейнером для хранения значений, которые можно изменять, проверять и присваивать другим переменным и параметрам обьектов). Для данного случая нам понадобиться прежде всего переменная - скорость движения куба, чтобы урок проще было усвоить я буду использовать самые простые методы. Двигать куб в коде мы будем только через transform, вернее мы будем изменять из кода значения в его ячейках (трансформ находиться в инспекторе, справа, вверху), как мы знаем он отвечает за позицию, поворот и массштабирование обьекта, вот на эти параметры мы и будем воздействовать. Как я и писал для скрипта нам нужна в 1 очередь скорость, из чего состоит параметр скорости - из расстояния проходящего обьектом за промежуток времени и из непосредственно отрезков времени задержки (пауз) выполнения строк кода, если не делать пауз, то обьект будет перемещаться мгновенно, и незаметно глазу. smile Мы же собираемся сделать его движение по возможности плавным. Поэтому для параметра скорости я создаю 2 переменные - это moveDistanse - расстояние и moveTime - отрезок времени паузы между строками действий, из этих 2 параметров будет складываться скорость передвижения обьекта. Начинаем писать скрипт, обьявляем наши переменные:

Код
var moveDistanse = 1;
var moveTime = 0.1;


Сразу оговорюсь что значения пока берем от балды, их всегда можно поменять. Здесь настало время немного рассказать о типах переменных в данном концепте, а именно если мы перед переменной пишем var, то такая переменная доступна в инспекторе и ее значение можно менять не открывая скрипта, прямо там же. Если припишем перед переменной private var, то эта переменная будет работать локально внутри скрипта, но не будет доступна из инспектора (будет скрыта). И 3 тип - это static var, такая переменная недоступна в инспекторе, но работает внутри скрипта локально, а так же доступна из и видима из любого другого скрипта, иными словами - это не что иное как глобальная переменная. И вызывать ее можно так:

Код
Имя скрипта.имя переменной = ХХХ;


Для изменения значения например:

Код
Weapons.reload = true;


Для условия:

Код
if (Weapons.reload == true) {
                // тут наши действия по условию.
}


Вернемся к нашим баранам (переменным)... мы их обьявили и дали им первичные значения.
Дальше - чтобы выполнить какие либо действия в нашем скрипте, мы должны их (действия) так же описать кодом.
Но! код действий обязательно должен быть прописан внутри функций.
Что из себя представляет червяк по кличке *функция*? Это собственно отрезок кода, который помещаеться вовнутрь этой самой функции (между скобок {}, после вызова cамой функции), выглядет в коде примерно так:

Код
function Blabla () {
               // тут участок кода
               // тут участок кода
               // и т.д.
}


Функции в унити вызываються, запускаються и работают по определенным правилам.
Фунции деляться на встроенные специфические и те что создаем мы сами в своем коде.
Внимание! Создаваемые нами функции не должны совпадать именами с встроенными!
Итак немного выше мы с вами создали функцию (в примере). Вызвать ее и заставить выполниться можно выполнив действие вызова функции.
Кокретно для приведенного примера код вызова будет выглядеть так:

Код
Blabla ();


такая команда введенная в скрипте, заставит запуститься участок кода между скобками этой функции и выпониться 1 раз.
Если команда будет повторяться, то функция будет выполняться все время.

Это что касательно созданных нами функций. Теперь немного о встроенных функциях которые нам понадобяться для нашего урока.
(об остальных, вы можете узнать, почитав скрипт референсе, когда немного научитесь стоять на ногах прогера biggrin )
Итак я перечислю несколько функций первой необходимости и опишу как они работают...
1. function Start - вызываеться движком, только один раз при старте. Очень удобно, чтоб присвоить переменным разовые значения. Например при смене оружия указать магазину на сколько патронов он должен заряжаться.
2. function Update () - вызываеться самим движком игры, каждый кадр и не зависимо от нашего желания. Самая быстрореагирующая функция, но так же и самая грузящая двиг и самая пожирающая ресурсы. Применяеться только по необходимости, например для управления контроллером и камерой.
3. function LateUpdate - тоже вызываеться движком, тоже выполняеться каждый кадр, но в самом коце скрипта, после всех остальных команд и т.д.
4. function FixedUpdate - эта функция вызываеться движком через определенные промежутки времени и скорость ее повторения не зависит от частоты кадров (fps). В основном применяеться для работы физики в игре. Наиболее рекумендуемая функция для постоянного контроля чего нибудь.
Обратите внимание на большие буквы в имени функций! Все функции имеют имена с первой заглавной буквой.
Функции так же можно вызывать из других скриптов, но об этом в текущем уроке мы говорить не будем... (может когда нибудь в следующем).
Итак мы с вами узнали структуру скрипта, из чего он состоит и как это дело приблизительно работает. Думаю самое время попытаться нам самим что нибудь написать... smile Я буду писать скрипт и делать подробные коментарии к каждой строке кода (все что написано в скриптовой строке через *//* не читаеться как код), а ваша задача следить за мыслью. Итак поехали:

Код
var moveRange = 1;   // обявил публичную переменную хранящую значение расстояния.
var moveTime = 1;   // обьявил публичную переменную хранящую значение времени.
private var range = 0;   // обьявил локальную переменную расстояния.
private var time = 0;   // обьявил локальную переменную времени.

function Start ()  {   // запускаем функцию Старт.
         range = moveRange;   // присваиваем значение.
         time = moveTime;   // присваиваем значение.
}   // закрываем функцию.

function FixedUpdate ()  {   // запускаем функцию.
         Move ();   // вызываем соответствующую функцию (function Move ()).
}   //

function Move ()  {   // запускаеться вызванная функция.
         Move_left ();   // вызываем функцию движения влево.
         yield WaitForSeconds (time);   // приостанавливаем выполнение кода на время (time * 3), (3 цикла, догадайтесь почему).
         Move_right ();   // вызываем функцию движения в право.
}   // закрыли функцию.

function Move_left ()  {   // запускаеться вызваная функция движения влево.
         transform.localPosition.x -= range;   // командуем сдвинуть обьект по оси х на расстояние (range).
         yield WaitForSeconds (time);   // ждем, пауза.
         transform.localPosition.x -= range;
         yield WaitForSeconds (time);
         transform.localPosition.x -= range;
         yield WaitForSeconds (time);   // повторяем 3 раза.
}

function Move_right ()  {   // запускаеться вызваная функция движения вправо.
         transform.localPosition.x += range;
         yield WaitForSeconds (time);
         transform.localPosition.x += range;
         yield WaitForSeconds (time);
         transform.localPosition.x += range;
         yield WaitForSeconds (time);
}

Если этот код присвоить какому нибудь обьекту сцены, например кубу, то при тесте он будет колебаться по оси Х.

На этом 1. урок закончен, надеюсь будут еще... пишите что непонятно. smile

Автор - Левша
Дата добавления - 27 Фев 2011 в 14:51
СкептикДата: Вт, 29 Мар 2011, 13:48 | Сообщение # 21
Мыслитель
 
Сообщений: 5860
Награды: 48
Репутация: 1731
Статус: Offline
Наследование идентичное шарпу.
А вообще Джава проще и больше готовых решений написано как раз на нем.


Фанат игр Max Payne и Fahrenheit.
 
СообщениеНаследование идентичное шарпу.
А вообще Джава проще и больше готовых решений написано как раз на нем.

Автор - Скептик
Дата добавления - 29 Мар 2011 в 13:48
TibersДата: Вт, 09 Авг 2011, 17:14 | Сообщение # 22
 
Сообщений: 93
Награды: 3
Репутация: 58
Статус: Offline
а когда же 2 урок??????

[img]http://i.imgur.com/Muw4o.png[/img]
 
Сообщениеа когда же 2 урок??????

Автор - Tibers
Дата добавления - 09 Авг 2011 в 17:14
ЛевшаДата: Вт, 09 Авг 2011, 21:02 | Сообщение # 23
Черный Волк
 
Сообщений: 7257
Награды: 30
Репутация: 3313
Статус: Offline
Quote (Tibers)
когда же 2 урок??????

Не знаю... когда время будет и желание. smile
Думаю для быстрого старта этого урока хватит с головой, а дальше сами копайте.


X.cor.R (Prologue)
 
Сообщение
Quote (Tibers)
когда же 2 урок??????

Не знаю... когда время будет и желание. smile
Думаю для быстрого старта этого урока хватит с головой, а дальше сами копайте.

Автор - Левша
Дата добавления - 09 Авг 2011 в 21:02
123_XanteR_456Дата: Сб, 05 Ноя 2011, 14:38 | Сообщение # 24
Нет аватара
 
Сообщений: 169
Награды: 0
Репутация: 35
Статус: Offline
Левша,а как вызвать функцию из другово скрипта? Прошу прощения,что (вроде) не в той теме happy

Неплохо знаю JavaScript(Unity3D API) =)
 
СообщениеЛевша,а как вызвать функцию из другово скрипта? Прошу прощения,что (вроде) не в той теме happy

Автор - 123_XanteR_456
Дата добавления - 05 Ноя 2011 в 14:38
ЛевшаДата: Сб, 05 Ноя 2011, 15:57 | Сообщение # 25
Черный Волк
 
Сообщений: 7257
Награды: 30
Репутация: 3313
Статус: Offline
Quote (123_XanteR_456)
как вызвать функцию из другово скрипта?

Можно применить static function, а можно и мессаги посылать.
Можно даже вызывать функции с помощью статических переменных (заглушек). Кому как нравиться.


X.cor.R (Prologue)
 
Сообщение
Quote (123_XanteR_456)
как вызвать функцию из другово скрипта?

Можно применить static function, а можно и мессаги посылать.
Можно даже вызывать функции с помощью статических переменных (заглушек). Кому как нравиться.

Автор - Левша
Дата добавления - 05 Ноя 2011 в 15:57
123_XanteR_456Дата: Сб, 05 Ноя 2011, 17:10 | Сообщение # 26
Нет аватара
 
Сообщений: 169
Награды: 0
Репутация: 35
Статус: Offline
Левша, а про SendMessage я уже спрашивал....Но так и не нашёл дельного в FPS Tutorial cry

Неплохо знаю JavaScript(Unity3D API) =)
 
СообщениеЛевша, а про SendMessage я уже спрашивал....Но так и не нашёл дельного в FPS Tutorial cry

Автор - 123_XanteR_456
Дата добавления - 05 Ноя 2011 в 17:10
ЛевшаДата: Сб, 05 Ноя 2011, 17:32 | Сообщение # 27
Черный Волк
 
Сообщений: 7257
Награды: 30
Репутация: 3313
Статус: Offline
Quote (123_XanteR_456)
так и не нашёл дельного в FPS Tutorial

Ну как же ? huh Там есть скрипт автомата посылающий мессагу повреждения
Code

hit.collider.SendMessageUpwards("ApplyDamage", damage, SendMessageOptions.DontRequireReceiver);


И скрипт врага принимающий ее...
Code

function ApplyDamage (damage : float) {
     health -= damage;
}


X.cor.R (Prologue)
 
Сообщение
Quote (123_XanteR_456)
так и не нашёл дельного в FPS Tutorial

Ну как же ? huh Там есть скрипт автомата посылающий мессагу повреждения
Code

hit.collider.SendMessageUpwards("ApplyDamage", damage, SendMessageOptions.DontRequireReceiver);


И скрипт врага принимающий ее...
Code

function ApplyDamage (damage : float) {
     health -= damage;
}

Автор - Левша
Дата добавления - 05 Ноя 2011 в 17:32
123_XanteR_456Дата: Сб, 05 Ноя 2011, 19:05 | Сообщение # 28
Нет аватара
 
Сообщений: 169
Награды: 0
Репутация: 35
Статус: Offline
Левша, хаха)) Это я нашол,но так и не понял что да как((

Добавлено (05.11.2011, 19:05)
---------------------------------------------
Значит я пишу:

Code
object.SendMessage("soobschenie");

Принимаемый объект:

Code
function Soobschenie() {
bla
bla
bla
}


И при отправке сообщения функция срабатывает?


Неплохо знаю JavaScript(Unity3D API) =)
 
СообщениеЛевша, хаха)) Это я нашол,но так и не понял что да как((

Добавлено (05.11.2011, 19:05)
---------------------------------------------
Значит я пишу:

Code
object.SendMessage("soobschenie");

Принимаемый объект:

Code
function Soobschenie() {
bla
bla
bla
}


И при отправке сообщения функция срабатывает?

Автор - 123_XanteR_456
Дата добавления - 05 Ноя 2011 в 19:05
ЛевшаДата: Сб, 05 Ноя 2011, 20:12 | Сообщение # 29
Черный Волк
 
Сообщений: 7257
Награды: 30
Репутация: 3313
Статус: Offline
Quote (123_XanteR_456)
И при отправке сообщения функция срабатывает?

ну вобщем да... только точно не помню... там аргументы играют важную роль - SendMessageOptions.DontRequireReceiver
Если не прописать, отправитель вроде будет отклика ждать... и выводить в логе что ответ не получен, как то так... smile


X.cor.R (Prologue)
 
Сообщение
Quote (123_XanteR_456)
И при отправке сообщения функция срабатывает?

ну вобщем да... только точно не помню... там аргументы играют важную роль - SendMessageOptions.DontRequireReceiver
Если не прописать, отправитель вроде будет отклика ждать... и выводить в логе что ответ не получен, как то так... smile

Автор - Левша
Дата добавления - 05 Ноя 2011 в 20:12
seamanДата: Сб, 05 Ноя 2011, 20:38 | Сообщение # 30
Гуру
 
Сообщений: 1748
Награды: 10
Репутация: 660
Статус: Offline
1. Нужно учитывать, что вызываются все методы с таким именем в этом GO. Т.е. если у Вас висит несколько скриптов, то во всех скриптах вызывается метод с таким именем.
2. Вторым параметром SendMessage можно передать в этот метод любой объект (например просто число - уровень разрушения).
3. Третий параметр - именно SendMessageOptions. Если не важно чтобы получатель точно получил сообщение, то лучше писать именно endMessageOptions.DontRequireReceiver иначе выдаст ошибку при отсутствии приемника.
4. SendMessageUpwards вызывает метод с данным именем не только на данном GO, но и на его "предках" в иерархии.
5. BroadcastMessage наоборот на GO и всех его детях.
6. SendMessage -ами нужно разбрасываться с осторожностью. Очень хорошая фича, но относительно медленная. Особенно SendMessageUpwards и BroadcastMessage. Есть альтернативы - делегаты, Action, Func.
 
Сообщение1. Нужно учитывать, что вызываются все методы с таким именем в этом GO. Т.е. если у Вас висит несколько скриптов, то во всех скриптах вызывается метод с таким именем.
2. Вторым параметром SendMessage можно передать в этот метод любой объект (например просто число - уровень разрушения).
3. Третий параметр - именно SendMessageOptions. Если не важно чтобы получатель точно получил сообщение, то лучше писать именно endMessageOptions.DontRequireReceiver иначе выдаст ошибку при отсутствии приемника.
4. SendMessageUpwards вызывает метод с данным именем не только на данном GO, но и на его "предках" в иерархии.
5. BroadcastMessage наоборот на GO и всех его детях.
6. SendMessage -ами нужно разбрасываться с осторожностью. Очень хорошая фича, но относительно медленная. Особенно SendMessageUpwards и BroadcastMessage. Есть альтернативы - делегаты, Action, Func.

Автор - seaman
Дата добавления - 05 Ноя 2011 в 20:38
123_XanteR_456Дата: Вс, 06 Ноя 2011, 11:35 | Сообщение # 31
Нет аватара
 
Сообщений: 169
Награды: 0
Репутация: 35
Статус: Offline
Левша, seaman, спасибо за ответы,но нифига не фурычит(((
Всё прописал,
Quote (Левша)
SendMessageOptions.DontRequireReceiver
но когда происходит условие и массага отправляется,то вот такая ошибка(


Неплохо знаю JavaScript(Unity3D API) =)
 
СообщениеЛевша, seaman, спасибо за ответы,но нифига не фурычит(((
Всё прописал,
Quote (Левша)
SendMessageOptions.DontRequireReceiver
но когда происходит условие и массага отправляется,то вот такая ошибка(

Автор - 123_XanteR_456
Дата добавления - 06 Ноя 2011 в 11:35
seamanДата: Вс, 06 Ноя 2011, 12:58 | Сообщение # 32
Гуру
 
Сообщений: 1748
Награды: 10
Репутация: 660
Статус: Offline
Объект, которому отправляешь не существует.
 
СообщениеОбъект, которому отправляешь не существует.

Автор - seaman
Дата добавления - 06 Ноя 2011 в 12:58
123_XanteR_456Дата: Вс, 06 Ноя 2011, 13:04 | Сообщение # 33
Нет аватара
 
Сообщений: 169
Награды: 0
Репутация: 35
Статус: Offline
Это как?
у меня есть переменная с названием obj
я делаю так:

obj.SendMessage.......и т.д


Неплохо знаю JavaScript(Unity3D API) =)
 
СообщениеЭто как?
у меня есть переменная с названием obj
я делаю так:

obj.SendMessage.......и т.д

Автор - 123_XanteR_456
Дата добавления - 06 Ноя 2011 в 13:04
seamanДата: Вс, 06 Ноя 2011, 14:57 | Сообщение # 34
Гуру
 
Сообщений: 1748
Награды: 10
Репутация: 660
Статус: Offline
Проверь
Code
if(obj == null)
    Debug.Log("NULL!!!");

непосредственно перед использованием.
 
СообщениеПроверь
Code
if(obj == null)
    Debug.Log("NULL!!!");

непосредственно перед использованием.

Автор - seaman
Дата добавления - 06 Ноя 2011 в 14:57
123_XanteR_456Дата: Вт, 08 Ноя 2011, 14:36 | Сообщение # 35
Нет аватара
 
Сообщений: 169
Награды: 0
Репутация: 35
Статус: Offline
seaman, всё)) Спасибо! С функциями почти разобрался! И последнее что не понял:а как остановить функцию?
Вот смотрите:
Я из скрипта меняю значение переменной в другом скрипте по условию.
И у меня всё меняется правильно!
После того,при другом условии я снова меняю значения,но на другие(изна4альные).
И второе условие не срабатывает!
То есть первый раз работает,второй нет!


Неплохо знаю JavaScript(Unity3D API) =)
 
Сообщениеseaman, всё)) Спасибо! С функциями почти разобрался! И последнее что не понял:а как остановить функцию?
Вот смотрите:
Я из скрипта меняю значение переменной в другом скрипте по условию.
И у меня всё меняется правильно!
После того,при другом условии я снова меняю значения,но на другие(изна4альные).
И второе условие не срабатывает!
То есть первый раз работает,второй нет!

Автор - 123_XanteR_456
Дата добавления - 08 Ноя 2011 в 14:36
СкептикДата: Вт, 08 Ноя 2011, 14:50 | Сообщение # 36
Мыслитель
 
Сообщений: 5860
Награды: 48
Репутация: 1731
Статус: Offline
Кроме if, существует еще else if.

Фанат игр Max Payne и Fahrenheit.
 
СообщениеКроме if, существует еще else if.

Автор - Скептик
Дата добавления - 08 Ноя 2011 в 14:50
ЛевшаДата: Вт, 08 Ноя 2011, 15:32 | Сообщение # 37
Черный Волк
 
Сообщений: 7257
Награды: 30
Репутация: 3313
Статус: Offline
Quote (123_XanteR_456)
То есть первый раз работает,второй нет!

Ты код выложи...


X.cor.R (Prologue)
 
Сообщение
Quote (123_XanteR_456)
То есть первый раз работает,второй нет!

Ты код выложи...

Автор - Левша
Дата добавления - 08 Ноя 2011 в 15:32
123_XanteR_456Дата: Вт, 08 Ноя 2011, 15:55 | Сообщение # 38
Нет аватара
 
Сообщений: 169
Награды: 0
Репутация: 35
Статус: Offline
Code

var maximumHitPoints = 200.0;
var hitPoints : float;
var regenerationSpeed : float = 5;
var painLittle : AudioClip;
var painBig : AudioClip;
var die : AudioClip;
var deadReplacement : Rigidbody;
private var gotHitTimer = -1.0;
var healthGUI : GUITexture;
private var healthGUIWidth = 100.0;
var damage : GameObject;
var explShake : GameObject;
var xrom : AudioClip;

function Awake () {
  healthGUIWidth = healthGUI.pixelInset.width;
}

function PlayerDamage (damage : int) {
  if (hitPoints < 0.0)
   return;

  // Apply damage
  hitPoints -= damage;
   
  // Play pain sound when getting hit - but don't play so often
  if (Time.time > gotHitTimer && painBig && painLittle) {
   // Play a big pain sound
   if (hitPoints < maximumHitPoints * 0.2 || damage > 100) {
    audio.PlayOneShot(painBig, 1.0 / audio.volume);
    gotHitTimer = Time.time + Random.Range(painBig.length * 2, painBig.length * 3);
   } else {
    // Play a small pain sound
    audio.PlayOneShot(painLittle, 1.0 / audio.volume);
    gotHitTimer = Time.time + Random.Range(painLittle.length * 2, painLittle.length * 3);
   }
  }

  // Are we dead?
  if (hitPoints < 0.0)
   Die();
    
  if (hitPoints < 25.0)
      Xrom();
       
  if (hitPoints > 76.0)
      NetXrom();
}

function Die () {
  if (die && deadReplacement)
   AudioSource.PlayClipAtPoint(die, transform.position);
  var dead : Rigidbody = Instantiate(deadReplacement, transform.position, transform.rotation);
   
  // Disable all script behaviours (Essentially deactivating player control)
  var coms : Component[] = GetComponentsInChildren(MonoBehaviour);
  for (var b in coms) {
   var p : MonoBehaviour = b as MonoBehaviour;
   if (p)
    p.enabled = false;
  }
}

function LateUpdate () {
  UpdateGUI();
}

function Update (){
//REGENERATION and damage effect
  if (hitPoints < 200.0  && hitPoints > 0.0)  
  hitPoints += Time.deltaTime * regenerationSpeed;
     damage.guiTexture.enabled = true;
      
  if (hitPoints > 198.0)
    damage.guiTexture.enabled = false;
}

function Exploasion(){
explShake.animation.Play("exploasion");
}

function UpdateGUI () {
  var healthFraction = Mathf.Clamp01(hitPoints / maximumHitPoints);
  healthGUI.pixelInset.xMax = healthGUI.pixelInset.xMin + healthGUIWidth * healthFraction;
  }
   
function Xrom() {
FPSwalker2.walkSpeed = 1;
FPSwalker2.runSpeed  = 2;
FPSwalker2.jumpSpeed  = 2;
xrom.Play();
}

function NetXrom() {
FPSwalker2.walkSpeed = 6;
FPSwalker2.runSpeed  = 10;
FPSwalker2.jumpSpeed  = 6;
}

Добавлено (08.11.2011, 15:55)
---------------------------------------------
Сначала вызывается функция "Xrom"
Потом "NetXrom"


Неплохо знаю JavaScript(Unity3D API) =)
 
Сообщение
Code

var maximumHitPoints = 200.0;
var hitPoints : float;
var regenerationSpeed : float = 5;
var painLittle : AudioClip;
var painBig : AudioClip;
var die : AudioClip;
var deadReplacement : Rigidbody;
private var gotHitTimer = -1.0;
var healthGUI : GUITexture;
private var healthGUIWidth = 100.0;
var damage : GameObject;
var explShake : GameObject;
var xrom : AudioClip;

function Awake () {
  healthGUIWidth = healthGUI.pixelInset.width;
}

function PlayerDamage (damage : int) {
  if (hitPoints < 0.0)
   return;

  // Apply damage
  hitPoints -= damage;
   
  // Play pain sound when getting hit - but don't play so often
  if (Time.time > gotHitTimer && painBig && painLittle) {
   // Play a big pain sound
   if (hitPoints < maximumHitPoints * 0.2 || damage > 100) {
    audio.PlayOneShot(painBig, 1.0 / audio.volume);
    gotHitTimer = Time.time + Random.Range(painBig.length * 2, painBig.length * 3);
   } else {
    // Play a small pain sound
    audio.PlayOneShot(painLittle, 1.0 / audio.volume);
    gotHitTimer = Time.time + Random.Range(painLittle.length * 2, painLittle.length * 3);
   }
  }

  // Are we dead?
  if (hitPoints < 0.0)
   Die();
    
  if (hitPoints < 25.0)
      Xrom();
       
  if (hitPoints > 76.0)
      NetXrom();
}

function Die () {
  if (die && deadReplacement)
   AudioSource.PlayClipAtPoint(die, transform.position);
  var dead : Rigidbody = Instantiate(deadReplacement, transform.position, transform.rotation);
   
  // Disable all script behaviours (Essentially deactivating player control)
  var coms : Component[] = GetComponentsInChildren(MonoBehaviour);
  for (var b in coms) {
   var p : MonoBehaviour = b as MonoBehaviour;
   if (p)
    p.enabled = false;
  }
}

function LateUpdate () {
  UpdateGUI();
}

function Update (){
//REGENERATION and damage effect
  if (hitPoints < 200.0  && hitPoints > 0.0)  
  hitPoints += Time.deltaTime * regenerationSpeed;
     damage.guiTexture.enabled = true;
      
  if (hitPoints > 198.0)
    damage.guiTexture.enabled = false;
}

function Exploasion(){
explShake.animation.Play("exploasion");
}

function UpdateGUI () {
  var healthFraction = Mathf.Clamp01(hitPoints / maximumHitPoints);
  healthGUI.pixelInset.xMax = healthGUI.pixelInset.xMin + healthGUIWidth * healthFraction;
  }
   
function Xrom() {
FPSwalker2.walkSpeed = 1;
FPSwalker2.runSpeed  = 2;
FPSwalker2.jumpSpeed  = 2;
xrom.Play();
}

function NetXrom() {
FPSwalker2.walkSpeed = 6;
FPSwalker2.runSpeed  = 10;
FPSwalker2.jumpSpeed  = 6;
}

Добавлено (08.11.2011, 15:55)
---------------------------------------------
Сначала вызывается функция "Xrom"
Потом "NetXrom"


Автор - 123_XanteR_456
Дата добавления - 08 Ноя 2011 в 15:55
СкептикДата: Ср, 09 Ноя 2011, 00:57 | Сообщение # 39
Мыслитель
 
Сообщений: 5860
Награды: 48
Репутация: 1731
Статус: Offline
Почему участок кода

Code
if (hitPoints < 0.0)


у вас повторяется?


Фанат игр Max Payne и Fahrenheit.
 
СообщениеПочему участок кода

Code
if (hitPoints < 0.0)


у вас повторяется?

Автор - Скептик
Дата добавления - 09 Ноя 2011 в 00:57
seamanДата: Ср, 09 Ноя 2011, 20:57 | Сообщение # 40
Гуру
 
Сообщений: 1748
Награды: 10
Репутация: 660
Статус: Offline
Ну логику в этом можно найти. Второй раз проверяем <0 уже после вычитания дамаджа. И если верно - умерли. При следующем входе проверять уже не надо - просто сразу выходим.
Тут другое дело, что Xrom вызовется и сразу после смерти персонажа. Т.е. если hitPoints < 0, то вызывается и Die, и Xrom
 
СообщениеНу логику в этом можно найти. Второй раз проверяем <0 уже после вычитания дамаджа. И если верно - умерли. При следующем входе проверять уже не надо - просто сразу выходим.
Тут другое дело, что Xrom вызовется и сразу после смерти персонажа. Т.е. если hitPoints < 0, то вызывается и Die, и Xrom

Автор - seaman
Дата добавления - 09 Ноя 2011 в 20:57
Форум Игроделов » UNITY3D » СКРИПТИНГ » Unity Js - с чего начать? АЗЫ. Урок 1. (Первые шаги в скриптинге.)
  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Поиск:
Загрузка...

Game Creating CommUnity © 2009 - 2024