Получение ссылку на ГО

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Получение ссылку на ГО

Сообщение Sality 06 дек 2011, 22:11

Всем привет. Вот такой вопрос, можно ли как то получить ссылку на ГО. И соответсвенно к его компонентам. Ну например из скрипта одного ГО, получить управление компонентами другого ГО. ?
Для какой ситуации. например в скрипте камеы я прокладываю луч на плайн, на плайне происходит колизия. определяю координаты колизии луча. и в эту точку мне нужно переместить куб. Мне нужно както из скрипта плайна передать координаты этому кубу. Для этого нужно получить указатель както на этот куб.

Заранее спс.
Аватара пользователя
Sality
Старожил
 
Сообщения: 771
Зарегистрирован: 26 ноя 2011, 15:31
Откуда: Украина

Re: Получение ссылку на ГО

Сообщение Левш@ 06 дек 2011, 22:15

Синтаксис:
Используется javascript
var searchObj = GameObject.Find("Имя обьекта");
searchObj.transform =
searchObj.renderer =
// и т.д.


например в скрипте камеы я прокладываю луч на плайн


Синтаксис:
Используется javascript
var soundExplode : AudioClip;
var range = 1000;

function Update () {          
                var direction = transform.TransformDirection(Vector3.forward);
                var hit : RaycastHit;
    if (Physics.Raycast (transform.position, direction, hit, range))  
                AudioSource.PlayClipAtPoint(soundExplode, hit.point, 1);
}


hit.point = имеет координаты позиции куда попал луч (точка).
Последний раз редактировалось Левш@ 06 дек 2011, 22:37, всего редактировалось 4 раз(а).
_X.cor.R (Prologue)
Аватара пользователя
Левш@
Адепт
 
Сообщения: 4073
Зарегистрирован: 14 окт 2009, 16:34
Откуда: IBERIA
Skype: bars_levsha
  • Сайт

Re: Получение ссылку на ГО

Сообщение Sality 06 дек 2011, 22:20

спс большое =)
Аватара пользователя
Sality
Старожил
 
Сообщения: 771
Зарегистрирован: 26 ноя 2011, 15:31
Откуда: Украина

Re: Получение ссылку на ГО

Сообщение Sality 06 дек 2011, 23:30

var searchObj = GameObject.Find("Plane");

pline - имеет переменную Vector3 Coordinate;
можно ли както обратится к этой переменной? например так
Vector3 p = searchObj.Coordinate;

Или нужно написать фнцию и обратится к ней как к компоненту по средству searchObj.getComponent("name") = return Vector3; ??
Аватара пользователя
Sality
Старожил
 
Сообщения: 771
Зарегистрирован: 26 ноя 2011, 15:31
Откуда: Украина

Re: Получение ссылку на ГО

Сообщение Левш@ 07 дек 2011, 00:29

можно ли както обратится к этой переменной?

Имя скрипта (с большой буквы).имяпеременной(с маленькой)

Vector3 p = searchObj.сoordinate;

не обьявляй переменных с большой буквы.
_X.cor.R (Prologue)
Аватара пользователя
Левш@
Адепт
 
Сообщения: 4073
Зарегистрирован: 14 окт 2009, 16:34
Откуда: IBERIA
Skype: bars_levsha
  • Сайт

Re: Получение ссылку на ГО

Сообщение Sality 07 дек 2011, 01:44

var searchObj = GameObject.Find("Plane");
var Scr = searchObj.GetComponent("Raycast");
Scrj.coordinate;

пишет coordinate нет такого компонента или метода.

как же всетаки обратится к переменной?
Аватара пользователя
Sality
Старожил
 
Сообщения: 771
Зарегистрирован: 26 ноя 2011, 15:31
Откуда: Украина

Re: Получение ссылку на ГО

Сообщение Левш@ 07 дек 2011, 02:07

Блин, запутал ты все.
Что у тебя за coordinate ? Это должна быть имя переменной.
Синтаксис:
Используется javascript
var searchObj = GameObject.Find("Plane"); //тут ты получаешь сам гейм обьект.

если тебе нужен скрипт который висит на нем то:
Синтаксис:
Используется javascript
var searchScript  =  searchObj.GetComponent(тут имя скрипта, с большой буквы, если обращаешься к скрипту C# то имя в кавычках.);
searchScript.имя переменной = ххх;

а можно и сразу:
Синтаксис:
Используется javascript
var searchScript  = GameObject.Find("Plane").GetComponent(имя скрипта);

По идее даже это будет работать:
Синтаксис:
Используется javascript
GameObject.Find("Plane").GetComponent(Имя скрипта).имяПеременной = ххх;

А еще проще обьявить static var и обращаться прямо к Скрипту.переменная не прибегая к поиску обьектов.
_X.cor.R (Prologue)
Аватара пользователя
Левш@
Адепт
 
Сообщения: 4073
Зарегистрирован: 14 окт 2009, 16:34
Откуда: IBERIA
Skype: bars_levsha
  • Сайт

Re: Получение ссылку на ГО

Сообщение Sality 07 дек 2011, 21:56

Что я не так делаю?

Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class Rcst : MonoBehaviour
{
        public Vector3 coordinate;

        // Use this for initialization
        void Start () {
       
        }
       
        // Update is called once per frame
        void Update ()
        {
       
        }
}
 


Синтаксис:
Используется csharp
GameObject searchObj = GameObject.Find("Plane");
         Component Scr = searchObj.GetComponent("Rcst");
            p = Scr.coordinate;
 


Assets/NewBehaviourScript.cs(28,38): error CS1061: Type `UnityEngine.Component' does not contain a definition for `coordinate' and no extension method `coordinate' of type `UnityEngine.Component' could be found (are you missing a using directive or an assembly reference?)

Rcst.cs прицеплен к plain. Ошибка возникает именно при обращении к переменной.
Аватара пользователя
Sality
Старожил
 
Сообщения: 771
Зарегистрирован: 26 ноя 2011, 15:31
Откуда: Украина

Re: Получение ссылку на ГО

Сообщение Rip 07 дек 2011, 22:23

Sality писал(а):Что я не так делаю?

Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class Rcst : MonoBehaviour
{
        public Vector3 coordinate;

        // Use this for initialization
        void Start () {
       
        }
       
        // Update is called once per frame
        void Update ()
        {
       
        }
}
 


Синтаксис:
Используется csharp
GameObject searchObj = GameObject.Find("Plane");
         Component Scr = searchObj.GetComponent("Rcst");
            p = Scr.coordinate;
 



Попробуй
Rcst Scr = searchObj.GetComponent<Rcst>();
или
Rcst Scr = searchObj.GetComponent("Rcst") as Rcst;
Изображение
Реальность существует независимо от вас, до тех пор пока вы с этим согласны.
Изображение
Аватара пользователя
Rip
UNIт
 
Сообщения: 103
Зарегистрирован: 30 янв 2010, 14:11
Откуда: Оренбугская обл. г.Орск
  • ICQ

Re: Получение ссылку на ГО

Сообщение seaman 07 дек 2011, 23:03

Знаете какая главная ошибка начинающих? Они не читают ошибки.
В ошибке четко написано: "`UnityEngine.Component' не содержит определения `coordinate' ". Что вполне естественно. Он его и не содержит - эту переменную ввели Вы. Далее возникает вопрос - зачем Вы используете Component, если Вам нужен не он, а Ваш скрипт? Ну и логичный вывод - или делать как написал Rip:
Rcst Scr = searchObj.GetComponent("Rcst") as Rcst;
или сделать прямое преобразование типов:
Rcst Scr = (Rcst)searchObj.GetComponent("Rcst");
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Получение ссылку на ГО

Сообщение Sality 07 дек 2011, 23:09

В докахже написано что любой скрипт это компонент. Получается тип переменной это и есть название моего скрипта?
Аватара пользователя
Sality
Старожил
 
Сообщения: 771
Зарегистрирован: 26 ноя 2011, 15:31
Откуда: Украина

Re: Получение ссылку на ГО

Сообщение Rip 07 дек 2011, 23:18

Rcst является классом, по сути свой тип переменной.
Изображение
Реальность существует независимо от вас, до тех пор пока вы с этим согласны.
Изображение
Аватара пользователя
Rip
UNIт
 
Сообщения: 103
Зарегистрирован: 30 янв 2010, 14:11
Откуда: Оренбугская обл. г.Орск
  • ICQ

Re: Получение ссылку на ГО

Сообщение Левш@ 07 дек 2011, 23:19

Sality писал(а):В докахже написано что любой скрипт это компонент. Получается тип переменной это и есть название моего скрипта?

Какая тут связь, вообще не улавливаю...
Вода мокрая. потому что пень деревянный...
Скрипт - это компонент, а тип переменной - это тип переменной и одно из другого совершенно не следует... :-w
Каким макаром класс - это тип переменной? :-?

Класс (программирование) — абстрактный тип данных в объектно-ориентированном программировании, задающий общее поведение для группы объектов; модель объекта.
Тип переменной определяет множество значений, которые могут быть ей присвоены и операции, которые могут быть с нею произведены.
(Википедия)
Последний раз редактировалось Левш@ 07 дек 2011, 23:24, всего редактировалось 1 раз.
_X.cor.R (Prologue)
Аватара пользователя
Левш@
Адепт
 
Сообщения: 4073
Зарегистрирован: 14 окт 2009, 16:34
Откуда: IBERIA
Skype: bars_levsha
  • Сайт

Re: Получение ссылку на ГО

Сообщение seaman 07 дек 2011, 23:24

Вам нужно почитать начала объектно-ориентированного программирования. Наследование и т.п. Многие вопросы отпадут.
Скрипт, который наследован от MonoBehaviour наследуется от Component. Соответственно любой такой скрипт - это компонент. Но НЕ наоборот. Соответственно все что есть в Component есть и Вашем скрипте, но НЕ наоборот.

Также Вам надо узнать - что такое класс.
Название скрипта должно совпадать с названием класса. А класс - и есть тип Вашей переменной.
Каким макаром класс - это тип переменной?

А собственно как иначе? Встроенных типов раз, и обчелся. Все остальные типы - определенные Вами классы. Или определенные в Unity классы. Или определенные в .NET классы.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Получение ссылку на ГО

Сообщение Левш@ 07 дек 2011, 23:29

Я дико извиняюсь и привожу определение полностью:
Тип переменной (программирование) определяет множество значений, которые могут быть ей присвоены и операции, которые могут быть с нею произведены. Он либо фиксирован в момент объявления переменной и соответствует одному из типов данных, предоставляемых языком программирования (статическая типизация), либо в каждый момент соответствует типу тех данных, что содержит переменная (динамическая типизация).

Это никак не может быть классом.
Класс (программирование) — абстрактный тип данных в объектно-ориентированном программировании, задающий общее поведение для группы объектов; модель объекта.

Даже если плюнуть на термины, из обычной логики все равно не получаеться, ничего общего.
_X.cor.R (Prologue)
Аватара пользователя
Левш@
Адепт
 
Сообщения: 4073
Зарегистрирован: 14 окт 2009, 16:34
Откуда: IBERIA
Skype: bars_levsha
  • Сайт

След.

Вернуться в Почемучка

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

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