Войти
ПрограммированиеФорумОбщее

Кто может объяснить? unity c#

#0
(Правка: 20:22) 20:16, 6 окт. 2019

Код работает замечательно! Но, я его нашёл, и не могу понять как он устроен
Код поворачивает персонажа в сторону стика, то есть в сторону движения

inputHorizontal = SimpleInput.GetAxis(horizontalAxis);
        inputVertical = SimpleInput.GetAxis(verticalAxis);

        float tempAngle = Mathf.Atan2(inputVertical, inputHorizontal);
        inputHorizontal *= Mathf.Abs(Mathf.Cos(tempAngle));
        inputVertical *= Mathf.Abs(Mathf.Sin(tempAngle));
        Debug.Log(tempAngle + " " + inputHorizontal + " " + inputVertical);

        JoystickInput = new Vector3(inputHorizontal, 0, inputVertical);
        JoystickInput = transform.TransformDirection(JoystickInput);
        JoystickInput *= 4f;

        Vector3 temp = transform.position;
        temp.x += inputHorizontal;
        temp.z += inputVertical;
        Vector3 lookDirection = temp - transform.position;

        transform.localRotation = Quaternion.Slerp(transform.localRotation, Quaternion.LookRotation(lookDirection), 8f * Time.deltaTime);


В особенности можете объяснить зачем здесь косинус, синус, акртагенс


#1
21:30, 6 окт. 2019

Школьную геометрию про углы и треугольники помнишь? Там как раз вычисления на синусах, косинусах и тангенсах-артангенсах строятся. Здесь используются какие-то из тех формул, собираются нужные для задания движения данные и вводятся в функцию, ещё и лог пишется. Можешь перечитать нужные главы учебника, если тебе не всё равно почему формулы именно такие.

#2
(Правка: 21:58) 21:48, 6 окт. 2019

Skvoznjak
Тут скорее вопрос о спинно-мозговых рефлексах на линейную алгебру, а не просто "помнишь". Вот почитает 1000 часов всякие книжки, типа Mathematics for 3D Game Programming and Computer Graphics и прочее. Поймет. А тут не имеет смысла его винить, что не гений.
> Можешь перечитать нужные главы учебника, если тебе не всё равно почему формулы именно такие.
Это просто совет от бога. Я даю 100%, что этого нет ни в одном учебнике. Максимум, что он найдет это atan2(v.y, v.x).

#3
(Правка: 2:26) 2:25, 7 окт. 2019

Jesure
> В особенности можете объяснить зачем здесь косинус, синус, акртагенс
Низачем. Результаты всё равно не используются. Код выглядит так, будто писался не приходя в сознание.

Вот примерно то же самое:

float horizontal = Input.GetAxis("Horizontal");
float vertical = Input.GetAxis("Vertical");
Vector3 lookDirection = new Vector3(horizontal, 0, vertical);
transform.forward = Vector3.Slerp(transform.forward, lookDirection, .1f);

#4
5:45, 7 окт. 2019

alexzzzz
>Низачем. Результаты всё равно не используются. Код выглядит так, будто писался не приходя в сознание.

Так это же вроде не самый плохой подход. Когда окончание плана теряется в тумане, просто заполняешь все необходимые поля данными, а потом используешь то что нужно:) Если потом будут лишние силы и время, то лишние строчки можно подтереть, а если жрут не много, то и так пусть пока полежат. А потом забудется и всё хорошо, не глючит ведь.

lookid
>Я даю 100%, что этого нет ни в одном учебнике.

Формулы по нахождению углов в треугольнике будут, найдёт нужную и отложит накопитель информации до следующего раза. Ведь они могут год не понадобиться, как повезёт. Про это и речь была.

#5
8:19, 7 окт. 2019
        float tempAngle = Mathf.Atan2(inputVertical, inputHorizontal);
        inputHorizontal *= Mathf.Abs(Mathf.Cos(tempAngle));
        inputVertical *= Mathf.Abs(Mathf.Sin(tempAngle));

довольно странный способ нормализовать Vector2(inputVertical, inputHorizontal)

#6
9:44, 7 окт. 2019

alexzzzz
Спасибо! Щас опробую

#7
9:56, 7 окт. 2019

Jesure
Слегка изменил, но работает так как мне надо! Спасибо ещё раз


        inputHorizontal = SimpleInput.GetAxis(horizontalAxis);
        inputVertical = SimpleInput.GetAxis(verticalAxis);

        Vector3 lookDirection = new Vector3(inputHorizontal, 0, inputVertical);
        transform.forward = Vector3.Slerp(transform.forward, lookDirection, .1f);

ПрограммированиеФорумОбщее