Вторник, 26 Ноября 2024, 04:54

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Результаты поиска
Kot-MatroskinДата: Понедельник, 24 Июля 2017, 22:33 | Сообщение # 1 | Тема: Детская коляска
был не раз
Сейчас нет на сайте
Точно!! И сравнений меньше
up
Kot-MatroskinДата: Пятница, 21 Июля 2017, 09:39 | Сообщение # 2 | Тема: Детская коляска
был не раз
Сейчас нет на сайте
Нет, не в тему, там два риджитбади объекта связываются посредством шарнирного соединения, и к свободному вращению тела в падении не имеют отношения. Ну я уже писал (очень давно)
Есть такая игрушка неваляшка мне надо почти такое.

Добавлено (10 июля 2017, 13:55)
---------------------------------------------
ПС. Простой физикой не выйдет однозначно, надо скриптами контролировать

Добавлено (10 июля 2017, 16:18)
---------------------------------------------
Сколько не пытался придумать, дальше этого не пошло

Код
Rigidbody rb;
    public Transform _sample; // Образец для подражания
    public Transform _baseOfColumn; // Пустышка в основании столбика с риджит бади
    public float _angle; // Угол между образцом и столбиком
    // Use this for initialization
    void Start()
    {
        rb = _baseOfColumn.GetComponent<Rigidbody>     ( );
    }

    // Update is called once per frame
    void FixedUpdate()
    {
        Quaternion _base = _baseOfColumn.rotation;
        Quaternion _smpl = _sample.rotation;
        _angle = Quaternion.Angle(_base, _smpl);
        if (_angle > 40)
        {
            // Этот вариант ведёт себя очень странно
            transform.rotation = Quaternion.Slerp(_base, _smpl, 0.5f);

            // В этом прыгает всё время хотя и не падает
            _baseOfColumn.rotation = Quaternion.Slerp(_base, _smpl, 0.5f);

            // И в этом тоже прыгает всё время и тоже не падает
            rb.rotation = Quaternion.LerpUnclamped(_base, _smpl, 1f);

            // И в этом тоже прыгает всё время и тоже не падает
            rb.MoveRotation(Quaternion.LerpUnclamped(_base, _smpl, 1f));
            //

        }

    }

Добавлено (21 июля 2017, 09:39)
---------------------------------------------
Всем спасибо за участие, пришлось самому помудрить и почитать, и вот что в итоге получилось, если кому будет интересно вот видео
Видео
а вот и сам код

Код
    Transform TransformTestCube;
    float rotateAxisZ;
    float rotateAxisX;
    public Text infoText;
    string str = "";
    public Transform AxisOfRotation;
    public float speedR = 10f;
    public bool stabilizationIsEnabled;
    public float limitAngle = 30f;
    private Vector3 eulerAng;

    // Use this for initialization
    void Start()
    {
        TransformTestCube = transform;
    }

    // Update is called once per frame
    void FixedUpdate()
    {
        if (Input.GetKeyUp(KeyCode.C))// Включение / выключение стабилизатора
            stabilizationIsEnabled = !stabilizationIsEnabled;
        // Вывод данных о наклоне на дисплей
        str = "Поворот по оси Z: ";
  // Получаем величину наклона объекта по оси Z
        rotateAxisZ = TransformTestCube.eulerAngles.z;
        str += rotateAxisZ.ToString();
  // Получаем величину наклона объекта по оси X
        rotateAxisX = TransformTestCube.eulerAngles.x;
        str += "\n" + "Поворот по оси X: " + rotateAxisX.ToString();
        infoText.text = str;
        // Собственно сам стабилизатор
        if (stabilizationIsEnabled)
        {
            eulerAng = TransformTestCube.eulerAngles;
            // Проверяем угол наклона по оси Z
            // если наклон до 180 градусов значит объект наклоняется влево
            if (rotateAxisZ >= limitAngle && rotateAxisZ < 180)// И одновременно проверяем достиг наклон лимита
            {
                // если достиг или превысил лимит наклона присваиваем величину лимита углу z переменной eulerAng
                eulerAng.z = limitAngle;
                // И поворачиваем трансформ на угол eulerAng
                TransformTestCube.eulerAngles = eulerAng;
            }
            // Проверяем угол наклона по оси X
            // если наклон до 180 градусов значит объект наклоняется вперёд
            if (rotateAxisX >= limitAngle && rotateAxisX < 180)
            {
                eulerAng.x = limitAngle;
                TransformTestCube.eulerAngles = eulerAng;
            }
            // Проверяем угол наклона по оси Z
            // если наклон больше 180 градусов значит объект наклоняется вправо
            if (rotateAxisZ <= (360 - limitAngle) && rotateAxisZ > 180)//При наклоне вправо вычисляем нужный угол (360 - limitAngle)
            {
                eulerAng.z = 360 - limitAngle;
                TransformTestCube.eulerAngles = eulerAng;
            }
            // Проверяем угол наклона по оси X
            // если наклон больше 180 градусов значит объект наклоняется назад
            if (rotateAxisX <= (360 - limitAngle) && rotateAxisX > 180)
            {
                eulerAng.x = 360 - limitAngle;
                TransformTestCube.eulerAngles = eulerAng;
            }

            // Индикация работы стабилизатора
            AxisOfRotation.rotation *= Quaternion.AngleAxis(speedR * Time.deltaTime, Vector3.up);
        }
    }

Ещё раз спасибо, если кто найдёт способ оптимизировать код или что то поправить буду благодарен.
Kot-MatroskinДата: Воскресенье, 09 Июля 2017, 23:02 | Сообщение # 3 | Тема: Детская коляска
был не раз
Сейчас нет на сайте
Это уже опробовано, лажа выходит, нельзя сильно низко делать, качается как качели не остановишь, да и когда сильно низко не едет. да и не решение
Kot-MatroskinДата: Воскресенье, 09 Июля 2017, 20:18 | Сообщение # 4 | Тема: Детская коляска
был не раз
Сейчас нет на сайте
Видео как брусок (съезжая) СПРЫГИВАЯ с края обрыва кувыркается в полёте и падает как попало?

Добавлено (09 июля 2017, 20:14)
---------------------------------------------
Надо чтобы он упал на колёса (как кошка на лапы) да и не кувыркался, только свободный наклон до 30 градусов (сколько задаш в общем)

Добавлено (09 июля 2017, 20:18)
---------------------------------------------
Я давно пытаюсь найти, но так и не смог. Там я так понимаю надо как то с кватернионами оперировать свободно уметь. :( увы мат аппарат на уровне 2 + 2


Сообщение отредактировал Kot-Matroskin - Понедельник, 10 Июля 2017, 09:56
Kot-MatroskinДата: Воскресенье, 09 Июля 2017, 19:31 | Сообщение # 5 | Тема: Детская коляска
был не раз
Сейчас нет на сайте
К чему это? Мануал по Rigidbody я читал, и как он мне поможет ограничить наклон коляски до определённого угла? Надо к примеру чтоб до 35 градусов она наклонялась нормально, а если угол наклона превышает 35 то скрипт должен останавливать наклон. И это должно быть по кругу. Да Rigidbody может заморозить наклон но как будет выглядеть коляска стоящая горизонтально на наклонном пандусе blink

Добавлено (09 июля 2017, 19:31)
---------------------------------------------
С того же пандуса коляска резво скатывается при этом её трясёт и подпрыгивает, и заметьте ВСЕГДА падает или даже переворачивается в момент выезда на ровную поверхность.
А иногда и раньше. нужно чтобы сохраняла положение даже при прыжке с высоты


Сообщение отредактировал Kot-Matroskin - Воскресенье, 09 Июля 2017, 19:35
Kot-MatroskinДата: Воскресенье, 09 Июля 2017, 17:51 | Сообщение # 6 | Тема: Детская коляска
был не раз
Сейчас нет на сайте
Есть такой юнит (надеюсь все представляют как выглядит и ездит оная) надо сделать что бы она НЕ наклонялась Более чем на 30 градусов в любом направлении и тем более НЕ переворачивалась. Сломал голову но не придумал как реализовать такое. Перерыл интернет но так и не нашёл ничего про это.
Есть несколько объяснений.
Первое - это настолько элементарно что ни кто даже не упоминают о решении такой задачи.
Второе - это не возможно решить в принципе, хотя в танках они почему то ни разу не переворачиваются. Может на Юнити нет способа
Третье - это сверх секретная и ОЧЕНЬ дорогая фича, и все кто знает как, ждут покупателя.
Ну и....
и всё же кто сможет помочь? Модель примитивная брусок с коллайдером таскается волоком посредством РиджитБади.
Код

                Vector3 r;
                // ----- Поворот
                r = Navigator.transform.eulerAngles - orientationBot.eulerAngles;
                r.x = 0;
                r.z = 0;
                transform.Rotate(r);

                // ---- Движение
                Vector3 p = Navigator.transform.position;
                p.y = transform.position.y;
                botRigidbody.MovePosition(p);
crazy
Kot-MatroskinДата: Суббота, 08 Июля 2017, 09:41 | Сообщение # 7 | Тема: Эвент на нажатие кнопки мыши
был не раз
Сейчас нет на сайте
Сильно lovegcup большое спасибо за решение. up bye
Kot-MatroskinДата: Суббота, 08 Июля 2017, 03:01 | Сообщение # 8 | Тема: Эвент на нажатие кнопки мыши
был не раз
Сейчас нет на сайте
Мне надо получить код нажатой клавиши типа KeyCode в переменную kc, без разницы каким способом, получить НЕ устаревшими - OnGUI. и прочим.
И получить надо к примеру в Update(). Решение найдено через форич. Теперь вопрос, существует ли что то более простое / изящное чем использование foreach....

Добавлено (08 июля 2017, 03:01)
---------------------------------------------
ЗЫ: Ладно закрыли тему. Похоже другого способа не существует :D

Kot-MatroskinДата: Пятница, 07 Июля 2017, 18:46 | Сообщение # 9 | Тема: Эвент на нажатие кнопки мыши
был не раз
Сейчас нет на сайте
Походу я наверное немного путано изъясняюсь, я имел в виду как ещё можно получить код нажатой клавиши.
Типа KeyCode kc; и потом присваиваем kc = ..... и вот тут откуда то берётся значение этой самой клавиши.
как раньше было kc = Event.current.keyCode;
Kot-MatroskinДата: Пятница, 07 Июля 2017, 11:58 | Сообщение # 10 | Тема: Эвент на нажатие кнопки мыши
был не раз
Сейчас нет на сайте
Здравствуйте. Как раз в теме не надо создавать другую. Есть камера с UI, при подключении объекту, надо передать коды нажатых клавиш.
Код

if (Input.GetKeyUp(KeyCode.R))
                m_Imc.currentObject.GetComponent<IOperation>().SetMode(eMode.manualControl);
if (Input.GetKeyUp(KeyCode.T))
                m_Imc.currentObject.GetComponent<IOperation>().SetMode(eMode.automaticControl);
Использую такую конструкцию, громоздко да и в разных объектах разная реакция на одни те же клавиши
прочитал тут про
Event.current.keyCode
И подумал вот оно, сделаю так, буду передавать все клавиши объекту и он будет сам решать что делать с полученным кодом.
Код

        KeyCode kc = new KeyCode();
...
            if (Input.anyKeyDown)
                kc = Event.current.keyCode;
...
            if (kc == KeyCode.G) m_txtInf.text = "G";
            else m_txtInf.text = "none";
Компилируется но не работает, ругается на первый ИФ что
NullReferenceException: Object reference not set to an instance of an object
ПС: Прошу сильно не ругать только учусь.

Добавлено (07 июля 2017, 11:41)
---------------------------------------------
Нарыл вот что, если в выше приведённом коде в строчке
if (Input.anyKeyDown)
kc = Event.current.keyCode;
заменить на kc = KeyCode.G; то работает. Получается что я не знаю как заставить работать Event.current.keyCode;

Подскажите пожалуйста, как получить код текущей нажатой клавиши типа - KeyCode

Добавлено (07 июля 2017, 11:58)
---------------------------------------------
Нашёл решение, если вдруг кому то понадобится

Код

            KeyCode kc;
            // Получаем код нажатой клавиши
            foreach (KeyCode KCode in System.Enum.GetValues(typeof(KeyCode)))
                if (Input.GetKeyDown(KCode))
                    kc = KCode;

Посылаем объекту, в нём и обрабатываем.
Код

            if (kc == KeyCode.G) m_txtInf.text = "G";
            else m_txtInf.text = "none";

Хотя может получить KeyCode нажатой клавиши можно и более изящным способом?


Сообщение отредактировал Kot-Matroskin - Четверг, 06 Июля 2017, 22:28
Kot-MatroskinДата: Воскресенье, 11 Декабря 2016, 23:55 | Сообщение # 11 | Тема: OnTriggerEnter и высокая скорость
был не раз
Сейчас нет на сайте
Кстати как вариант пусть он махнёт пару или более (то-есть один удар будет состоять из серии пока не сработает триггер) раз, пока не зацепит, на той скорости я так понимаю это игроку не будет заметно. А удар гарантированно зацепит.
Kot-MatroskinДата: Суббота, 10 Декабря 2016, 01:33 | Сообщение # 12 | Тема: OnTriggerEnter и высокая скорость
был не раз
Сейчас нет на сайте
Попробуй вместо Update() использовать FixedUpdate() в некоторых случаях помогает.

Сообщение отредактировал Kot-Matroskin - Суббота, 10 Декабря 2016, 01:33
Kot-MatroskinДата: Среда, 07 Декабря 2016, 11:30 | Сообщение # 13 | Тема: столбик неваляшка
был не раз
Сейчас нет на сайте
Общем всё просто, есть столбик 3 по Y и соответственно по X и Z - 1 и 1 надо сделать чтобы при наклоне больше критического угла он возвращался к до критическому.
Вот что я смог придумать но работает не правильно.
Код
    Rigidbody rb;
    public Transform _sample; // Образец для подражания
    public Transform _baseOfColumn; // Пустышка в основании столбика с риджит бади
    public float _angle; // Угол между образцом и столбиком
    // Use this for initialization
    void Start()
    {
        rb = _baseOfColumn.GetComponent<Rigidbody>     ( );
    }

    // Update is called once per frame
    void FixedUpdate()
    {
        Quaternion _base = _baseOfColumn.rotation;
        Quaternion _smpl = _sample.rotation;
        _angle = Quaternion.Angle(_base, _smpl);
        if (_angle > 40)
        {
            // Этот вариант ведёт себя очень странно
            transform.rotation = Quaternion.Slerp(_base, _smpl, 0.5f);

            // В этом прыгает всё время хотя и не падает
            _baseOfColumn.rotation = Quaternion.Slerp(_base, _smpl, 0.5f);

            // И в этом тоже прыгает всё время и тоже не падает
            rb.rotation = Quaternion.LerpUnclamped(_base, _smpl, 1f);

            // И в этом тоже прыгает всё время и тоже не падает
            rb.MoveRotation(Quaternion.LerpUnclamped(_base, _smpl, 1f));
            //

        }

    }

И как бы избавится от объекта образца?
Помогите пожалуйста сделать чтобы столбик не мог упасть и реалистично возвращался в угол указанный мной, ибо он может оказаться на наклонной поверхности поэтому он должен вернутся не строго вертикально а в исходное положение.


Сообщение отредактировал Kot-Matroskin - Среда, 07 Декабря 2016, 19:43
  • Страница 1 из 1
  • 1
Поиск:

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