Значения переменных по умолчанию (Решено)

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

Значения переменных по умолчанию (Решено)

Сообщение Shi 05 окт 2012, 13:27

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

public class BlablaBli : MonoBehaviour
{
    public bool _bla = false;
    public float _blaBlu = 45.6f;
}
 

в момент "перетаскивания" на объект данного скрипта, значения автоматически выставляются на указанные.

Подскажите, как мне указать таким же образом переменные типа Transform или GameObject?
Обычное
Синтаксис:
Используется csharp
public GameObject _PamParam=GameObject.Find("BlaBla") as GameObject;
 

не срабатывает.
Последний раз редактировалось Shi 05 окт 2012, 18:30, всего редактировалось 1 раз.
Аватара пользователя
Shi
UNITрон
 
Сообщения: 211
Зарегистрирован: 30 ноя 2010, 14:58
Откуда: Санкт-Петербург

Re: Значения переменных по умолчанию

Сообщение trololoid 05 окт 2012, 13:33

Для них в окне инспектора скрипта есть место, просто перетаскиваешь.(По крайней мере это работает с Texture2D)
Аватара пользователя
trololoid
Старожил
 
Сообщения: 712
Зарегистрирован: 15 сен 2011, 19:18
Откуда: Туапсе, Краснодарский край, Россия

Re: Значения переменных по умолчанию

Сообщение Good1101 05 окт 2012, 13:35

поиск можно в старте производить
Как тут стрелять?
Аватара пользователя
Good1101
Адепт
 
Сообщения: 1100
Зарегистрирован: 17 ноя 2011, 14:07
  • ICQ

Re: Значения переменных по умолчанию

Сообщение Shi 05 окт 2012, 13:38

Good1101 писал(а):поиск можно в старте производить

И в Awake, и т.д. Но интересует именно выставление значения в момент присвоения скрипта в Эдиторе.
Аватара пользователя
Shi
UNITрон
 
Сообщения: 211
Зарегистрирован: 30 ноя 2010, 14:58
Откуда: Санкт-Петербург

Re: Значения переменных по умолчанию

Сообщение trololoid 05 окт 2012, 13:42

Изображение
Аватара пользователя
trololoid
Старожил
 
Сообщения: 712
Зарегистрирован: 15 сен 2011, 19:18
Откуда: Туапсе, Краснодарский край, Россия

Re: Значения переменных по умолчанию

Сообщение Shi 05 окт 2012, 13:49

trololoid писал(а):Изображение

Пожалуйста, перед тем как пытаться отвечать, прочитайте внимательно тему и вопрос.
Аватара пользователя
Shi
UNITрон
 
Сообщения: 211
Зарегистрирован: 30 ноя 2010, 14:58
Откуда: Санкт-Петербург

Re: Значения переменных по умолчанию

Сообщение trololoid 05 окт 2012, 14:02

Эффект будет такой же.
Аватара пользователя
trololoid
Старожил
 
Сообщения: 712
Зарегистрирован: 15 сен 2011, 19:18
Откуда: Туапсе, Краснодарский край, Россия

Re: Значения переменных по умолчанию

Сообщение Shi 05 окт 2012, 14:07

trololoid писал(а):Эффект будет такой же.

При чем тут эффект? Мне необходимо автомати.... гмм... прочитайте, пожалуйста, первое сообщение ветки.
Аватара пользователя
Shi
UNITрон
 
Сообщения: 211
Зарегистрирован: 30 ноя 2010, 14:58
Откуда: Санкт-Петербург

Re: Значения переменных по умолчанию

Сообщение waruiyume 05 окт 2012, 14:51

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

public class Test : MonoBehaviour
{
    public GameObject foo;

#if UNITY_EDITOR
    public Test()
    {
        foo = (GameObject)Resources.LoadAssetAtPath("Assets/TestPrefab.prefab", typeof(GameObject));
    }
#endif
}

 

Оно?
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Значения переменных по умолчанию

Сообщение Good1101 05 окт 2012, 15:39

transform1.png
Вот так еще если добавить префаб в скрипт то при перетаскивании скрипта на го поля трансформов и тп будут заполнены.
У вас нет доступа для просмотра вложений в этом сообщении.
Как тут стрелять?
Аватара пользователя
Good1101
Адепт
 
Сообщения: 1100
Зарегистрирован: 17 ноя 2011, 14:07
  • ICQ

Re: Значения переменных по умолчанию

Сообщение Shi 05 окт 2012, 15:46

waruiyume писал(а):
Синтаксис:
Используется csharp
using UnityEngine;

public class Test : MonoBehaviour
{
    public GameObject foo;

#if UNITY_EDITOR
    public Test()
    {
        foo = (GameObject)Resources.LoadAssetAtPath("Assets/TestPrefab.prefab", typeof(GameObject));
    }
#endif
}

 

Оно?

Теоретически -да, практически не заработало.

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

public class BloBloBla : MonoBehaviour {
    public GameObject foo;

    #if UNITY_EDITOR
    void Start()
    {
        foo = GameObject.Find("SomeBla") as GameObject;
    }
#endif

}
Последний раз редактировалось Shi 05 окт 2012, 15:49, всего редактировалось 1 раз.
Аватара пользователя
Shi
UNITрон
 
Сообщения: 211
Зарегистрирован: 30 ноя 2010, 14:58
Откуда: Санкт-Петербург

Re: Значения переменных по умолчанию

Сообщение Shi 05 окт 2012, 15:48

Good1101 писал(а):
transform1.png
Вот так еще если добавить префаб в скрипт то при перетаскивании скрипта на го поля трансформов и тп будут заполнены.

Не знал о таком, спасибо большое. Но к сожалению это не то, что нужно.
Аватара пользователя
Shi
UNITрон
 
Сообщения: 211
Зарегистрирован: 30 ноя 2010, 14:58
Откуда: Санкт-Петербург

Re: Значения переменных по умолчанию

Сообщение Nicloay 05 окт 2012, 16:46

У меня была похожая проблема, я ее решил следующим образом
есть такая чтука как custom editor, может показаться что это что то сложное но на самом деле, сложно написать только 1й, остальные пойдут как по маслу
Находится они должны все в папке Assets/Editor
Изображение

GameConfigInspector, это мой кастомный инспектор в котором есть кнопка PopulateDefaultValues. и все gameObjects к которому приатачен скрипт LevelBuilderConfig(его можно видеть выше объявления класса) будут использовать этот инспектор

Вот сам код

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


[CustomEditor(typeof(LevelBuilderConfig))]
public class GameConfigInspector : Editor {

         public override void OnInspectorGUI(){
               
                base.OnInspectorGUI(); 
                if (GUILayout.Button("Populate Default values"))
                    populateDefaultValues();
               
               
        }
       
        private void populateDefaultValues(){
                LayerConfig[] lc=new LayerConfig[]{
                        new LayerConfig(10,20,1,1),
                        new LayerConfig(20,60,1,2),
                        new LayerConfig(40,120,1,5),
                        new LayerConfig(10,70,2,6),
                        new LayerConfig(10,110,3,10),
                        new LayerConfig(10,160,8,20),
                };
                LevelBuilderConfig.instance.layerConfig=lc;
               
               
               
                Object[] go=Resources.LoadAll("Materials/PrefabUnlitColors");          
                Material[] mat=new Material[go.Length];
                for (int i=0;i<go.Length;i++){
                        mat[i]=(Material)go[i];
                }
               
                LevelBuilderConfig.instance.materials=mat;
        }
}
 


Если почитать, то можно увидеть что 1-е я заполняю массив конфигов уровня (LayerConfig) (это мой класс)
2е. у меня в одной папке лежат 5 матерьялов, и я их сохраняю в массив LevelBuilderConfig.instance.materials, чтоб потом через random в применять разные матерьялы к одинаковым объектам. (очевидно, что для поддержки это удобнее, сделал новый матерьял, кликнул кнопку и не надо руками ничего никуда перетаскивать)

Так же можно запихнуть pupulateDefaultValues() в Start() - но тут получается не совсем явно, потому как иногда я все же конфиги правлю в инспекторе, и не хочется чтоб они перетирались по хз чему.


а.. ну и в инспекторе, это выглядит вот так вот
Изображение
Как раз там все параметры заполнились по кнопке
If you wish to make an apple pie from scratch, you must first invent the universe.(Carl Sagan, Cosmos)
| My Asset Store | coloring book | github | _wiki.unity3d.com | twitter | linkedin |
Аватара пользователя
Nicloay
Адепт
 
Сообщения: 1288
Зарегистрирован: 31 май 2012, 09:27
Откуда: Альпс
  • Сайт

Re: Значения переменных по умолчанию

Сообщение Shi 05 окт 2012, 18:30

Nicloay писал(а):У меня была похожая проблема, я ее решил следующим образом
есть такая чтука как custom editor, может показаться что это что то сложное но на самом деле, сложно написать только 1й, остальные пойдут как по маслу
Находится они должны все в папке Assets/Editor
Изображение

GameConfigInspector, это мой кастомный инспектор в котором есть кнопка PopulateDefaultValues. и все gameObjects к которому приатачен скрипт LevelBuilderConfig(его можно видеть выше объявления класса) будут использовать этот инспектор

Вот сам код

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


[CustomEditor(typeof(LevelBuilderConfig))]
public class GameConfigInspector : Editor {

         public override void OnInspectorGUI(){
               
                base.OnInspectorGUI(); 
                if (GUILayout.Button("Populate Default values"))
                    populateDefaultValues();
               
               
        }
       
        private void populateDefaultValues(){
                LayerConfig[] lc=new LayerConfig[]{
                        new LayerConfig(10,20,1,1),
                        new LayerConfig(20,60,1,2),
                        new LayerConfig(40,120,1,5),
                        new LayerConfig(10,70,2,6),
                        new LayerConfig(10,110,3,10),
                        new LayerConfig(10,160,8,20),
                };
                LevelBuilderConfig.instance.layerConfig=lc;
               
               
               
                Object[] go=Resources.LoadAll("Materials/PrefabUnlitColors");          
                Material[] mat=new Material[go.Length];
                for (int i=0;i<go.Length;i++){
                        mat[i]=(Material)go[i];
                }
               
                LevelBuilderConfig.instance.materials=mat;
        }
}
 


Если почитать, то можно увидеть что 1-е я заполняю массив конфигов уровня (LayerConfig) (это мой класс)
2е. у меня в одной папке лежат 5 матерьялов, и я их сохраняю в массив LevelBuilderConfig.instance.materials, чтоб потом через random в применять разные матерьялы к одинаковым объектам. (очевидно, что для поддержки это удобнее, сделал новый матерьял, кликнул кнопку и не надо руками ничего никуда перетаскивать)

Так же можно запихнуть pupulateDefaultValues() в Start() - но тут получается не совсем явно, потому как иногда я все же конфиги правлю в инспекторе, и не хочется чтоб они перетирались по хз чему.


а.. ну и в инспекторе, это выглядит вот так вот
Изображение
Как раз там все параметры заполнились по кнопке


Спасибо огромное!
Аватара пользователя
Shi
UNITрон
 
Сообщения: 211
Зарегистрирован: 30 ноя 2010, 14:58
Откуда: Санкт-Петербург

Re: Значения переменных по умолчанию (Решено)

Сообщение Shi 24 окт 2012, 11:25

Нашел более простой для меня вариант.
Синтаксис:
Используется csharp
void Reset()
{
}
 
Аватара пользователя
Shi
UNITрон
 
Сообщения: 211
Зарегистрирован: 30 ноя 2010, 14:58
Откуда: Санкт-Петербург


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

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

Сейчас этот форум просматривают: Yandex [Bot] и гости: 22