Страница 1 из 2

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

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

Заранее спс.

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 = имеет координаты позиции куда попал луч (точка).

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

СообщениеДобавлено: 06 дек 2011, 22:20
Sality
спс большое =)

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

СообщениеДобавлено: 06 дек 2011, 23:30
Sality
var searchObj = GameObject.Find("Plane");

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

Или нужно написать фнцию и обратится к ней как к компоненту по средству searchObj.getComponent("name") = return Vector3; ??

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

СообщениеДобавлено: 07 дек 2011, 00:29
Левш@
можно ли както обратится к этой переменной?

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

Vector3 p = searchObj.сoordinate;

не обьявляй переменных с большой буквы.

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

СообщениеДобавлено: 07 дек 2011, 01:44
Sality
var searchObj = GameObject.Find("Plane");
var Scr = searchObj.GetComponent("Raycast");
Scrj.coordinate;

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

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

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 и обращаться прямо к Скрипту.переменная не прибегая к поиску обьектов.

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

СообщениеДобавлено: 07 дек 2011, 21:56
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;
 


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. Ошибка возникает именно при обращении к переменной.

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

СообщениеДобавлено: 07 дек 2011, 22:23
Rip
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;

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

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

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

СообщениеДобавлено: 07 дек 2011, 23:09
Sality
В докахже написано что любой скрипт это компонент. Получается тип переменной это и есть название моего скрипта?

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

СообщениеДобавлено: 07 дек 2011, 23:18
Rip
Rcst является классом, по сути свой тип переменной.

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

СообщениеДобавлено: 07 дек 2011, 23:19
Левш@
Sality писал(а):В докахже написано что любой скрипт это компонент. Получается тип переменной это и есть название моего скрипта?

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

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

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

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

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

А собственно как иначе? Встроенных типов раз, и обчелся. Все остальные типы - определенные Вами классы. Или определенные в Unity классы. Или определенные в .NET классы.

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

СообщениеДобавлено: 07 дек 2011, 23:29
Левш@
Я дико извиняюсь и привожу определение полностью:
Тип переменной (программирование) определяет множество значений, которые могут быть ей присвоены и операции, которые могут быть с нею произведены. Он либо фиксирован в момент объявления переменной и соответствует одному из типов данных, предоставляемых языком программирования (статическая типизация), либо в каждый момент соответствует типу тех данных, что содержит переменная (динамическая типизация).

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

Даже если плюнуть на термины, из обычной логики все равно не получаеться, ничего общего.