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

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

СообщениеДобавлено: 12 дек 2010, 13:37
bgeyts667
После компиляции скрипта с отрывком:
Синтаксис:
Используется 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();

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

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

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

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

СообщениеДобавлено: 12 дек 2010, 14:45
bgeyts667
getRate нет в классе Component, за который юнити принимает класс Weapon! Меня интересует, как заставить движок возвращать из GetComponent переменную типа Weapon, а не Component. [-(
Код http://pastebin.com/12JCtF2k

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

СообщениеДобавлено: 12 дек 2010, 15:03
alexz
Выбирай:

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

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

СообщениеДобавлено: 12 дек 2010, 15:06
Zaicheg
Оба скрипта вешаем на один ГО.
Первый:
Синтаксис:
Используется 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".

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

СообщениеДобавлено: 12 дек 2010, 15:37
bgeyts667
:-bd Спасибо огромное. Про существование приведения не знал. #-o

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

СообщениеДобавлено: 03 фев 2011, 22:41
Lowfog
Подскажите, как правильно проинициализировать доступ к переменной в файле из другой папки?

Синтаксис:
Используется 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(){
  //код
}

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

СообщениеДобавлено: 03 фев 2011, 23:04
alexz
проинициализировать доступ к переменной в файле из другой папки

В смысле?

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

СообщениеДобавлено: 03 фев 2011, 23:11
Golandez
Не важно где лежат скрипты.Получите через ГО,на котором висит скрипт.
P.S.Если эдитор скриптинг,можно через пространство имен.

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

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

Если не сложно, можете выложить кусок кода про пространство имен и доступ к файлу?

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

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

Совершенное верно.Нельзя использовать эдитор скриптинг в рантайме.Он сугубо только для редактора.Опишите задачу,которую вы пытаетесь решить.

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

СообщениеДобавлено: 05 фев 2011, 14:25
Lowfog
Хочу сделать конструктор уровней.
Редактор в виде приложения PC или WEB.
Когда уровень построен, его можно сохранить как файл.
Также можно файл с уровнем загрузить в конструктор.
Отдельным приложением сделано, чтобы любой желающий мог редактировать уровни.