Форум программистов, компьютерный форум, киберфорум
Unity, Unity3D
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 30.06.2019
Сообщений: 3

Какая то проблема с управлением на Rigidbody

04.07.2019, 18:40. Показов 1166. Ответов 5

Студворк — интернет-сервис помощи студентам
Сделал управление персонажем через силы в Rigidbody. Вроде работает нормально, но скорость перемещения почему то изменяется от запуска к запуску и через некоторое время становится прежним (как на видео). Не могу понять в чем может быть проблема.

Перемещение сделал таким образом:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 void Update()
    {
        ShutSoundTrigger.SetActive(false);
        MotorAS.pitch = GetComponent<Rigidbody>().velocity.magnitude / 2;
        float NewCamDistane,NewMoveSpeed,NewCameraMass,CamShift;
                int UP,DOWN,LEFT,RIGHT;
        if (Input.GetKey(KeyCode.W)) { UP = 1; } else { UP = 0; }
        if (Input.GetKey(KeyCode.S)) { DOWN = 1; } else { DOWN = 0; }
        if (Input.GetKey(KeyCode.A)) { LEFT = 1; } else { LEFT = 0; }
        if (Input.GetKey(KeyCode.D)) { RIGHT = 1; } else { RIGHT = 0; }
        if (Input.GetKey(KeyCode.Mouse1)) { Aim = true; } else { Aim = false; }
        if (Aim)
        {
            NewMoveSpeed = RunSpeed;
            NewCamDistane = AimCamDistane;
            NewCameraMass = RunCameraMass;
            CamShift = 0.4f;
 
        }
        else
        {
            NewCamDistane = CamDistance;
            NewMoveSpeed = MoveSpeed;
            NewCameraMass = CameraMass;
            CamShift = 0.2f;
        }
 
 
        Vector3 ForceVector = ((Vector3.forward * UP) + (Vector3.back * DOWN) + (Vector3.left * LEFT) + (Vector3.right * RIGHT)) * NewMoveSpeed;
        GetComponent<Rigidbody>().AddForce(ForceVector,ForceMode.Force);
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.07.2019, 18:40
Ответы с готовыми решениями:

Проблема с управлением камерой и ее работой с порталами
доброго времени суток форумчане ! накидал простенькое управление камерой и капсулой (пока условным игроком). public class...

Проблема Unity с управлением C# движение персонажа джойстик
Сделал сцену с персонажем которым по идее должен управлять джойстиком персонаж имеет компонент CharacterController и скрипт...

Проблема с управлением стрелками
Здравствуйте! Ребят, возникла следующая проблема: Я делаю таблицу, которую пользователь при желании может заполнять данными, ...

5
 Аватар для 1max1
3362 / 1775 / 1028
Регистрация: 26.10.2018
Сообщений: 5,204
04.07.2019, 18:56
Таких костылей я еще не видел))
1) Почитай про оси https://docs.unity3d.com/Scrip... tAxis.html
2) Задавай velocity напрямую, а не AddForce, потому что во втором случае скорость будет зависеть от частоты кадров.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
  void Update()
    {
        ShutSoundTrigger.SetActive(false);
        MotorAS.pitch = GetComponent<Rigidbody>().velocity.magnitude / 2.0f;
        float NewCamDistane, NewMoveSpeed, NewCameraMass, CamShift;
 
        if (Input.GetKey(KeyCode.Mouse1))
        {
            NewMoveSpeed = RunSpeed;
            NewCamDistane = AimCamDistane;
            NewCameraMass = RunCameraMass;
            CamShift = 0.4f;
        }
        else
        {
            NewCamDistane = CamDistance;
            NewMoveSpeed = MoveSpeed;
            NewCameraMass = CameraMass;
            CamShift = 0.2f;
        }
        
        float h = Input.GetAxis("Horizontal");
        float v = Input.GetAxis("Vertical");
 
        Vector3 v = new Vector3(h, 0.0f, v) * NewMoveSpeed;
        v = Vector3.ClampMagnitude(v, NewMoveSpeed); // чтобы по диагонали не ездил быстрей, чем по сторонам
        GetComponent<Rigidbody>().velocity = transform.TransformVector(v); // ссылку на Rigidbody лучше кэшировать в старте
}
0
0 / 0 / 0
Регистрация: 30.06.2019
Сообщений: 3
04.07.2019, 19:30  [ТС]
Спасибо. Да, пока что немного хромаю

Добавлено через 22 минуты
Но при изменении velocity напрямую пропадает отдача, которая работает через импульс , и игрок теряет инертность, останавливается моментально при любом Drag
0
 Аватар для 1max1
3362 / 1775 / 1028
Регистрация: 26.10.2018
Сообщений: 5,204
04.07.2019, 19:40
Цитата Сообщение от Segrom Посмотреть сообщение
Но при изменении velocity напрямую пропадает отдача, которая работает через импульс , и игрок теряет инертность, останавливается моментально при любом Drag
Читаем, настраиваем как надо https://docs.unity3d.com/ru/cu... nager.html

Добавлено через 2 минуты
Особое внимание обрати на Sensitivity и Gravity.

Добавлено через 2 минуты
Да, кстати, если уж очень сильно нужен AddForce, то используй его в FixedUpdate.
Либо в Update, но тогда домнажай на дельту времени:
C#
1
rb.AddForce(ForceVector * Time.deltaTime, ForceMode.Force);
1
0 / 0 / 0
Регистрация: 30.06.2019
Сообщений: 3
04.07.2019, 19:54  [ТС]
Цитата Сообщение от 1max1 Посмотреть сообщение
ссылку на Rigidbody лучше кэшировать в старте
}
насколько это критично?
0
 Аватар для 1max1
3362 / 1775 / 1028
Регистрация: 26.10.2018
Сообщений: 5,204
04.07.2019, 19:56
Цитата Сообщение от Segrom Посмотреть сообщение
насколько это критично?
Незначительно, но так будет более оптимальней, нежели каждый раз вызывать метод, который будет искать нужный компонент на объекте.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.07.2019, 19:56
Помогаю со студенческими работами здесь

Проблема с управлением перемещением объекта по экрану
Собрался писать игру с использованием Raycasting. На данном этапе, должны отрисовываться стены (красные квадраты) и персонаж (зелёный...

Контроллер управлением оконных жалюзи и дистанционным управлением
МПК AVR в интернете вообще ни какой информации по этой теме нет может кто то реферат писал.или программировал кто то

2 модема, какая-то проблема
Здравствуйте, друзья! Есть очень странная проблема. Есть 2 usb LTE модема, (адреса веб-интерфейсов: 192.168.8.1; 192.168.9.1), моя...

Какая-то странная проблема с CHOICE
суть проблемы в чем. когда я удаляю и переименовываю файлы в каталоге - работает нормально. но когда я перемещаю или копирую то - ничего не...

Какая-то непонятная проблема, подозрение падает на str_replace
Ситуация следующая: имеется шаблонизатор. В проблемном месте он берет нужный кусок кода, обрабатывает его, подставляет нужные переменные и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru