Скрипт управления персонажем

Программирование на Юнити.

Скрипт управления персонажем

Сообщение Gidly 22 мар 2019, 22:42

Привет! У меня на руках скрипт, который с помощью CharacterController + задействуется физика управляет персонажем.
По идее всё должно робить, но нет.
Синтаксис:
Используется csharp
   
            float x = Input.GetAxis("Horizontal_");
            float z = Input.GetAxis("Vertical_");
            animator.SetFloat("speed", x);
            animator.SetFloat("rotate", z);
            if (controller.isGrounded)
            {
                if (z != 0)
                {
                    direction = new Vector3(0f, gravity, z);
                    direction = transform.TransformDirection(direction) * speed;
                    controller.Move(direction * Time.deltaTime);
                }

                if (x != 0)
                {
                    transform.Rotate(0f, x * speed, 0f);
                }

                if (Input.GetButtonDown("Jump") & controller_anim.OnCrouch != true)
                {
                    direction.y = 6;
                    animator.SetBool("Jump", true);
                }
                else
                {
                    animator.SetBool("Jump", false);
                }
            }
            direction.y -= gravity * Time.deltaTime;

По идее перс должен идти, но он стоит на месте.
Если вынести за скобки строчку
Синтаксис:
Используется csharp
controller.Move(direction * Time.deltaTime);

Он кое-как передвигается, но багнуто (он сам начинает куда-то ехать после определенных действий)
Поправьте меня пж!
Аватара пользователя
Gidly
UNIт
 
Сообщения: 61
Зарегистрирован: 07 июл 2018, 19:20
Откуда: Из Бангладеша

Re: Скрипт управления персонажем

Сообщение 1max1 22 мар 2019, 22:53

Почему Horizontal_ и Vertical_ с нижним подчеркиванием?
Когда у тебя if (z != 0) ты двигаешь персонажа, а в аниматоре вращаешь, тоже самое и с Х, так задумано?
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Скрипт управления персонажем

Сообщение Gidly 23 мар 2019, 13:47

1max1 писал(а):Почему Horizontal_ и Vertical_ с нижним подчеркиванием?
Когда у тебя if (z != 0) ты двигаешь персонажа, а в аниматоре вращаешь, тоже самое и с Х, так задумано?

Оси у меня с нижним подчеркиванием потому что, я так их назвал. Когда у меня z != 0, персонаж по идее должен идти вперед-назад, если x !=0, то поворачиваться направо-налево.
С аниматором у меня проблем нет.
Аватара пользователя
Gidly
UNIт
 
Сообщения: 61
Зарегистрирован: 07 июл 2018, 19:20
Откуда: Из Бангладеша

Re: Скрипт управления персонажем

Сообщение 1max1 23 мар 2019, 15:06

Попробуй так:
Синтаксис:
Используется csharp
            float x = Input.GetAxis("Horizontal_");
            float z = Input.GetAxis("Vertical_");

            animator.SetFloat("speed", x);
            animator.SetFloat("rotate", z);

            direction = new Vector3(0f, 0f, z);
            direction = transform.TransformDirection(direction) * speed;
           
            transform.Rotate(0f, x * speed, 0f); // тут еще на дельтатайм нужно домножать

            if (controller.isGrounded)
            {
                if (Input.GetButtonDown("Jump") & controller_anim.OnCrouch != true)
                {
                    direction.y = 6;
                    animator.SetBool("Jump", true);
                }
                else
                    animator.SetBool("Jump", false);
            }
            else
                direction.y -= gravity * Time.deltaTime;

             controller.Move(direction * Time.deltaTime);
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Скрипт управления персонажем

Сообщение Gidly 23 мар 2019, 21:11

1max1 писал(а):Попробуй так:
Синтаксис:
Используется csharp
            float x = Input.GetAxis("Horizontal_");
            float z = Input.GetAxis("Vertical_");

            animator.SetFloat("speed", x);
            animator.SetFloat("rotate", z);

            direction = new Vector3(0f, 0f, z);
            direction = transform.TransformDirection(direction) * speed;
           
            transform.Rotate(0f, x * speed, 0f); // тут еще на дельтатайм нужно домножать

            if (controller.isGrounded)
            {
                if (Input.GetButtonDown("Jump") & controller_anim.OnCrouch != true)
                {
                    direction.y = 6;
                    animator.SetBool("Jump", true);
                }
                else
                    animator.SetBool("Jump", false);
            }
            else
                direction.y -= gravity * Time.deltaTime;

             controller.Move(direction * Time.deltaTime);

Брат, помоги пж. Я построил код по такому типу, перс начал ходить и поворачиваться, но у него пропала нормальная физика. То есть он теперь падает значительно дольше, а прыгать вообще отказывается.
Аватара пользователя
Gidly
UNIт
 
Сообщения: 61
Зарегистрирован: 07 июл 2018, 19:20
Откуда: Из Бангладеша

Re: Скрипт управления персонажем

Сообщение 1max1 23 мар 2019, 21:55

¯ \ _ (ツ) _ / ¯
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Скрипт управления персонажем

Сообщение AngryCat 08 апр 2019, 22:50

Ты все сломал 1max1 :ymparty: :ymparty:
Здесь могла бы быть ваша реклама.
Аватара пользователя
AngryCat
Старожил
 
Сообщения: 716
Зарегистрирован: 20 июл 2018, 22:29
Skype: Дискорд - Флеш#4099


Вернуться в Скрипты

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6