Привет! В этом видео я покажу как сделать управление персонажем для 2.5D игры. Мы добавим персонажа с помощью mixamo и найдем для него анимации бега и idle. Надеюсь видео будет вам полезно! unity управление персонажем
Спасибо тебе огромное! Я новичок и не особо разбираюсь в юнити, а большинство уроков по созданию чего-либо просто говорят делать что-то, не поясняя зачем, но ты реально объяснил мне всё, спасибо!
Спасибо, чувак! Я наклацал какую-то херню, что у меня Input Manager перестал работать, пытался решить эту проблему всеми способами(я тогда не знал в чём проблема) и смотрел кучу видео. А твоё помогло найти поломку. Спасибо, что объяснил как работает управление и Input Manager!
господи...не описать какое ОГРОМНОЕ СПАСИБО!!!! 🤍🤍🤍 все так понятно и доходчиво, для абсолютного новичка просто идеально! лайк, подписка, плюсы в карму))
Мужик ты лучший просто! Благодаря тебе я начал свой большой проект, который я хочу выпустить на платформу по типу стим или вк плей, огромное тебе спасибо! Твоё имя увековечится в игре!
Рассказываю у кого проблема в том, что человек бежит и всё время возвращается назад. Когда качаете анимацию нужно поставить галочку In Place и всё, проблема решена)
немного придерусь, переменные лучше обьявлять снчала, чем в самом методе, rb Velocity можно вынести в метод FixedUpdate, переменные лучше называть конкретней, для именований использовать PascalKeys и camalKeys (для локальных переменных)
Все круто, за исключением того что если мы добавляем механику прыжка, то персонаж очень медленно опускается к земле. Что не очень хорошо для любой игры.. от массы RB это не зависит.. Можно играться с гравитацией, но это тоже не очень хорошо, потом будут вылазить костыли.. Есть какое то решение проблемы падения персонажа при прыжке? Подскажи пожалуйста
это всё круто, но нужно все ровно учить программирование, какие то базовые закономерности, зависимости, переменные влияния, направления и прочее, функции, либо постоянно скрипты качать готовые, который дядя Вася написал уже когда то ранее, а потом ломать голову чтобы их под себя откорректировать)
круто, очень круто, но в проекте вышла ошибка: The type or namespace name 'RigidBody' could not be found (are you missing a using directive or an assembly reference?). Вот код: using System.Collections; using System.Collections.Generic; using UnityEngine; public class control : MonoBehaviour { private Animator anm; //animator private RigidBody rigidBody; public float speed = 2f; // Start is called before the first frame update void Start() { animator -= GetComponent(); rigidBody = GetComponent(); } // Update is called once per frame void Update() { float h = Input.GetAxis("Horizontal"); float v = Input.GetAxis("Vertical"); Vector3 dirVector = new Vector3(v, 0, h); animator.SetFloat("speed", Vector3.ClampMagnitude(dirVector, 1).magnitude); rigidBody.velocity = Vector3.ClampMagnitude(dirVector, 1) * speed; } }
Подскажите пожалуйста, код один и тот же. Но, если я нажимаю кнопки для поворота, работает только один раз, а когда хочу пойти вперед, поворачивается в другую сторону и только тогда он идёт
Здраствуйте! Меня интересует такой вопрос как можно сделать настройки управления персонажем чтобы можно было настраивать клавиши на клавиатуре или на мишке, чтобы можно было в настройках перефирию менять на (джойстик,руль,клавиатура,мышка,руль) по своему и. Т. Д . Подскажите пожайлуста
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Move : MonoBehaviour { public int speed = 5; public GameObject Player;//здесь ми указываем персонажа как игровой Object; void Start() { Player = (GameObject)this.gameObject; //тут присваиваем персонажа к игровому Object или как-то так. } // Ах да вместо player надо ставить имя твоего перса которое записано в Unity; void Update() { if (Input.GetKey(KeyCode.W)) { Player.transform.position += Player.transform.forward * speed * Time.deltaTime; } if (Input.GetKey(KeyCode.S)) { Player.transform.position -= Player.transform.forward * speed * Time.deltaTime; } if (Input.GetKey(KeyCode.D)) { Player.transform.position += Player.transform.right * speed * Time.deltaTime; } if (Input.GetKey(KeyCode.A)) { Player.transform.position -= Player.transform.right * speed * Time.deltaTime;//персонаж плавно двигается на W,S,D,A; } //всё легко и просто, как борщ(всё как Вы и просили) } }
Привет, я вроде в следующем видео по этой серии это исправлял. Если нет, то просто напиши у себя в Update следующее: rigidbody.angularVelocity = Vector3.zero; я только не помню назвал ли я свою переменную rigidbody в том скрипте
@@Maximple Спасибо большое, помогло! Только теперь, когда я соприкасаюсь с объектом и не прекращаю движение Камера трясётся. А если сделать управление камерой с помощью мышки, это пройдёт?
У меня персонаж не двигается, не увеличивается, нельзя менять capsule collider. А ещё не отображается extract collider и extract material А ещё когда ему закидываю текстурку, то при запуске игры он исчезает.
Единственное нормальное видео на тему. У всех обрубки, часто ваще неправильные и через заднюю калитку (например без rigidbody)... Чтоб вы понимали, перед этим я пробовал 4 разных урока на тему управления персонажем 3D в unity = ни один не работал как надо, с правильным смешением анимаций ит.д. === Я ОТ АВТОРА В ВОСТОРГЕ!
@@Maximple совет на будущее от зрителей = не нужно показывать в уроке переписывание 100 раз кода = снимай урок по готовому коду с объяснением куда что и зачем вставил, что натянул и как оно работает пошагово
я кста уже норм продвинулся ))) в голове появился каркас как оно все работает в игре сейчас перехожу к врагам, атакам, смертям и патрулированию платформ и т.п. (в рамках одной сцены) ==== будет что-то непонятно, напишу вопросы частицы, респавны, смена сцен, катсцены, главное меню, донаты, Admob, работа с Google play и т.п. === пока еще темный лес )))) хочу сделать тело игры и поднять все эстетики механик и оформления ... делать все в одиночку долго = программирую скрипты пока левой ногой, рисую в 3D через жопу и т.д.
@@Maximple дело не в том чтобы видео короче ))) зрители сидят с ручками, ставят урок на паузу и переписывают в тетрадки скрипты.... а потом правят написанное....
не могу создать переменную speed, плюсик не clickable, анимация не смешивается, персонаж просто стоит как я понял, для новых версий юнити гайд уже не актуален, одна неточность в версии ломает все, а искать эту неточность новичку нереально долго
Очень четко супер, но я дошел только до скрипта и при просмотре игры игрок делает анимированное движение на месте и потом куда-то улетает в верх🤣 и вот что показывает консоль типа предупреждение! Доступен пакет редактора Visual Studio версии 2.0.11, мы настоятельно рекомендуем вам выполнить обновление из диспетчера пакетов Unity для лучшей интеграции с Visual Studio UnityEngine.Debug: LogWarning (object) Microsoft.Unity.VisualStudio.Editor.VisualStudioIntegration: HandleListRequestCompletion () Разве это влияет на такое поведение? КТО ПОДСКАЖЕТ ГДЕ вообще обновить ДО ЭТОЙ ВЕРСИИ!?
Привет! Я тебе сейчас скину комент человека у которого была такая же проблема: Персонаж после запуска взлетает в воздух с первой анимацией. Пока не знаю с чем это связанно, кто знает помогите. Maximple Тебе надо убрать галочку с Apply rootmotion и все должно стать ок) Forever Metal @Maximple Убрал, персонаж исчезает. Мельком увидел что он вверх перемещается очень быстро. Maximple @Forever Metal Тогда я думаю ты в скрипте умножаешь координату Y на speed каждый кадр. Попробуй убрать умножение на speed и если сработает, то в этом проблема. Ему вроде помогло)
@@Maximple посмотрю оке спс, четкие видосы не останавливайся готов спонсировать канал! И еще а где можно с тобой поговорить или показать скрины если что?!
@@oldborodach Спасибо! Ты можешь со мной связаться через Discord и поддержать канал можно через Donationalerts. Ссылки на Discord и Donationalert у меня в шапке канала если что.
Все же доделал я его, но в чем причина этой ошибки кто подскажет? Assets \ Scripts \ NinjaController.cs (8,23): предупреждение CS0108: «NinjaController.rigidbody» скрывает унаследованный член «Component.rigidbody». Используйте новое ключевое слово, если предполагалось скрытие. Как исправить!
@@oldborodach Мне кажется это всего лишь предупреждение, что значит его исправлять нет необходимости. Вроде это значит что тебе нужно поменять название переменно rigidbody на что то еще ( rb, playerRigidbody или на что то похожее)
интересно, почему уже второе видео по списку не показывает как делать управление мышкой?)) а показывает вообще какие то там анимации, хотя в названии видео - управление)
@ali gad по моему в моем вопросе уже есть ответ. К тому же ты конечно вовремя пишешь, я писал это 3 месяца назад. В вопросе что я написал? Где управление, если автор показывает только анимации. Есть разница между управлением и анимациями? Тебе самому интересно это? Писать ответ комменту который написали 3 месяца назад? Мне кажется моя реакция как раз самая подходящая была. В данном случае.
Подскажите мне в чем может быть проблема Я делал всё как в видио но мой персонаж не двигается он ходит во все направления как нужно но нет анимации бега он просто скользит
персонаж начинает лететь вверх, а если заморозить ось Y, то после пары шагов останавливается и может только крутиться, что делать? P.S. вот код using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerController : MonoBehaviour { private Animator animator; private Rigidbody rigidbody; public float rotationspeed = 10f; public float speed = 2f; // Start is called before the first frame update void Start() { animator = GetComponent(); rigidbody = GetComponent(); } // Update is called once per frame void Update() { float h = Input.GetAxis("Horizontal"); float v = Input.GetAxis("Vertical"); Vector3 directionVector = new Vector3(h, 0, v); if (directionVector.magnitude > Mathf.Abs(0.1f)) { transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.LookRotation(directionVector), Time.deltaTime * 15); } animator.SetFloat("speed", Vector3.ClampMagnitude(directionVector, 1).magnitude); rigidbody.velocity = Vector3.ClampMagnitude(directionVector,1) * speed; } }
Привет! Тебе надо написать: if(directionVector.magnitude > Mathf.Abs(0.1f)){ transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.LookRotation(directionVector), Time.deltaTime * 10); } Это строка значит что если наша длина вектора движения (которая зависит от того нажимаем ли мы на клавиши движения) больше чем 0.1 - что просто маленькая величина вектора, то мы хотим поворачивать персонажа в направлении этого вектора (в направление движения). По логике должно работать) Скопируй и вставь как я написал выше👍 Напиши если получится/ не получится
@@funtazygg Я нашел ошибку) Над if (directionVector.magnitude > Mathf.Abs(0.1f)) удали transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.LookRotation(directionVector), Time.deltaTime * 15); У тебя просто эта строка написана до и в if, а должна была быть только в if👍
У меня проблема.... если я напишу rigidbody GetComponent();, то мне выдаст ошибку, что двуточие не нужно, а когда уберу его, то будет ошибка, и скажут, что оно нужно.
исходник: using UnityEngine; public class Moved : MonoBehaviour { private Animator animator; public float speedFPS=2f; public float RotationSpeed=10f; private Rigidbody rb; // Start is called before the first frame update void Awake() { rb=GetComponent(); animator=GetComponent(); } void Movment(){ float h=Input.GetAxis("Horizontal"); float v=Input.GetAxis("Vertical"); Vector3 move=new Vector3(h,0,v); if(move.magnitude>Mathf.Abs(0.05f)) transform.rotation=Quaternion.Lerp(transform.rotation,Quaternion.LookRotation(move),RotationSpeed*Time.deltaTime); animator.SetFloat("Speed",Vector3.ClampMagnitude(move,1).magnitude); rb.velocity=Vector3.ClampMagnitude(move,1)*speedFPS; } // Update is called once per frame void Update() { Movment(); } }
@@matrrroskinstudio Ошибка была в том, что у автора "speed" написано с маленькой буквы. Попробуй написать с большой в: animator.SetFloat("Speed", Vector3.ClampMagnitude(directionVector,1).magnitude); Сработать должно
Люди, помогите пожалуйста. У меня почему-то не запускается эта игра (ну в этом месте где сама игра делается). Просто я впервые игру делаю на Юнити. Ответьте почему так пожалуйста!
У меня было также. Пока несколько раз не пересмотрела видео. Смотри видео на начале, когда он про аниматор рассказывает. Проверь все ли у тебя совпадает.