Четверг, 26 Декабря 2024, 16:37

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

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

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

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

    Сообщение отредактировал QWER56 - Вторник, 26 Июля 2011, 20:54
  • LertmindДата: Пятница, 10 Июня 2016, 23:17 | Сообщение # 7901
    заслуженный участник
    Сейчас нет на сайте
    Цитата Бозингар ()
    Как можно изменить цвет примитивного объекта?
    По умолчанию у них материал, который нельзя изменить, надо создать новый материл в панели Project, настроить и перетащить на объект.
    AOДата: Суббота, 11 Июня 2016, 14:32 | Сообщение # 7902
    был не раз
    Сейчас нет на сайте
    Цитата Lertmind ()
    По умолчанию у них материал, который нельзя изменить, надо создать новый материл в панели Project, настроить и перетащить на объект.

    Можно это как-то через скрипт сделать?
    GameBitДата: Воскресенье, 12 Июня 2016, 09:04 | Сообщение # 7903
    был не раз
    Сейчас нет на сайте
    Собираюсь реализовать внутриигровые покупки в андроиде на Open AB. Вопрос- как получить в коде (желательно на JS) валюту покупки и стоимость, чтобы отображать в разных странах местные валюты( В России - рубли, в США - доллары и тд). Заранее благодарен за ответ или ссылку на тутор
    БозингарДата: Воскресенье, 12 Июня 2016, 23:09 | Сообщение # 7904
    почетный гость
    Сейчас нет на сайте
    Как определить угол вектора движения объекта?
    На каждый конкретный угол движения (90°, 180°, 45° etc) привязано определённое действие. Допустим, анимация. Как узнать, в каком направление движется объект?

    Объект не поворачивает, манипуляции с quaternion не помогут (иначе бы не спрашивал). Просто движется влево\вправо\в угол при помощи rigidbody.



    #Хийвэл бүү ай, айвал бүү хий.
    LertmindДата: Понедельник, 13 Июня 2016, 01:41 | Сообщение # 7905
    заслуженный участник
    Сейчас нет на сайте
    Бозингар, тебе точно надо знать угол? Если управление через Input.GetAxis(), то легко определить одно из 8 направлений.

    Если всё-таки надо угол, то можно вычислить с помощь Atan2:
    Код
    float a = Mathf.Atan2(velocity.z, velocity.x) * Mathf.Rad2Deg;
    // Преобразуем в положительный угол
    if (a < 0f)
        a += 360f;
    // По часовой стрелки
    a = 360f - a;
    // Поворачиваем на 180
    a = Mathf.Repeat(a + 180f, 360f);

    Где velocity скорость объекта (является также направлением) и предполагается, что угол на плоскости XZ, а 0 градусов это вектор Vector3.left. Замечу, что последние два действия не обязательны, так как это только для отсчёта как у тебя на картинке. Другой вариант вычисления через Vector3.Angle, там возвращается всегда положительный минимальный угол, следовательно тоже надо делать проверки для получения угла больше 180.

    Скорость (velocity) можно получить сохраняя предыдующую позицию:
    Код
    using UnityEngine;

    public class MyScript : MonoBehaviour
    {
        Vector3 prevPosition;

        void Start()
        {
            prevPosition = transform.position;
        }
        
        void Update()
        {
            Vector3 velocity = (transform.position - prevPosition) / Time.deltaTime;
            prevPosition = transform.position;
            // Возвращает для 0-180: [0, 180], для 180-360: [-180, 0]
            float a = Mathf.Atan2(velocity.z, velocity.x) * Mathf.Rad2Deg;
            // Преобразуем в положительный угол
            if (a < 0f)
                a += 360f;
            // По часовой стрелки
            a = 360f - a;
            // Поворачиваем на 180
            a = Mathf.Repeat(a + 180f, 360f);
            
            print(a + " " + velocity);
        }
    }

    Деление на Time.deltaTime необязательно, тогда это будет просто направление движения. Ещё у Rigidbody есть свойство velocity, но оно изменяется только при движении с помощью физических сил.

    Чтобы узнать направление, как константу (от 0 до 7), смещаем угол на 360f/8f/2f == 22.5f, делим на 360f/8f == 45f и округляем вниз:
    Код
    int index = (int)(Mathf.Repeat(a + 22.5f, 360f) / 45f);

    Где a - наш угол. Для 10 градусов будет индекс 0, для 40 - 1, для 92 - 2 и так далее.
    БозингарДата: Понедельник, 13 Июня 2016, 10:15 | Сообщение # 7906
    почетный гость
    Сейчас нет на сайте
    Lertmind, благодарю; теперь ясно, в какую сторону копать.

    #Хийвэл бүү ай, айвал бүү хий.

    Сообщение отредактировал Бозингар - Вторник, 14 Июня 2016, 10:32
    GeonicsДата: Четверг, 16 Июня 2016, 20:58 | Сообщение # 7907
    был не раз
    Сейчас нет на сайте
    Всем привет!
    Я не программист, прошу заранее меня простить за невежество.
    Есть идея сделать военную стратегическую игру в 3D. На большой карте с провинциями, с рельефом двигаются юниты (танки, бронетехника, пехота), над рельефом на определённой высоте самолёты и вертолёты, с транспортных самолётов десант высаживается. На морских участках карты перемещаются боевые корабли и подлодки.
    Подойдёт Unity для этого?
    LertmindДата: Четверг, 16 Июня 2016, 21:05 | Сообщение # 7908
    заслуженный участник
    Сейчас нет на сайте
    Geonics, большинство 3D движков подойдёт, Unity в том числе.
    GeonicsДата: Четверг, 16 Июня 2016, 21:24 | Сообщение # 7909
    был не раз
    Сейчас нет на сайте
    Цитата Lertmind ()
    Geonics, большинство 3D движков подойдёт, Unity в том числе.

    Благодарю, буду осваивать.
    LertmindДата: Четверг, 16 Июня 2016, 21:45 | Сообщение # 7910
    заслуженный участник
    Сейчас нет на сайте
    Geonics, к тому же, стратегии обычно не имеют продвинутой графики и, в случае чего, есть возможность портирования на мобильные платформы, а Unity де-факто движок #1 для мобилок.
    БозингарДата: Суббота, 18 Июня 2016, 15:50 | Сообщение # 7911
    почетный гость
    Сейчас нет на сайте
    Создать массив префабов из ресурсов и инстантить их в рандомном порядке - какие есть варианты? Resources.LoadAll использовать?

    Ладно, хрен с ним, разобрался.


    #Хийвэл бүү ай, айвал бүү хий.

    Сообщение отредактировал Бозингар - Суббота, 18 Июня 2016, 16:19
    IAmStupidNoobLOOLДата: Вторник, 21 Июня 2016, 21:44 | Сообщение # 7912
    был не раз
    Сейчас нет на сайте
    Если сделать public Script myScipt;
    и закинуть туда GO со скриптом Script, и обращаться к переменной из этого скрипта (myScript.variable) каждый кадр, это будт == SomeGO.GetComponent<Script>().variable? (так же, каждый кадр)
    Т.е. переменная компонента есть GetComponent для GO на котором висит скрипт и по скорости это не уступает обычной записи GO.GetComponent, или это не так?


    Ваша подпись:
    - Максимум 600 символов
    - BB-коды запрещены


    Сообщение отредактировал IAmStupidNoobLOOL - Вторник, 21 Июня 2016, 21:47
    LertmindДата: Вторник, 21 Июня 2016, 22:15 | Сообщение # 7913
    заслуженный участник
    Сейчас нет на сайте
    IAmStupidNoobLOOL, равнозначно, но GetComponent намного медленнее, чем обращение через переменную myScript. Сохранение ссылки на компонент в переменной называют кэшированием, недавно была статья об этом Особенности кэширования компонентов в Unity3D.

    Сообщение отредактировал Lertmind - Вторник, 21 Июня 2016, 22:16
    IAmStupidNoobLOOLДата: Среда, 22 Июня 2016, 03:06 | Сообщение # 7914
    был не раз
    Сейчас нет на сайте
    Не так выразился, то, что это дно и тоже действия я в курсе, просто в плане производительности разница есть или нет интересовался. Просто скармливаю все же GO... Профайлить пока возможности нет. Но как я понял тут свои тонкости серриализации.
    И еще... Все наверно помнят игру Space Rangers (Космические рейнджеры)... Так вот, как организовать смену систем, посадку на планету, станцию и т.д. как там? В плане архитектуры, т.е. каждая система - отдельная сцена? Или выключать префабы сцен кроме текущей? Так же и с планетами. Если делать отдельные сцены для каждой системы\планеты, возникает геморрой с сохранением кучи полей, начиная от расположения планет до состояния кораблей НПС, к тому же придется хоть как-то просчитывать "жизнь" ботов когда игрок в другой сцене (системе)... А если сделать все это префабами, то, допустим, выключили системы (т.е. планеты, солнце) но корабли все гуляют, воюют, хотя мы их невидим. Как-то неоптимально получается. Короче, хочется и с сохранением не возится, и жизнь ботами обеспечить... (игра не пошаговая) В общем, какой подход по вашему будет оптимальным? Я так-то если что с юнити хорошо знаком, так что с объяснением проблем не возникнет...


    Ваша подпись:
    - Максимум 600 символов
    - BB-коды запрещены


    Сообщение отредактировал IAmStupidNoobLOOL - Среда, 22 Июня 2016, 03:16
    xMoonGuarDxДата: Среда, 22 Июня 2016, 05:48 | Сообщение # 7915
    участник
    Сейчас нет на сайте
    Цитата IAmStupidNoobLOOL ()
    Не так выразился, то, что это дно и тоже действия я в курсе, просто в плане производительности разница есть или нет интересовался. Просто скармливаю все же GO... Профайлить пока возможности нет. Но как я понял тут свои тонкости серриализации.

    В статье, что Lertmind, скинул выше скинул, как раз идет речь о производительности и сравнении методов. Почитайте.
    Очень смутно помню SR.
    Если будете делать каждую систему, как префаб, то тут явно вам поможет такой шаблон, Пул Объектов. Так как наверняка префаб системы будет большим и постоянно вызываться. Только не забывайте при убирании его в пул, обнулять состояние системы и обновлять, когда достаете из него. Жизнью ботов пусть занимается какой-нибудь менеджер ботов, который помечен, как неубиваемый объект при смене сцен (если у вас несколько игровых сцен). Только упростите логику просчетов поведения ботов, когда они не видны игроку.
    LertmindДата: Среда, 22 Июня 2016, 08:08 | Сообщение # 7916
    заслуженный участник
    Сейчас нет на сайте
    IAmStupidNoobLOOL, мои мысли про Космических Рейнджеров: использовать для системы одну сцену и подгружать префабы планет и другие характеристики при переходе в другую систему. Вычисления симуляции AI надо минимизировать и упростить, иначе будет слишком много расчётов, например не хранить позицию в системе и двигать корабль, а иметь среднее время пребывание в системе, чтобы рассчитать когда бот отправится в другую систему. Надо будет размазывать вычисления по времени, будет глупо каждый кадр вычислять характеристики всех ботов, если он не в текущей системе. Главная мысль, как всегда, обмануть игрока, чтобы он поверил в симуляцию.
    VickaДата: Четверг, 23 Июня 2016, 11:00 | Сообщение # 7917
    Another ART
    Сейчас нет на сайте
    блин воткнулось рожками
    мне нужно найти обжект на котором висит скрипт в котором есть всего одна переменная и отдать его имя таргет камеры
    чет не робает

    Код

    public void findTarget()
        {
            targets = GameObject.FindGameObjectsWithTag("hiro");

            foreach (GameObject This in targets) {
                if (GameObject.FindGameObjectWithTag("hiro").GetComponent<ThisActive>().thisActive)
                {
                    targThis = This;

                }
            }
        }


    AndVolkoVДата: Четверг, 23 Июня 2016, 11:36 | Сообщение # 7918
    участник
    Сейчас нет на сайте
    Vicka, Попробуй, переписать так, может получится:
    Код


    foreach (GameObject t in targets) {
                if (t.GetComponent<ThisActive>().thisActive){
                    targThis = t;
                }
            }



    Сообщение отредактировал AndVolkoV - Четверг, 23 Июня 2016, 11:36
    ShortKedrДата: Четверг, 23 Июня 2016, 12:05 | Сообщение # 7919
    Renword Studio
    Сейчас нет на сайте
    Vicka, ошибочка вышла) Попробуй вот так)

    Код
    public void FindTarget() {
        //Тип данных лучше всегда указывать
        GameObject[] targets = GameObject.FindGameObjectsWithTag("hiro");

        foreach (GameObject target in targets) {
            if (target.GetComponent<ThisActive>().thisActive) {
                    targThis = target;

            }
        }
    }




    Сообщение отредактировал ShortKedr - Четверг, 23 Июня 2016, 12:18
    VickaДата: Четверг, 23 Июня 2016, 12:35 | Сообщение # 7920
    Another ART
    Сейчас нет на сайте
    ShortKedr,
    ага разобралась сябки) +++


    Поиск:

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