Как просто написать 2D игру-платформер на Unity [GeekBrains]
ฝัง
- เผยแพร่เมื่อ 20 ก.พ. 2018
- Начни карьеру с бесплатного курса "Основы программирования" goo.gl/jTP4nP
Пишем 2D игру-платформер на Unity.
На вебинаре мы:
- Создадим небольшой 2D-платформер с помощью движка Unity, языка C# и готовых спрайтов из Unity Asset Store.
- Настроим сцену и камеру, поработаем с коллайдерами и триггерами, научимся создавать префабы и увидим, как они упрощают работу.
- Научим персонаж передвигаться по уровню, а камеру следить за ним. Превратим набор картинок в спрайтовую анимацию.
- Сделаем переходы между сценами с игровыми уровнями.
- Добавим врагов, монетки для сбора и препятствия.
- Создадим интерфейс с индикатором жизни персонажа.
Для прохождения вебианара скачайте и установите актуальную версию Unity по ссылке: store.unity.com/ru/download?r...
Подписывайся на наш канал и смотри новые видео первым: / progliveru
Проходи бесплатные курсы: goo.gl/4gG8TL
Выбери профессию: goo.gl/WSdYSE
Смотри вебинары: goo.gl/bBVKcb
Читай статьи: goo.gl/XfJNqc
Проверяй знания: goo.gl/gqKSsw
ВКонтакте geekbrainsru
Facebook / geekbrains.ru
Одноклассники ok.ru/geekbrains
Telegram t.me/geekbrains_ru
Instagram / geekbrains.ru
#unityигрыобучение #разработкаигр #unityигры #играплатформер #geekbrains #программирование #курсыпрограммирования
Очень помогло, пасеба бальшое)
Смотрел на скорости 1,75. Для новичков это видео полезно, спасибо.
лутше 1.5
Спасибо! Первый нормальный урок, который объясняет основы. Буду дальше разбираться...
Срочно продолжение))
И мы за 2 часа воды научились ходить и прыгать, охеренно
ахахах)
А ты чего ожидал, то что ты за 2 часа сможешь шутер на все века сделать? Я хоть не шарю в програмировании но я шарю за логику и у тебя логика -
Всем кому лень писать! я прошел до 1:45
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Chacter : MonoBehaviour {
public int lives = 3;
public float speed = 4.0f;
public float jumpforce = 1.0f;
public Rigidbody2D PlayerRigidbody;
public Animator charAnimator;
public SpriteRenderer sprite;
bool OnGround;
private void Awake()
{
PlayerRigidbody = GetComponentInChildren();
charAnimator = GetComponentInChildren();
sprite = GetComponentInChildren();
}
void Start()
{
}
void Move()
{
Vector3 tempvector = Vector3.right * Input.GetAxis("Horizontal");
transform.position = Vector3.MoveTowards(transform.position, transform.position + tempvector, speed * Time.deltaTime);
if (tempvector.x 1;
Debug.Log(colliders.Length);
}
private void FixedUpdate()
{
CheckGround();
}
void Update()
{
if (Input.GetButton("Horizontal"))
{
Move();
}
if(OnGround && Input.GetButton("Jump"))
{
jump();
}
}
}
ты очень помог
Для таких как вы есть отдельное место в раю
Shummat я на тебя подпишусь
храни тебя бог котенок ты мой
Тебе отдельные врата в раю :)
Было бы шикарно, если бы вы добавили таймкоды
как вводная про камеру и анимацию урок полезный. спасибо автору и удачи. а вот остальное придеться искать у англоязычных и смотреть справочник, который тоже на англ. если хотите что-то по сложнее вам этого точно не хватит.
Спасибо огромное!!❤️Я не знаю С# вообще, но смог сделать управление игроком)
ты смог списать у него , а понять вряд-ли бы смог.
@@user-oj9fe8cn8s подскажи, если знаешь, где можно выучить этот язык, я искал и нигде не нашёл
Вы это продаёте ещё ? Серьезно ?
здравствуйте! я видел меньшую кодировку практически в две строки , чтоб игрок бегал . это возможно ? и в чем разница?
спасибо за видео
В своих видео рассказываю подробно про каждый этап создания 2d игры, если возникнут вопросы - добро пожаловать ;)
Надо было ссылку сразу оставить
Это ж запись стрима господа че такие стамые? Отсюда и паузы.
Здравствуйте!
Подскажите пожалуйста как сделать так бою персонаж двигался вместе с платформой, если та движется разумеется, а не стоял на месте пока не спалится с нее?. Спасибо!
Видео оставляет желать лучшего, но были затронуты темы которые важны в 2D разработки.
- Сделаем переходы между сценами с игровыми уровнями. - Добавим врагов, монетки для сбора и препятствия. - Создадим интерфейс с индикатором жизни персонажа.
Это где? Сделали меньше чем на 50%.
Будет значит вторая часть?
@@synthesisone2787 балаболишь не смотря ни одного его видео. Найс играешь.
Bladeray Четсно ? Научили чему нибудь ? Я просто подумываю тоже купить
@Ray4 ха, спасибо) нашел слив) там кстати есть 3 и 4 курс) 5го правда не запилили)
Ну видно видно что человек не подготовленный.. до минуты 30й можно промотать сразу, так как он ищет где какое меню, файл не загрузился, и ещё всякие косяки... а потом этот момент с кодом (большая часть урока) вообще не очень все понятно что к чему, и прыгать так у него и не вышло заставить, если бы он заранее подготовил урок, написал бы в стороне код который точно работает были бы другое дело. С анимацией лажа, не знал как переход сделать.
У меня нормально так и не получилось чтоб он прыгать стал правильно, кстати, я 3 раза пересматривал и проверял все.
Но самое, что просто убило: мы и так уже сидим 2 часа и все не успело, не не страшно... Чё? Кто тебе доктор, что ты не подготовился и все время куда-то отвлекался, файл скачать не мог, и код написать не получилось? Я б за такой урок деньги потребовал обратно + ещё и 2 часа жизни в мусорку!
а что если юнити говорит , что кнопки импут не назначены хотя они назначены ?
КОПИЯ!
Вопрос у меня в другом, если ты говоришь что "время подходит к концу", кто тебе мешает записать ещё час-два? или сделать это на другом стриме, чей повтор тоже записать?
в чём проблема дотянуть игру?
если я чего-то не знаю отпишите, может 2 часть есть.
Спрайты не отображаются после бэкграунда
А мне все понрав. Снимай побольше таких роликов))))
на С# пишешь да ?
А как дальше? Монетки, противников делать, сохранять игру, делать уровни, герой погибает, жизнь героя. Есть видеоуроки?
Только одно слово Flatingo ютуб канал
35% - знания
65% - вода
Даа, верно!
это был стрим, без нарезок и подготовленного сценария!
Это онлайн вебинар, ало
30% - инфа
60% - вода
10% - кофе :)
Всё отлично объясняют
А где ссылка на файл?
Не подскажете, почему при подстановке фона, когда перемещаю его налево-направо, он начинает моргать? Как это исправить?
Если бы он не лил воды, то можно было бы уложиться в 40 минут
это стрим был если это был видос, то за мин 30 он бы всё обьяснил
Создал платформу, персонажа, при Play, персонаж исчезает! Что делать?
1:05:18- для себя
Скучаю по 10 мин роликам flatingo ((((
Nightscream ты знаешь что делать, но все слишком долго много лишний не нужный информации.
Ребят,помогите почему я дописал скрипт, нажал играть,а у меня не двигается персонаж
Привет, спасибо большое, теперь я уверен, что игры я создаю хорошие
Надо слушать на скорости 1.5)
дайте пожалуйста ссылку на самый первый асет
Помогите пж я иду человечком влево и у меня он телепортируется вперёд за камеру а камера она же двигается
CS1519 в самом начале кодинга у меня unity начал выдавать ошибку CS1519. по документации лазал пробывал править,но он то одно то другое то третье выдает.
Який затянутий
Что делать если нету такого что на 1:27:20 типо там где Character, после написания кода, там этого всего нету...
У меня тоже
@Slimek_ shop Скиньте код. Мало ли вы не указали переменные публичными
Проверь, что имя класса твоего скрипта соответствует имени в юнити. мог переименовать. Тогда названия будут отличаться и юнити не будет видеть. Вторая ошибка. У этих полей мог указать private, вместо public
the associated script can not be loaded. please fix any compile errors and assign a valid script, после сохранения скрипта выдает написал все в точь точь как на видео почему как исправить?
Бесконечно можно смотреть на то, как течёт вода! Благо тут её много:)
1:35:00 Серьезно??? Вот так? А не проще было просто создать булевую переменную, и в методе OnCollisionEnter2D, прописать true этой переменной, и если этот бул = true то выполняется прыжок, и сразу устанавливается false.
Что делать, если пишет: приложение запущено в оффлайне
+
+
Попробуй зробити новий проект.
а можно сделать фон типо просто картинку на самый задний фон и не добавлять коллайдеры и физуику и все типо
Хорошо я за это деньги не отдал)
да, гик браинс это шлак полный
Я кста купил видео курс по юнити и там всё тоже самое рассказано понятно и без воды. Вывод: на знаниях экономить не надо. Лучше потратить 1000, научиться, потратить меньше времени и остаться без пробелов в знаниях.
@@alexbal544 какой курс купил?
@@alexbal544 где купить курс?
А я вот учусь на программиста игр, можешь зайти на мой канал и посмотреть чему я уже начился
Вопрос , на unreal engine сложнее сделать такую игру?
change attack говорят с++ очень сложный
unreal engine для сложных 3д игр с крутой графикой там больше функций и сделать такую игру будет сложнее но не настолько
Серьезно 26 минут загружать ассет?
Что делать если я не могу создать Prefab?
Перестать прогать и идти варить кофе.
Добрый день, 50 минута, при создании анимации при переходе к 1-му кадру персонаж мерцает, видно и в scene и game. Куда копать не знаю. Все делаю как на видео...
уфф, разобрался
@@user-io6rn5hf3f а в чем была причина если не секрет?
@@Yan-ig2fz, после нарезки изображения на отдельные спрайты, (44 минута) видимо на первом спрайте в строке Pivot выбрал не Center и координаты сбились. Исправил тамже в Спрайт Эдиторе.
@@Yan-ig2fz Нашел при просмотре в 3D, при анимации все спрайты находяться в одном месте, а 1-ый появляется совершенно в другом и поэтому и получается такое мигание.
конечно, урок онлайн. ко автор мог бы к нему и приготовится, чтоб не занимать время на то чтоб самому находит что и как делать. сложилось впечатление, что он сам куда-то подсматривал.
проект можно было приготовить чтоб код работал. потому что треть ролика Уговаривали персонажа прыгать. + какая проблема код сохранить в текстовом файле и дать ссылку?
короче мое мнение что вчера зря потратил день.
а фраза что мы не все успели сделать за 2 часа, но это не страшно... и наверно это сказано тем, кто деньги заплатил) прикольно
Шо делать если камеры нема ну нету тоесть ?
а какая версия юнити?
А вот если у меня нет кнопки import ? Что делать ?
Как объединить спрайты?не понятна та часть где пропал первый спрайт
Спрайт пропал, поскольку ушел на более низкий слой, изменив z, его вернули выше фона. А объединение происходит в объекте platform
вопрос из 2019 вы проводили стрим? ну просто 2 часа долговато на 1 видео
эмм да
как ограничить полет?? что бы прыжок был на конкретное расстояние?
я знаю, надо в Collider2D[] colliders = Physics2D.OverlapCircleAll(transform.position, 1f); написать 1, а не 2 в силе прыжка
[39:29] почему когда пытаюсь создать префаб, "Prefab Variant" не работает (надпись серая и не нажимается)?
Я сделал всё просто. Перенёс платформу туда. Всё WORK/
Спасибо! Именно так и делается в новой версии, перетаскивание создаёт префаб.
Я хуже этого ничего не видел. Офигеть. Большое время он тупо поставил паузу
Вставил блок с травой мид в платформу, а у меня вместо большого блока вылезла какая то рамка.
Скажите пожалуйста, почему у меня скрипт не работает. Пишет ошибка 1:18:44
Скинь код
@@k.. я сейчас не дома
@@yellowking6289 потом скинеш
@@k.. скинул
@@sleepyNovember_project Куда скинул?
у меня он вообще не пошелсрочно ответ как исправить он не ходит что делать ?
Нифига не понял, но ОЧЕНЬ интересно!!)
Ты значит глюпый не много если не понел
Всем кому лень писать! я прошел до 1:45
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Chacter : MonoBehaviour {
public int lives = 3;
public float speed = 4.0f;
public float jumpforce = 1.0f;
public Rigidbody2D PlayerRigidbody;
public Animator charAnimator;
public SpriteRenderer sprite;
bool OnGround;
private void Awake()
{
PlayerRigidbody = GetComponentInChildren();
charAnimator = GetComponentInChildren();
sprite = GetComponentInChildren();
}
void Start()
{
}
void Move()
{
Vector3 tempvector = Vector3.right * Input.GetAxis("Horizontal");
transform.position = Vector3.MoveTowards(transform.position, transform.position + tempvector, speed * Time.deltaTime);
if (tempvector.x 1;
Debug.Log(colliders.Length);
}
private void FixedUpdate()
{
CheckGround();
}
void Update()
{
if (Input.GetButton("Horizontal"))
{
Move();
}
if(OnGround && Input.GetButton("Jump"))
{
jump();
}
}
}
а у меня нет кнопки импорт,только довлоад.Она кста не нажимается
Что делать если vs не видит ригидбади? Вовсе его не выделяет как функцию и тд
ошибка в скрипте,лично я переделывал сурипт и потом все заработало но теперь не видет Awale
Ем а что делать если спрайт в сцене есть а когда запускаю проект спрайта нет и в помине есть кто живой подскажите?
Почему у меня rifidbody не подсвечивается в подсказках и просто так, точно так же и vector
Потому что rifidbody не существует, есть только rigidbody.
Где продолжение
У меня проблема с Prefab . Я его просто не могу создать, нажимаю Create а Prefab Variation серого цвета, словно я не могу его создать, подскажите пожалуйста, в ч'м проблема
тоже самое
у меня то же самое. решил просто вопрос. просто выделил что нужно и просто перетащил в папку где префабы будут. получилось
@@user-ir4qr6vr1w Спасибо большое! Тоже нифига не получалось, уж думала бросить все) перетащила Platform в папку Ресурсы и вуаля)
@@vikavictoriya удачи)
Почему в create нету prefab
Пишет RigidBody2D не найден и ошибку выдает. Ц
Помогите, у меня персонаж при прыжке улетает вверх с концами
поставь гравитацию
а где ссылка то????
Спасибо конечно за урок, но такое...
Всем кому лень писать! я прошел до 1:45
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Chacter : MonoBehaviour {
public int lives = 3;
public float speed = 4.0f;
public float jumpforce = 1.0f;
public Rigidbody2D PlayerRigidbody;
public Animator charAnimator;
public SpriteRenderer sprite;
bool OnGround;
private void Awake()
{
PlayerRigidbody = GetComponentInChildren();
charAnimator = GetComponentInChildren();
sprite = GetComponentInChildren();
}
void Start()
{
}
void Move()
{
Vector3 tempvector = Vector3.right * Input.GetAxis("Horizontal");
transform.position = Vector3.MoveTowards(transform.position, transform.position + tempvector, speed * Time.deltaTime);
if (tempvector.x 1;
Debug.Log(colliders.Length);
}
private void FixedUpdate()
{
CheckGround();
}
void Update()
{
if (Input.GetButton("Horizontal"))
{
Move();
}
if(OnGround && Input.GetButton("Jump"))
{
jump();
}
}
}
Сделал скрипт движения но в консоль выдаёт "Input Button Harizontal is not setup"
Horizontal. У тебя ошибка
@@StepANich91 как её решить?
@@user-ii1zv6no2z Написать не Harizontal а Horizontal
круто
Добавил куст к платформе но он не клеится на платформу а прячется за платформой Как Исправить ?
Переделал теперь некоторые ассеты как будто не видят коллайдера в среднем квадрате платформы хотя кустик на тот квадрат становится нормально.
У вас довольно базовые вопросы, советую подтянуть основы. Максимально емкие видео можно найти у меня на канале. Новое видео каждый четверг.
переходишь в режим 3д и перетаскиваешь куст вперёд по оси z
пиздец, префаб просто не включается, объекты не объединяются. Дела. то же самое, как на видео, но получается совершенно другое...
у меня тож так
Левую и правую платформу перетащи прям на platform hierarchy
подготовка к уроку у преподавателя на грани фантастики! шлак
ЗЫ
спасибо комментариям, что не потратил много времени на это видео
для новичков отличный материал! это лучшее даже что я вообще нашла на ютубе по этой теме
видео отличное затянутое но это и хорошо , все получалось и анимация и все до того как начал писать скрипт в вижуал студия все слово в слово буква в букву , но увы программа Uniti не хочет принимать этот скрипт выдает ошибки на 1:12:00 сохранил скрипт все слово в слово но не вижу публичные переменные в программе как это у вас в видео , а увидел ошибку CS1585 и CS1519 а также CS1002 сама Visual Studio 2019 ошибок не показывает наоборот написано что ошибок синтаксиса проблемы не найдены , все записано буква в букву даже строчка в строчку точки с запятой , ну все , а в ответ программа Unity не дает результата только ошибки
1:18:08 я всё написал, как ты, но у меня спрайт падает сквозь текстурку, шо делать?
А на текстурку наложил бокс колайдер?
Лучше дайте толковый совет бокс коллайдер не помогает, он проваливается находясь на одинаковом нулевом уровне z
Такая же проблема, есть решение? Box collider наложен.
@@user-ks8fm9fd5f может ты случайно на коллайдере галочку isTrigger поставил?
напишите кто ни буть этот скрипт здесь 1:17
У мен такая шняга вылезает "All complite errprs heve tobe fixed before you can enter playmode!"
такаяже после скрипта
@@riado135 ошибка в коде скрипта
1:18:06 нажала play и персонаж упал сквозь платформы помогите:(
Видишь у него там SPRIT CRIT чёт там вот его тебе нужно дабавить
И всё
HELP!!! 39:00 Не могу создать Prefab, он недоступен - текст написан серым цветом. Что делать???
По идее у тебя стоит более современная версия и тебе может помочь следующее: У тебя снизу слева есть вся иерархия папок начинающаяся с Assets. Найди там папку Prefabs и перетащи свой объект туда, а уже из него по идее сколько угодно раз на сцену. Если папки Prefabs нет можешь пробовать ее создать, только делай через сам юнити, он вроде как распознает ее.
@@frostprime6832 что делать если нету прифаба вообще
@@k0ntr Ты создал допустим монстра. Бери его мышкой и тяни в папку для префабов.
@@frostprime6832 папки нету самой
@@k0ntr создай. В папке Assets. Назови Prefabs. Больше отвечать не буду
Почему я у всех спратов изменил размер, а когда перенашу, то спрайты диганские
тамде анимация нету кнопки creat
где диск
Автор местами подвисает))
1:00:00
не усните при просмотре,а лучше найдите другое видео
дай ссылку!
Всем кому лень писать! я прошел до 1:45
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Chacter : MonoBehaviour {
public int lives = 3;
public float speed = 4.0f;
public float jumpforce = 1.0f;
public Rigidbody2D PlayerRigidbody;
public Animator charAnimator;
public SpriteRenderer sprite;
bool OnGround;
private void Awake()
{
PlayerRigidbody = GetComponentInChildren();
charAnimator = GetComponentInChildren();
sprite = GetComponentInChildren();
}
void Start()
{
}
void Move()
{
Vector3 tempvector = Vector3.right * Input.GetAxis("Horizontal");
transform.position = Vector3.MoveTowards(transform.position, transform.position + tempvector, speed * Time.deltaTime);
if (tempvector.x 1;
Debug.Log(colliders.Length);
}
private void FixedUpdate()
{
CheckGround();
}
void Update()
{
if (Input.GetButton("Horizontal"))
{
Move();
}
if(OnGround && Input.GetButton("Jump"))
{
jump();
}
}
}
чувак, а как именно сделать скрипт приватным ?
А что никого не смутило отсутствие курсора?!!!!!
Выползает вот такая ошибка
Assets\skript\Character.cs(32,10): error CS1513: } expected
в таком коде
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Character : MonoBehaviour
{
public int Lives = 3;
public float speed = 4.0f;
public float jumpfroce = 1.0f;
public Rigidbody2D PlayerRigidbody;
public Animator charAnimator;
public SpriteRenderer sprite;
private void Awake()
{
PlayerRigidbody = GetComponentInChildren();
charAnimator = GetComponentInChildren();
sprite = GetComponentInChildren();
}
void Start()
{
}
void Move()
{
Vector3 tempvector = Vector3.right * Input.GetAxis("Horizontal");
transform.position = Vector3.MoveTowards(transform.position, transform.position + tempvector, speed * Time.deltaTime);
if(tempvector.x < 0);
{
sprite.flipX = true;
}
else
{
sprite.flipX = false;
}
}
void Update()
{
if (Input.GetButton("Horizontal"))
{
Move();
}
}
}
_____________________________________________________________________
или Выползает вот такая ошибка
Assets\skript\Character.cs(33,9): error CS0201: Only assignment, call, increment, decrement, await, and new object expressions can be used as a statement
в этом же коде если добавить кавычки в else на вот так ("else");
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Character : MonoBehaviour
{
public int Lives = 3;
public float speed = 4.0f;
public float jumpfroce = 1.0f;
public Rigidbody2D PlayerRigidbody;
public Animator charAnimator;
public SpriteRenderer sprite;
private void Awake()
{
PlayerRigidbody = GetComponentInChildren();
charAnimator = GetComponentInChildren();
sprite = GetComponentInChildren();
}
void Start()
{
}
void Move()
{
Vector3 tempvector = Vector3.right * Input.GetAxis("Horizontal");
transform.position = Vector3.MoveTowards(transform.position, transform.position + tempvector, speed * Time.deltaTime);
if(tempvector.x < 0);
{
sprite.flipX = true;
}
("else");
{
sprite.flipX = false;
}
}
void Update()
{
if (Input.GetButton("Horizontal"))
{
Move();
}
}
}
____________________________________________________________
пытаюсь научится делать игру хотя бы понять азы в старте запуска персонажа а не как не получается
чей помоги разобраться коль не сложно
эм... а по твоему в void Move не нужно ставить } ??
@@svizda5149 нужно. И оно было решено. Но спасибо за то что ответил)
Я уже 10 -того ютубера смотрю не двигается мой персонаж а я вроде правильно всё сделал кучу раз перепроверил что делать я так старался и зря что ли
У меня было такая же херня, но я решил.
Берешь, скачиваешь visual studio с официального сайта (бесплатно) и устанавливаешь дополнительные с окончанием.NET, и все
Samikaru YT у меня получилось и без дополнительных скачиваний я у другого ютубера код списал и получилось
Tikshal я же сказал я давно уже все сделал все получилось
Я вас в рекламе видел
Не пойму какого хрена у автора префаб создается, а у меня нет. Хотя все до мелочей делаю как у автора
по ходу в бесплатной версии нельзя создавать префабы
@@nintek ды все там можно
В более новых версиях создание префабов осуществляется простым перетягиванием объекта в иерархию
Это GeekBrains - у них все курсы такие. Платные порой еще даже хуже.
То самое чувство когда твой комп тянет ели как юнити и спустя 3 часика вырубается с синим экраном смерти
Этот курс не оптимизирован
2019?
2020
особенно понравился момент со скриптами. Чет там быстро вставляет, а нихуя не объясняет как он так быстро делает, зачем он так делает))
И главное у слушателя зачастую в итоге нифига не работает.
Всем кому лень писать! я прошел до 1:45
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Chacter : MonoBehaviour {
public int lives = 3;
public float speed = 4.0f;
public float jumpforce = 1.0f;
public Rigidbody2D PlayerRigidbody;
public Animator charAnimator;
public SpriteRenderer sprite;
bool OnGround;
private void Awake()
{
PlayerRigidbody = GetComponentInChildren();
charAnimator = GetComponentInChildren();
sprite = GetComponentInChildren();
}
void Start()
{
}
void Move()
{
Vector3 tempvector = Vector3.right * Input.GetAxis("Horizontal");
transform.position = Vector3.MoveTowards(transform.position, transform.position + tempvector, speed * Time.deltaTime);
if (tempvector.x 1;
Debug.Log(colliders.Length);
}
private void FixedUpdate()
{
CheckGround();
}
void Update()
{
if (Input.GetButton("Horizontal"))
{
Move();
}
if(OnGround && Input.GetButton("Jump"))
{
jump();
}
}
}