.

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

.

Сообщение NeOPS 27 апр 2009, 01:46

.
Последний раз редактировалось NeOPS 28 июл 2017, 01:46, всего редактировалось 1 раз.
NeOPS
UNец
 
Сообщения: 4
Зарегистрирован: 24 апр 2009, 06:53

Re: Вызвать функцию из другого скрипта

Сообщение Avatarchik 27 апр 2009, 02:35

Создаеш первый скрипт:
Код: Выделить всё
function Start() {
var script : FunAdd  = GetComponent (FunAdd);
script.Print();
   }



Потом второй с название FunAdd:
Код: Выделить всё
function Print(){
print ("Privet");
}


И кидаеш эти два скрипта на один GameObject
Добавить ava-karaban в Skype
Аватара пользователя
Avatarchik
UNITрон
 
Сообщения: 274
Зарегистрирован: 04 апр 2009, 15:36
Откуда: Украина(Донецк)
  • ICQ

Re: Вызвать функцию из другого скрипта

Сообщение Neodrop 27 апр 2009, 02:45

Получить можно двумя способами.
1. Непосредственно объявить переменную нужного типа и просто перетащить в Редакторе на эту переменную объект, содержащий искомый скрипт.
2. Получить ссылку на этот объект и с помощью GetComponent(Type) получить искомый компонент.

Скрипты не обязаны находиться на одном объекте.

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

Re: Вызвать функцию из другого скрипта

Сообщение MediaMen 27 апр 2009, 08:57

*Скрипты не обязаны находиться на одном объекте.* Можно здесь по подробнее. Что поправить в предыдущих скриптах что бы они на разных объектах работали?
Аватара пользователя
MediaMen
UNIт
 
Сообщения: 85
Зарегистрирован: 13 апр 2009, 05:49

Re: Вызвать функцию из другого скрипта

Сообщение MediaMen 27 апр 2009, 09:10

Разобрался!

Код: Выделить всё
function Start() {
var object = GameObject.Find("2");//2 это имя объекта на котором висит скрипт FunAdd
var script : FunAdd  = object.GetComponent (FunAdd);
script.Print();
   }


Ни фига не работает с русскими именами объектов:(
Последний раз редактировалось MediaMen 27 апр 2009, 10:06, всего редактировалось 1 раз.
Аватара пользователя
MediaMen
UNIт
 
Сообщения: 85
Зарегистрирован: 13 апр 2009, 05:49

Re: Вызвать функцию из другого скрипта

Сообщение MediaMen 27 апр 2009, 09:34

Представьте себе модель пассажирского вагона, там есть откидные столики состоящие из двух деталей столешницы и ножки, столик это отдельный анимированный объект, как сделать так что бы по нажатию на столик он откидывался, с одним столиком вопросов нет, но писать отдельные скрипты для каждого столика глупо, как это сделать использую приведенные здесь скрипты?
Аватара пользователя
MediaMen
UNIт
 
Сообщения: 85
Зарегистрирован: 13 апр 2009, 05:49

Re: Вызвать функцию из другого скрипта

Сообщение Neodrop 27 апр 2009, 10:16

На все столики добавить скрипт совсем не глупо. Просто нет смысла добавлять скрипты с покадровыми обработчиками типа Update() и пр.
Но можно добавить скрипт с одной-единственной функцией, из системных Юнити, которые всё равно вызываются на любом объекте при определенных событиях.
К примеру - function OnMouseOver() она вызывается на любом объекте, содержащем renderer, каждый раз, когда мышь находится над ним. Туда и стоит положить обработчик клика.

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

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

Re: Вызвать функцию из другого скрипта

Сообщение MediaMen 27 апр 2009, 10:24

Спасибо за терпение, пошел проходить платформер
Аватара пользователя
MediaMen
UNIт
 
Сообщения: 85
Зарегистрирован: 13 апр 2009, 05:49

Re: Вызвать функцию из другого скрипта

Сообщение MediaMen 27 апр 2009, 11:41

А как определить имя родительского объекта, или его id?
Аватара пользователя
MediaMen
UNIт
 
Сообщения: 85
Зарегистрирован: 13 апр 2009, 05:49

Re: Вызвать функцию из другого скрипта

Сообщение Neodrop 27 апр 2009, 11:46

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

Re: Вызвать функцию из другого скрипта

Сообщение MediaMen 27 апр 2009, 11:55

Не работает:(
Аватара пользователя
MediaMen
UNIт
 
Сообщения: 85
Зарегистрирован: 13 апр 2009, 05:49

Re: Вызвать функцию из другого скрипта

Сообщение Neodrop 27 апр 2009, 11:58

Очепятка вышла.
Код: Выделить всё
transform.root.gameObject.name


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

Re: Вызвать функцию из другого скрипта

Сообщение MediaMen 27 апр 2009, 12:02

Сори, все правильно, это у меня мозг не работает, извините
Аватара пользователя
MediaMen
UNIт
 
Сообщения: 85
Зарегистрирован: 13 апр 2009, 05:49

Re: Вызвать функцию из другого скрипта

Сообщение MediaMen 27 апр 2009, 12:15

Ну вот собственно благодаря нашим добрым и отзывчивым гуру имеем множество работающих столиков и всего два скрипта :D .
Код: Выделить всё
var starter = 0;
function OnMouseDown() {
var object  = transform.root.gameObject;
print(object);
var script : FunAdd  = object.GetComponent (FunAdd);
if (starter == 0)
{
script.Otkr();
starter = 1;
}
else
{
script.Zakr();
starter  = 0;

}
   }

Этот скрипт висит на столешнице, не забываем добавить ей Mesh Collider

Код: Выделить всё
var starter = 0;
function OnMouseDown() {
var object  = transform.root.gameObject;
print(object);
var script : FunAdd  = object.GetComponent (FunAdd);
if (starter == 0)
{
script.Otkr();
starter = 1;
}
else
{
script.Zakr();
starter  = 0;

}
   }

А этот скрипт висит на самом анимированном объекте, тоесть нашем столике, который является родителем для столешницы и ножки
Аватара пользователя
MediaMen
UNIт
 
Сообщения: 85
Зарегистрирован: 13 апр 2009, 05:49

Re: Вызвать функцию из другого скрипта

Сообщение Neodrop 27 апр 2009, 13:14

Только вот эту всю ерунду лучше выполнить один раз, потратив чуть-чуть памяти на переменные.

Код: Выделить всё
private var script : FunAdd;

function Start()
{
   script = transform.root.object.GetComponent (FunAdd);
}


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

След.

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

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

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