Автор Тема: Как подключить в скрипте JS другой скрипт  (Прочитано 7779 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Февраль 07, 2014, 09:56:32 am
Прочитано 7779 раз

maptbih007

  • Пользователь

  • Оффлайн
  • **

  • 23
  • Репутация:
    0
    • Просмотр профиля
Здравствуйте, уважаемые программисты.
У меня тут возник вопрос о том как подключить в скрипте JS другой скрипт.
"Подробнее":
У меня есть скрипт который в игре показывает меню (Первая картинка).
И мне нужно в этом скрипте сделать так что-бы при нажатии на кнопку "Серверы" Запускался другой скрипт JS

Если нужно то вот сам скрипт:
@script ExecuteInEditMode
#pragma strict

var Level : int;

var serverCreate : Rect;
var servers : Rect;
var OptionGraphics : Rect;
var OptionSound : Rect;
var OptionController : Rect;

var guiSkin : GUISkin;

var Liniya : Rect;

function OnGUI() {

GUI.skin = guiSkin;

if(GUI.Button(serverCreate, "Создать сервер")){
Application.LoadLevel(Level);
}

if(GUI.Button(servers, "Серверы")){
//Здесь нужно написать код который откроет другой скрипт JS
}

if(GUI.Button(Liniya, "_________________________")){
Debug.Log("Playing. Server");
}



if(GUI.Button(OptionGraphics, "Настройки графики")){
Debug.Log("Playing. Server Bots");
}

if(GUI.Button(OptionSound, "Настройки звука")){
Debug.Log("Playing. Server123");
}

if(GUI.Button(OptionController, "Настройки управления")){
Debug.Log("Playing. Server6543345");
}


}

Февраль 07, 2014, 10:04:58 am
Ответ #1

Mimi Neko

  • Администратор
  • Старожил форума

  • Оффлайн
  • *****

  • 2456
  • Репутация:
    153
    • Просмотр профиля
Что имеется ввиду под запуском другого скрипта?
В Юнити как бы не скрипты запускаются, а методы и функции. Или ещё, можно создать класс,  размещённый в  отдельном скрипте, и обращаться либо к нему, либо создавать его экземпляр и с ним  уже работать.

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

Февраль 07, 2014, 10:07:16 am
Ответ #2

Mimi Neko

  • Администратор
  • Старожил форума

  • Оффлайн
  • *****

  • 2456
  • Репутация:
    153
    • Просмотр профиля
программирую на  C#, поэтому вот посмотри для примера, работу с классами на C#:

http://flight-dream.com/forum/index.php?topic=1957.0

Февраль 07, 2014, 10:12:51 am
Ответ #3

Mimi Neko

  • Администратор
  • Старожил форума

  • Оффлайн
  • *****

  • 2456
  • Репутация:
    153
    • Просмотр профиля
Цитировать
Каждый .js файл создаёт Класс (по умолчанию)
Очень важно понять что когда вы пишите скрипт поведения в JavaScript Юнити, вы на самом деле пишите класс в котором:
Имя вашего скрипт файла и будет имя класса, к примеру если файл foo.js к нему можно будет в любом месте программы обратится написав var x = new foo()
Определённые “магические” имена методов на самом деле создают event handlers (триггеры на события) к примеру: start(), FixedUpdate() и так далее… На любом таком событии, определение функции это способ самого класса который вы пишите.
Нужно знать что код написанный внутри JavaScript файла но вне функций, запускается внутри тела класса, а переменные объявленные в нём, являются переменными класса.
Статические функции и переменные внутри класса, собственно и есть функции и переменные класса.

Это намного более элегантно чем использование классов в “настоящем” JavaScript, но также и более ограничено… в большинстве случаев с хорошей стороны (вы не сможете связать вместе объекты также свободно, как и в “настоящем” JavaScript).

К примеру, мы создадим новый behavior и назовем его foo, файл будет называться foo.js. Допустим так будет выглядеть наш файл:
view plaincopy to clipboardprint
public name : String; // когда вы перетащите этот скрипт - behavior
 // в gameObject - объект игры, эти значения будут видимы и их можно будет
 // менять пряма из графического меню программы.

public age : int; // другие скрипты которые ссылаться на этот объект
 // (к примеру: они присоединены к этому же объекту)
 // могут видеть public functions - публичные функции.

private favoriteColor : Color; // private members – НЕ будут доступны из других скриптов,
 // даже если эти скрипты принадлежат тому же объекту.

public bestFriend : foo; // переменному bestFriend можно дать значение перетащив
 // gameObject (объект игры) в интерфейсе с привязанной копией
 // скрипта поведения foo к этому property. Это даст вам доступ
 // к bestFriend public methods and members (его публичным методам и переменным).

static faction : String; // статические переменные всегда и везде видны,
 // поэтому другой скрипт может видеть foo.faction

function Update(){
 // эта функция вызывается Unity каждый кадр во время игры.
 // Так что это event handler (триггер на событие).
 var t = transform; // transform это property унаследованный от объекта игры
 // к которому привязан скрипт поведения.
}

function Bar(){
 // проста функция, если вы сами её не вызовите то она нечего не сделает
}

static function FooBar(){
 // глобальная функция. Другие скрипты в этой сцене могут её вызвать foo.FooBar();
}

Февраль 07, 2014, 10:17:08 am
Ответ #4

Mimi Neko

  • Администратор
  • Старожил форума

  • Оффлайн
  • *****

  • 2456
  • Репутация:
    153
    • Просмотр профиля
тоесть можно создать скрипт:

main.js
function server(){

//тело функции

}

положить этот скрипт в любую папку и пусть лежит.

А из любого другого скрипта обратиться к его функции, через имя скрипта (которе есть и имя класса):

main.server();

Февраль 07, 2014, 11:04:12 am
Ответ #5

maptbih007

  • Пользователь

  • Оффлайн
  • **

  • 23
  • Репутация:
    0
    • Просмотр профиля
Блин всё равно не получается :

@script ExecuteInEditMode
#pragma strict

var Level : int;

var serverCreate : Rect;
var servers : Rect;
var OptionGraphics : Rect;
var OptionSound : Rect;
var OptionController : Rect;

var guiSkin : GUISkin;

var Liniya : Rect;

function OnGUI() {
//Начало кнопок
GUI.skin = guiSkin;

if(GUI.Button(serverCreate, "Создать сервер")){
Application.LoadLevel(Level);
}

if(GUI.Button(servers, "Серверы")){

GUIEnablet.OnGUI();

}

if(GUI.Button(Liniya, "_________________________")){
Debug.Log("Playing. Server");
}



if(GUI.Button(OptionGraphics, "Настройки графики")){
Debug.Log("Playing. Server Bots");
}

if(GUI.Button(OptionSound, "Настройки звука")){
Debug.Log("Playing. Server123");
}

if(GUI.Button(OptionController, "Настройки управления")){
Debug.Log("Playing. Server6543345");
}
//Конец кнопок

}

Февраль 07, 2014, 13:08:41 pm
Ответ #6

Mimi Neko

  • Администратор
  • Старожил форума

  • Оффлайн
  • *****

  • 2456
  • Репутация:
    153
    • Просмотр профиля
Цитировать
if(GUI.Button(servers, "Серверы")){

GUIEnablet.OnGUI();

}

Что это?!

OnGUI(); - это собственный метод Юнити! его нельзя так использовать!
Почитай про методы и азы программирования на Юнити, для начала. На хабре напрмиер есть статейки хорошие, или у нас тут книги выложеные посмотри.

Февраль 07, 2014, 19:07:42 pm
Ответ #7

maptbih007

  • Пользователь

  • Оффлайн
  • **

  • 23
  • Репутация:
    0
    • Просмотр профиля
Вот подробности:
Запустить я хочу функции из скрипта который в свою очередь создавал GUI
Вот скрин: (Дизайн стрёмный потом поменяю!!!)

Февраль 07, 2014, 19:21:01 pm
Ответ #8

Mimi Neko

  • Администратор
  • Старожил форума

  • Оффлайн
  • *****

  • 2456
  • Репутация:
    153
    • Просмотр профиля
исполнительный скрипт, отображающий  меню:

menu.js
var menu1 = false;
var menu2 = false;
var menu3 = false;
var menu4 = false;


function menuSelector(m){

  var menu1 = false;
  var menu2 = false;
  var menu3 = false;
  var menu4 = false;


 switch(m){

    case 1:{menu1 = true; break;}
    case 2:{menu2 = true; break;}
    case 3:{menu3 = true; break;}
    case 4:{menu4 = true; break;}

 }

}




function OnGUI(){

   if(menu1){

      //содержимое меню 1

  }

   if(menu2){

      //содержимое меню 3

  }

   if(menu3){

      //содержимое меню 3

  }

   if(menu4){

      //содержимое меню 4

  }

}
« Последнее редактирование: Февраль 07, 2014, 19:28:13 pm от Mimi Neko »

Февраль 07, 2014, 19:27:42 pm
Ответ #9

Mimi Neko

  • Администратор
  • Старожил форума

  • Оффлайн
  • *****

  • 2456
  • Репутация:
    153
    • Просмотр профиля

А это в основном скрипте,  для обращения к функции в предыдущем скрипте:


if(GUI.Button(servers, "Серверы")){

  menu.SendMessage("menuSelector", 1);//Вызываем фунтцию menuSelector с параметром 1

}