Доступ к переменной одного скрипта из другого. (C#)

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

Доступ к переменной одного скрипта из другого. (C#)

Сообщение bgeyts667 12 дек 2010, 13:37

После компиляции скрипта с отрывком:
Синтаксис:
Используется csharp
rate = weapons[Mode].gameObject.GetComponent("Weapon").getRate();

Юнити выдает следующую ошибку в этой строчке:
Скрытый текст:
error CS1061: Type `UnityEngine.Component' does not contain a definition for `getRate' and no extension method `getRate' of type `UnityEngine.Component' could be found (are you missing a using directive or an assembly reference?)

Эти варианты выдают тоже самое:
Синтаксис:
Используется csharp
rate = weapons[Mode].gameObject.GetComponent("Weapon").rate;
rate = weapons[Mode].GetComponent("Weapon").rate;
rate = weapons[Mode].GetComponent("Weapon").getRate();
_bgeyts667@gmail.com
Аватара пользователя
bgeyts667
UNITрон
 
Сообщения: 175
Зарегистрирован: 25 авг 2010, 08:30
  • ICQ

Re: Доступ к переменной одного скрипта из другого. (C#)

Сообщение sp00n 12 дек 2010, 14:00

Если weapons[] - это масив ел-тов типa Weapon, тогда делай приблизительно так:
Синтаксис:
Используется csharp
Weapon curWeapon = weapons[Mode];
rate = curWeapon.getRate();

если же это что-то другое, в котором есть компонент Weapon, тогда где-то так:
Синтаксис:
Используется csharp
Weapon curWeapon = weapons[Mode].gameObject.GetComponent("Weapon");
rate = curWeapon.getRate();
Ты молод, креативен, талантлив?
Амбициозен, уверен в себе, полон свежих идей?
А делать хоть что-нибудь умеешь?!
sp00n
UNITрон
 
Сообщения: 254
Зарегистрирован: 27 фев 2010, 20:43

Re: Доступ к переменной одного скрипта из другого. (C#)

Сообщение bgeyts667 12 дек 2010, 14:45

getRate нет в классе Component, за который юнити принимает класс Weapon! Меня интересует, как заставить движок возвращать из GetComponent переменную типа Weapon, а не Component. [-(
Код http://pastebin.com/12JCtF2k
_bgeyts667@gmail.com
Аватара пользователя
bgeyts667
UNITрон
 
Сообщения: 175
Зарегистрирован: 25 авг 2010, 08:30
  • ICQ

Re: Доступ к переменной одного скрипта из другого. (C#)

Сообщение alexz 12 дек 2010, 15:03

Выбирай:

Weapon weapon = gameObject.GetComponent<Weapon>();
Weapon weapon = gameObject.GetComponent("Weapon") as Weapon;
Weapon weapon = (Weapon) gameObject.GetComponent("Weapon");

То что тебе нужно, называется «приведение или преобразование типов» в C#.
http://msdn.microsoft.com/ru-ru/library/ms173105(v=VS.90).aspx
http://msdn.microsoft.com/ru-ru/library/cscsdfbt(v=VS.90).aspx
http://msdn.microsoft.com/ru-ru/library/scekt9xw(v=VS.90).aspx
Последний раз редактировалось alexz 12 дек 2010, 15:15, всего редактировалось 3 раз(а).
alexz
UNITрон
 
Сообщения: 270
Зарегистрирован: 16 ноя 2010, 23:37

Re: Доступ к переменной одного скрипта из другого. (C#)

Сообщение Zaicheg 12 дек 2010, 15:06

Оба скрипта вешаем на один ГО.
Первый:
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class Weapon : MonoBehaviour
{
    public float rate = 5f;

    public float GetRate()
    {
        return rate;
    }
}
 

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

public class WeaponController : MonoBehaviour
{
    void Awake()
    {
        float rate = GetComponent<Weapon>().rate;
        Debug.Log(rate);
        rate = 0f;
        rate = GetComponent<Weapon>().GetRate();
        Debug.Log(rate);
    }
}
 

В консоли будет два сообщения: "5" и "5".
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Доступ к переменной одного скрипта из другого. (C#)

Сообщение bgeyts667 12 дек 2010, 15:37

:-bd Спасибо огромное. Про существование приведения не знал. #-o
_bgeyts667@gmail.com
Аватара пользователя
bgeyts667
UNITрон
 
Сообщения: 175
Зарегистрирован: 25 авг 2010, 08:30
  • ICQ

Re: Доступ к переменной одного скрипта из другого. (C#)

Сообщение Lowfog 03 фев 2011, 22:41

Подскажите, как правильно проинициализировать доступ к переменной в файле из другой папки?

Синтаксис:
Используется csharp
//loadSave.cs
void Start(){
        Editor1 editor=gameObject.GetComponent<Editor1>;
}
void Update(){
        if(fMenu==true){
                fMenu=false;
                editor.MenuLoad();
       }
}


Синтаксис:
Используется csharp
//файл2 Editor/Editor1.cs
void MenuLoad(){
  //код
}
Lowfog
UNIт
 
Сообщения: 63
Зарегистрирован: 26 апр 2010, 08:18

Re: Доступ к переменной одного скрипта из другого. (C#)

Сообщение alexz 03 фев 2011, 23:04

проинициализировать доступ к переменной в файле из другой папки

В смысле?
alexz
UNITрон
 
Сообщения: 270
Зарегистрирован: 16 ноя 2010, 23:37

Re: Доступ к переменной одного скрипта из другого. (C#)

Сообщение Golandez 03 фев 2011, 23:11

Не важно где лежат скрипты.Получите через ГО,на котором висит скрипт.
P.S.Если эдитор скриптинг,можно через пространство имен.
Ты нужен только тогда,когда нужен.(С)
Сказать спасибо
Аватара пользователя
Golandez
Пилигрим
 
Сообщения: 1637
Зарегистрирован: 06 авг 2009, 13:55
Откуда: Харьков
Skype: lestardigital

Re: Доступ к переменной одного скрипта из другого. (C#)

Сообщение Lowfog 05 фев 2011, 01:43

Пытаюсь прицепить файл Editor/Editor1.cs к ГО, но Юнити пишет ошибку: "нельзя добавлять файлы к ГО из папки Editor"
P.S.Если эдитор скриптинг,можно через пространство имен.

Если не сложно, можете выложить кусок кода про пространство имен и доступ к файлу?
Lowfog
UNIт
 
Сообщения: 63
Зарегистрирован: 26 апр 2010, 08:18

Re: Доступ к переменной одного скрипта из другого. (C#)

Сообщение Golandez 05 фев 2011, 04:02

Lowfog писал(а):Пытаюсь прицепить файл Editor/Editor1.cs к ГО, но Юнити пишет ошибку: "нельзя добавлять файлы к ГО из папки Editor"

Совершенное верно.Нельзя использовать эдитор скриптинг в рантайме.Он сугубо только для редактора.Опишите задачу,которую вы пытаетесь решить.
Ты нужен только тогда,когда нужен.(С)
Сказать спасибо
Аватара пользователя
Golandez
Пилигрим
 
Сообщения: 1637
Зарегистрирован: 06 авг 2009, 13:55
Откуда: Харьков
Skype: lestardigital

Re: Доступ к переменной одного скрипта из другого. (C#)

Сообщение Lowfog 05 фев 2011, 14:25

Хочу сделать конструктор уровней.
Редактор в виде приложения PC или WEB.
Когда уровень построен, его можно сохранить как файл.
Также можно файл с уровнем загрузить в конструктор.
Отдельным приложением сделано, чтобы любой желающий мог редактировать уровни.
Lowfog
UNIт
 
Сообщения: 63
Зарегистрирован: 26 апр 2010, 08:18


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

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

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