Лихорадка в проектах Unity 3D ⇐ C#
-
Anonymous
Лихорадка в проектах Unity 3D
Итак, я хотел написать сценарий движения для моего игрока. Я планировал создать что-то вроде подвижного шутера. Поэтому я подумал, что было бы здорово добавить опцию тире (вероятно, это говорит само за себя). По какой-то причине тире не работает корректно, это больше похоже на телепорт.
Поэтому мой подход заключался в том, чтобы просто прикрепить к проигрывателю «ориентированный» пустой объект, получить .forward и .up * DashFactor, а затем просто использовать rb.AddForce(dashForce, ForceMode.Impulse). Я пробовал такие вещи, как ускорение или просто силу, но ничего не помогало. Я как бы думаю, что проблема заключается в том, как я рассчитываю ход и все такое (какой еще вариант?). Поскольку я видел этот материал в уроке, он должен выглядеть довольно плавно, а не какой-то телепортирующейся ерундой. Мне также нужно запустить DashFactor, чтобы увидеть реальный результат, поэтому я тоже подумал о гравитационном притяжении? Но поскольку я никогда не касался каких-либо опций для Rigidbody, это кажется не совсем правдоподобным.
с использованием System.Collections; использование System.Collections.Generic; использование UnityEngine; открытый класс MovementController: MonoBehaviour { [Заголовок("Входные значения движения")] [SerializeField] float MovementSpeedFactor; [SerializeField] float JumpingFactor = 1; [SerializeField] float DashFactor = 1; [SerializeField] float DashFactorUp = 0; [Заголовок("Игровые объекты")] [SerializeField] Тест преобразования; Ригидбоди рб; // Start вызывается перед обновлением первого кадра недействительный старт() { rb = GetComponent(); } // Обновление вызывается один раз за кадр недействительное обновление() { float hInput = Input.GetAxis("Горизонтально"); float vInput = Input.GetAxis("Вертикально"); rb.velocity = new Vector3(hInput * MovementSpeedFactor, rb.velocity.y, vInput * MovementSpeedFactor); если (rb.velocity.y == 0) { если (Input.GetButtonDown("Перейти")) { rb.velocity = new Vector3(hInput * MovementSpeedFactor, 1f * JumpingFactor, vInput * MovementSpeedFactor); } } если(Input.GetKeyDown(KeyCode.LeftShift)) { Vector3 DashForce = test.forward * DashFactor + test.up * DashFactorUp; rb.AddForce(dashForce, ForceMode.Impulse); } } }
Итак, я хотел написать сценарий движения для моего игрока. Я планировал создать что-то вроде подвижного шутера. Поэтому я подумал, что было бы здорово добавить опцию тире (вероятно, это говорит само за себя). По какой-то причине тире не работает корректно, это больше похоже на телепорт.
Поэтому мой подход заключался в том, чтобы просто прикрепить к проигрывателю «ориентированный» пустой объект, получить .forward и .up * DashFactor, а затем просто использовать rb.AddForce(dashForce, ForceMode.Impulse). Я пробовал такие вещи, как ускорение или просто силу, но ничего не помогало. Я как бы думаю, что проблема заключается в том, как я рассчитываю ход и все такое (какой еще вариант?). Поскольку я видел этот материал в уроке, он должен выглядеть довольно плавно, а не какой-то телепортирующейся ерундой. Мне также нужно запустить DashFactor, чтобы увидеть реальный результат, поэтому я тоже подумал о гравитационном притяжении? Но поскольку я никогда не касался каких-либо опций для Rigidbody, это кажется не совсем правдоподобным.
с использованием System.Collections; использование System.Collections.Generic; использование UnityEngine; открытый класс MovementController: MonoBehaviour { [Заголовок("Входные значения движения")] [SerializeField] float MovementSpeedFactor; [SerializeField] float JumpingFactor = 1; [SerializeField] float DashFactor = 1; [SerializeField] float DashFactorUp = 0; [Заголовок("Игровые объекты")] [SerializeField] Тест преобразования; Ригидбоди рб; // Start вызывается перед обновлением первого кадра недействительный старт() { rb = GetComponent(); } // Обновление вызывается один раз за кадр недействительное обновление() { float hInput = Input.GetAxis("Горизонтально"); float vInput = Input.GetAxis("Вертикально"); rb.velocity = new Vector3(hInput * MovementSpeedFactor, rb.velocity.y, vInput * MovementSpeedFactor); если (rb.velocity.y == 0) { если (Input.GetButtonDown("Перейти")) { rb.velocity = new Vector3(hInput * MovementSpeedFactor, 1f * JumpingFactor, vInput * MovementSpeedFactor); } } если(Input.GetKeyDown(KeyCode.LeftShift)) { Vector3 DashForce = test.forward * DashFactor + test.up * DashFactorUp; rb.AddForce(dashForce, ForceMode.Impulse); } } }
Мобильная версия