Воскресенье, 17 Ноября 2024, 13:30

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
Вопрос-[ответ] по Unity
QWER56Дата: Понедельник, 09 Августа 2010, 10:58 | Сообщение # 1
старожил
Сейчас нет на сайте
Вопрос-[Ответ] по Unity3d

  • База скриптов Unity3d
  • Курс Уроков по Unity 3D от Alcatraz

    ConsMark - поисковик по интернет магазинам.

    Сообщение отредактировал QWER56 - Вторник, 26 Июля 2011, 20:54
  • KiraДата: Пятница, 30 Ноября 2012, 20:28 | Сообщение # 3141
    заслуженный участник
    Сейчас нет на сайте
    Есть 2го один дочерний.
    получаю трансформ дочернего.
    tr = GetComponentInChildren<Transform>();
    Так здесь я разобрался

    tr = gameObject.transform.FindChild("AnimatedSprite");

    смещаю, тк при смени анимации позиция го смещается.

    tr.position = new Vector3(-0.22f, 0f, 0f);
    теперь здесь не понятки, я ставлю =, почему тогда го продолжает смещаться как если бы я написал:
    tr.position += new Vector3(-0.22f, 0f, 0f);
    Почему я же корректно прошу поставить в позицию(-0.22f, 0f, 0f) и все.

    Добавлено (30.11.2012, 20:28)
    ---------------------------------------------
    Еще заметил глюк или что то вроде того.

    horDirection = Input.GetAxis("Horizontal");
    if (horDirection == 0f)
    {

    if (anim.GetCurrentClipName() != "Idle_Stay")
    {
    tr.localPosition = new Vector3(-0.1654987f, -0.13286f, 0f);
    if( tr.localPosition == new Vector3(-0.1654987f, -0.13286f, 0f))
    anim.Play("Idle_Stay");

    }
    }
    Debug.Log(horDirection);
    if (horDirection > 0)
    {
    if (anim.isPlaying())
    if (anim.GetCurrentClipName() != "Walk")
    {
    tr.localPosition = new Vector3(-0.235f, -0.13286f, 0f);
    if( tr.localPosition ==new Vector3(-0.235f, -0.13286f, 0f))
    anim.Play("Walk");

    }
    }

    Влюбом случае возникает дерганье, как будто смещение не происходит сразу. Может кто сталкивался? как это вылечить?


    Unity3d разработчик на С#. Лучшее спасибо + в репу.
    "Безумие: делать одно и то же снова и снова, и ждать при этом разных результатов".
    "Человек, который никогда не ошибался никогда не пробовал ничего нового".
    "Если человек может спокойно управлять автомобилем во время поцелуя красивой девушки, значит он уделяет поцелую недостаточно внимания”. Альберт Эйнштейн


    Сообщение отредактировал Kira - Пятница, 30 Ноября 2012, 17:53
    LimonchikДата: Пятница, 30 Ноября 2012, 21:06 | Сообщение # 3142
    частый гость
    Сейчас нет на сайте
    Помогите пожалуйста пытаюсь сделать путь ai. Появилась такая идея сделать плоскость на всю карту и на нее повесить скрипт который бы вырезал бы в места в которых происходит соприкосновения с другими объектами. А потом превращался в "дорожку". По которой может ступать ai. Единственное я не знаю команду которая бы превращала бы плоскость в путь такой как в Navigation, не кто не подскажет?.
    KiraДата: Пятница, 30 Ноября 2012, 23:13 | Сообщение # 3143
    заслуженный участник
    Сейчас нет на сайте
    Limonchik, чего то я вас все с трудом понимаю. Я 4ку даже не смотрел. Пути делаются вейнпоинтами.
    Ты думаешь это так просто? посмотри сколько такая штучка стоит PathEngine


    Unity3d разработчик на С#. Лучшее спасибо + в репу.
    "Безумие: делать одно и то же снова и снова, и ждать при этом разных результатов".
    "Человек, который никогда не ошибался никогда не пробовал ничего нового".
    "Если человек может спокойно управлять автомобилем во время поцелуя красивой девушки, значит он уделяет поцелую недостаточно внимания”. Альберт Эйнштейн
    LimonchikДата: Суббота, 01 Декабря 2012, 11:17 | Сообщение # 3144
    частый гость
    Сейчас нет на сайте
    Подскажите тогда как сделать легче всего сделать так чтобы за мной гонялся монстр обходя все приветствия. Ai у меня есть. А как заставить ходить обходя приветствия я не знаю.
    EchoITДата: Суббота, 01 Декабря 2012, 12:53 | Сообщение # 3145
    старожил
    Сейчас нет на сайте
    Quote
    Подскажите тогда как сделать легче всего сделать так чтобы за мной гонялся монстр обходя все приветствия. Ai у меня есть. А как заставить ходить обходя приветствия я не знаю.

    Кидай луч вперед монстра и проверяй - если есть препятствие, то обходи, если нету, то иди дальше.


    Долгожданный анонсик: State of War
    Knight1032Дата: Суббота, 01 Декабря 2012, 15:16 | Сообщение # 3146
    заслуженный участник
    Сейчас нет на сайте
    Как изменить цвет гуевской текстуры при потребности?

    Да, я программист, дизайнер, сценарист,
    Я сам себе издатель и сам себе игрок...
    EchoITДата: Суббота, 01 Декабря 2012, 15:45 | Сообщение # 3147
    старожил
    Сейчас нет на сайте
    Quote
    Как изменить цвет гуевской текстуры при потребности?

    Если я правильно тебя понял, то
    Code
    guiTexture.color=new Color(0.5f,0.5f,0.5f,0.5f); //стандартный цвет
    guiTexture.color=new Color(1f,0f,0f,0.5f); //красный, к примеру
    guiTexture.color=new Color(1f,0f,1f,0.5f); //смесь красного и синего
    //и другие. Ну, ты понял, я думаю


    Долгожданный анонсик: State of War

    Сообщение отредактировал EchoIT - Суббота, 01 Декабря 2012, 15:46
    KiraДата: Суббота, 01 Декабря 2012, 16:02 | Сообщение # 3148
    заслуженный участник
    Сейчас нет на сайте
    Knight1032, еще можно так Color.red;

    Unity3d разработчик на С#. Лучшее спасибо + в репу.
    "Безумие: делать одно и то же снова и снова, и ждать при этом разных результатов".
    "Человек, который никогда не ошибался никогда не пробовал ничего нового".
    "Если человек может спокойно управлять автомобилем во время поцелуя красивой девушки, значит он уделяет поцелую недостаточно внимания”. Альберт Эйнштейн
    LimonchikДата: Суббота, 01 Декабря 2012, 18:55 | Сообщение # 3149
    частый гость
    Сейчас нет на сайте
    Помогите пожалуйста разобраться http://www.arongranberg.com/unity/a-pathfinding/ это я так понял эта та функция работает на free версии. Она прорисует путь Ai . Подскажите как пользоваться.
    KiraДата: Суббота, 01 Декабря 2012, 19:12 | Сообщение # 3150
    заслуженный участник
    Сейчас нет на сайте
    Limonchik, да, но и про стоит не дорого. Весьма интересно.

    Unity3d разработчик на С#. Лучшее спасибо + в репу.
    "Безумие: делать одно и то же снова и снова, и ждать при этом разных результатов".
    "Человек, который никогда не ошибался никогда не пробовал ничего нового".
    "Если человек может спокойно управлять автомобилем во время поцелуя красивой девушки, значит он уделяет поцелую недостаточно внимания”. Альберт Эйнштейн
    LimonchikДата: Суббота, 01 Декабря 2012, 21:23 | Сообщение # 3151
    частый гость
    Сейчас нет на сайте
    Подскажите что делать если нету Components–>Pathfinding
    KiraДата: Суббота, 01 Декабря 2012, 22:10 | Сообщение # 3152
    заслуженный участник
    Сейчас нет на сайте
    Limonchik, может и не должно быть? ты уверен что должно быть? Попробуй поместить тот скрипт где у тебя компонент, в папку Editor.
    Или на го где должен быть этот компонент, GetComponent<Pathfinding>();


    Unity3d разработчик на С#. Лучшее спасибо + в репу.
    "Безумие: делать одно и то же снова и снова, и ждать при этом разных результатов".
    "Человек, который никогда не ошибался никогда не пробовал ничего нового".
    "Если человек может спокойно управлять автомобилем во время поцелуя красивой девушки, значит он уделяет поцелую недостаточно внимания”. Альберт Эйнштейн
    LimonchikДата: Суббота, 01 Декабря 2012, 22:42 | Сообщение # 3153
    частый гость
    Сейчас нет на сайте
    Все я разобрался спасибо!

    Сообщение отредактировал Limonchik - Суббота, 01 Декабря 2012, 22:43
    Knight1032Дата: Воскресенье, 02 Декабря 2012, 21:25 | Сообщение # 3154
    заслуженный участник
    Сейчас нет на сайте
    Есть огромный 40 на 40 км мир, поделенный на 64 куска(по 5 на 5 соответственно). Возникает несколько вопросов:
    1) Действительно ли фог помогает в оптимизации или ещё больше грузит комп.
    2) Как решить проблему, когда начиная рисовать траву через некоторое время она из некоторых мест пропадает, и там ровные квадраты с прямыми углами получаются.
    3) Как лучше делать террейн? В самой юньке или в самой юньке а потом експортуть в модель, но тогда мультитекстуринг не возможен, как я понимаю.
    4) Какие пути для оптимизации леса и растительности( а то уж слишком трава перегружает компьютер) вы знаете?
    5) Ну и если подгружать территорию по чанкам, то будет ли заметный выйграш в производительности?


    Да, я программист, дизайнер, сценарист,
    Я сам себе издатель и сам себе игрок...
    KiraДата: Воскресенье, 02 Декабря 2012, 21:41 | Сообщение # 3155
    заслуженный участник
    Сейчас нет на сайте
    1) как сделать, обычно фог перекрывает и делает не видимым, следовательно можно обрезать.
    2) Не понятно.
    3)Это зависит от нужд, терейн был придуман для экономии ресурсов. При отдалении уменьшается детализации, а там где камера она увеличивается.
    4) Ну правильно спроектировать, отсечение невидимых объектов.
    5) Да, опять таки зависит от реализации и требования, может случиться так , что это наоборот только понизит ее.

    С играйте в Обливион на разных настройках, и присмотритесь.


    Unity3d разработчик на С#. Лучшее спасибо + в репу.
    "Безумие: делать одно и то же снова и снова, и ждать при этом разных результатов".
    "Человек, который никогда не ошибался никогда не пробовал ничего нового".
    "Если человек может спокойно управлять автомобилем во время поцелуя красивой девушки, значит он уделяет поцелую недостаточно внимания”. Альберт Эйнштейн
    EchoITДата: Понедельник, 03 Декабря 2012, 19:09 | Сообщение # 3156
    старожил
    Сейчас нет на сайте
    Quote
    но тогда мультитекстуринг не возможен, как я понимаю.

    Ты под этим словом понимаешь наложение нескольких текстур? Если да, то возможен, причем удобный, но поддерживает максимум 4 текстуры. Это специальный шейдер, который накладывает текстуры по цвету. Т.е. основную текстуру ты рисуешь хоть в пэинте в палитре RGB(ну и используя только эти три цвета, соответственно+черный), а затем в материале настраиваешь для каждого цвета текстуру, и вместо цветного террейна у тебя получается вполне себе затекстуренный. Если нужно подробней - расскажу.

    P.S.: хотя, наверное, можно сделать и больше цветов, если ещё зарезервировать промежуточные (Желтый, фиолетовый, голубой, да и много их как бы, вся палитра RGB), но тогда будет не очень удобно, и плавный переход из одной текстуры в другую будет всё менее плавным(впрочем, до 10 разных цветов такой проблемы возникать не должно, но работать с большим количеством цветом будет не очень удобно).


    Долгожданный анонсик: State of War

    Сообщение отредактировал EchoIT - Понедельник, 03 Декабря 2012, 19:13
    OmletteДата: Понедельник, 03 Декабря 2012, 21:42 | Сообщение # 3157
    частый гость
    Сейчас нет на сайте
    Всем здрасьте) Прошу объясните мне, как используется GUISkin, его предназначение, а то сколько инфы не перечитал, не понял... Вот почему в данном скрипте:

    (ССЫЛКА НА ВИДЕО СО СКРИПТОМ) ... Вот как здесь ГУИ.скин используется? А еще я сделал вот такую Лэйбл:
    , но меня это не устраевает, т.к. скрипт очень громоздкий и неграмотный:

    как можно его записать по компактнее? Очень прошу ответа на мои идиотские вопросы...


    Я все смогу! Я все сумею! Переживу! Переболею! Перекантуюсь! Перебьюсь! Но своего таки добьюсь! Не упаду! Не утону! Из грязи вырвусь! Я смогу! И вновь улыбка засияет! Я все смогу! Я все сумею! Я не боюсь! Я не жалею!
    KiraДата: Вторник, 04 Декабря 2012, 01:30 | Сообщение # 3158
    заслуженный участник
    Сейчас нет на сайте
    Omlette, вы не написали всего вопроса. Гуи скин, это скин. Как виндовсе так и в программках например winamp.
    Создайте свой скин, и поменяйте там изображения кнопок, баров, меток итп.
    GUI.Box(new Rect(10,10,254,64), " ", GUI.skin.GetStyle("Bar"));
    Использует настройки скина, по имени бар. Можно также создавать костомные скины. Не понимаю чего вы не понимаете?

    по поводу кода, это вот обязательно делать так? Выводить кучу переменных?
    Во первых раздели все по функциям. Например:
    Void PrintString()
    {
    что то делаем, например рисуем все гуишки.
    }

    Если тебе надо распечатать строка за строкой вот пример кода, который можно модифицировать.
    Code

    using UnityEngine;
    using System.Collections;
    using System.Collections.Generic;

    public class NextStringer
    {
          Rect    nxRect;
          List<string> str = new List<string>();
          float y;

        //  GUISkin skin;
          static float nextSting;
        /* public NextStringer(Rect rect,GUISkin skin)
          {
              nxRect = rect;
              this.skin = skin;
              nextSting = 0f;
          }*/
         public NextStringer(Rect rect)
         {

             nxRect = rect;
             y = nxRect.y;
           }
         public void AddString(string str)
         {
             this.str.Add(str);
         }
         public void Print()
         {
             string[] str = this.str.ToArray();
              
             PrintString(str);
         }
          void PrintString(string[] str)
          {
              nxRect.y = y;
              for (int i = 0; i < str.Length; i++)
              {
                  GUI.Label(nxRect, str[i]);
                  nxRect.y += nxRect.height;
              }
          }
    }


    вот пример использования:
    Code


        NextStringer nx;
       void Start () {

           nx   = new NextStringer(new Rect(0, 0, 100, 20));
           nx.AddString("dfsfdsfsdf");
           nx.AddString("ffffff");

       }

          void OnGUI()
          {

              nx.Print();

          }

    Копипастить окуратно, здесь нету класса .

    Добавлено (04.12.2012, 00:03)
    ---------------------------------------------
    nx = new NextStringer(new Rect(0, 0, 100, 20)); размер строки, смещение будет на height т.е 20.
    nx.AddString("dfsfdsfsdf"); добавление строки, можно добавить много строк.
    nx.Print(); нарисует сразу все строки подряд.

    Добавлено (04.12.2012, 01:30)
    ---------------------------------------------
    Omlette, все статы тоже вынести в отдельный класс.

    public class Char
    {
    string name;
    float char_level;
    float char_armor ;
    float char_hp;
    float char_mana ;
    string char_damage ;
    float char_agility ;
    float char_exp ;
    public Char(string name, string class)
    {
    this.name=name;
    this.class=class;
    Создается новый персонаж. По нику классу, может еще что то.
    Дальше заполняется данными по умолчанию.
    Это лвл=0, деньги тоже 0, Урон обычный без доспехов. Итп. голый новичок.

    }
    public void SetUp() или LoadData()
    {
    тем или иным способом заполняем класс данными.
    Например считываем с файла. Или через диалоговое окно. Может даже с бд.
    }
    public void SaveData()
    {
    Сохраняем куда нибудь.
    }

    }
    Все остальное добавляется уже специальными Интерфейсами. Например:
    NewLvL(); AddExp(int exp);
    Максимально отделяем данные от реализации.

    Про вывод информации:
    public class Stats
    {
    Char char;
    public Stats(string name)
    {
    char=GetChar(name);
    PrintStats();
    }
    void PrintStats()
    {
    Label(pos,char.name);
    Label(pos,char.lvl);
    Думаю суть понятна.
    }
    }


    Unity3d разработчик на С#. Лучшее спасибо + в репу.
    "Безумие: делать одно и то же снова и снова, и ждать при этом разных результатов".
    "Человек, который никогда не ошибался никогда не пробовал ничего нового".
    "Если человек может спокойно управлять автомобилем во время поцелуя красивой девушки, значит он уделяет поцелую недостаточно внимания”. Альберт Эйнштейн


    Сообщение отредактировал Kira - Вторник, 04 Декабря 2012, 01:35
    OmletteДата: Вторник, 04 Декабря 2012, 11:00 | Сообщение # 3159
    частый гость
    Сейчас нет на сайте
    Kira, огромнейшее спасибо тебе! Сейчас буду разбирать скрипты...
    Я так понял, ГУИ скин это как CSS?

    Да вот пипец, почему я не могу понять эту чепуху... Пытаюсь в скрите bar_data, сделать скин, который в дальнейшем будет использоваться в скрипте bar.
    Пишу скин, например:
    Code
    void OnGUI ()
       {
        GUI.skin = skin_style_1;
        GUIStyle.none.normal.textColor = Color.green;   
        skin_style_1.box.fontSize =19;
        GUI.skin.box.normal.textColor = Color.blue;
       }

    ...и вызываю:
    Code
    GUI.Box("qehqwehq", GUI.skin.GetStyle("skin_style_1"));    

    Блин, почему я не могу такую фигню понять..? angry

    А хотя нет, уже прошарил, вот только если скин в другом скрипте, нужно getComonent юзать?


    Я все смогу! Я все сумею! Переживу! Переболею! Перекантуюсь! Перебьюсь! Но своего таки добьюсь! Не упаду! Не утону! Из грязи вырвусь! Я смогу! И вновь улыбка засияет! Я все смогу! Я все сумею! Я не боюсь! Я не жалею!

    Сообщение отредактировал Omlette - Вторник, 04 Декабря 2012, 14:12
    KiraДата: Вторник, 04 Декабря 2012, 14:30 | Сообщение # 3160
    заслуженный участник
    Сейчас нет на сайте
    Omlette, Во первых ужас, во 2х что ты хочешь сделать?
    GUI.skin = skin_style_1; сначала ты создаешь ссылку на готовый скин. GUI.skin - это скин по умолчанию который будет на весь гуй. И не обязательно вызывать его, он и так сработает
    GUI.Box("qehqwehq"); то есть достаточно будет этого.
    GUIStyle.none.normal.textColor = Color.green;// теперь ты делаешь какой то ужас. Тебя не настораживает none? У тебя нету экземпляра стиля.
    Вообще сделай так:

    public GUIStyle box; // тогда в инспекторе у тебя появятся настройки стилей.
    открой вкладку бокс и настрой как надо.

    GUI.Box(new Rect(0, 0, 100, 100),"box style",box);

    Если на одном скрипте нужно еще настройки лейбола, то создай еще:
    public GUIStyle label;
    GUIStyle - это часть скина, то есть конкретно 1го элемента. И поэтому не нужно писать GetStyle

    Добавлено (04.12.2012, 14:30)
    ---------------------------------------------

    Quote (Kira)
    void OnGUI ()
       {
        GUI.skin = skin_style_1;
        GUIStyle.none.normal.textColor = Color.green;   
        skin_style_1.box.fontSize =19;
        GUI.skin.box.normal.textColor = Color.blue;
       }

    ...и вызываю:
    Code
    GUI.Box("qehqwehq", GUI.skin.GetStyle("skin_style_1"));  

    Quote (Omlette)
    void OnGUI ()
       {
        GUI.skin = skin_style_1;
        GUIStyle.none.normal.textColor = Color.green;   
        skin_style_1.box.fontSize =19;
        GUI.skin.box.normal.textColor = Color.blue;
       }

    ...и вызываю:
    Code
    GUI.Box("qehqwehq", GUI.skin.GetStyle("skin_style_1"));  

    не заметил:
    еще раз достаточно было бы так:

    void OnGUI()
    {
    GUI.Box(rect,"qehqwehq",skin_style_1);
    }


    Unity3d разработчик на С#. Лучшее спасибо + в репу.
    "Безумие: делать одно и то же снова и снова, и ждать при этом разных результатов".
    "Человек, который никогда не ошибался никогда не пробовал ничего нового".
    "Если человек может спокойно управлять автомобилем во время поцелуя красивой девушки, значит он уделяет поцелую недостаточно внимания”. Альберт Эйнштейн
    Поиск:

    Все права сохранены. GcUp.ru © 2008-2024 Рейтинг