Съдържание:

Arduino Game Controller със светлини, отговарящи на вашата Unity игра :: 24 стъпки
Arduino Game Controller със светлини, отговарящи на вашата Unity игра :: 24 стъпки

Видео: Arduino Game Controller със светлини, отговарящи на вашата Unity игра :: 24 стъпки

Видео: Arduino Game Controller със светлини, отговарящи на вашата Unity игра :: 24 стъпки
Видео: CS50 2014 - Week 7 2024, Декември
Anonim
Arduino Game Controller със светлини, отговарящи на вашата Unity игра
Arduino Game Controller със светлини, отговарящи на вашата Unity игра

Първо написах това с думи. Това е първият път, когато използвам инструкции, така че когато казвам: напишете код така, че знайте, че имам предвид изображението в горната част на тази стъпка.

В този проект използвам 2 arduino, за да изпълня 2 отделни бита код, тъй като имах проблеми с работата само с един

Това са Уно и Леонардо

като цяло това е, което ще ви е необходимо, за да създадете макет на този проект.

· 7 бутона за натискане

· 23 джъмперни проводника

· 1 кабел arduino Leonardo + usb

· 4 резистора · 4 светодиода

· 1 кабел arduino uno + usb

· 2 дъски

Стъпка 1: Свързване на контролните бутони към Arduino

Свързване на бутоните за управление към Arduino
Свързване на бутоните за управление към Arduino

Какво ще ви трябва, за да свържете тази част:

· 7 бутона за натискане

· 14 джъмперни проводника

· 1 кабел arduino Leonardo + usb

· Макет

Бутоните са доста лесни за свързване, но могат бързо да се превърнат в бъркотия за показване под формата на изображение.

· Първо поставете бутоните в позициите, които отбелязах на изображението по -горе.

· Второ, искате да свържете джъмпер от наземния слот на arduino Leonardo в минусовия ред на дъската.

· Сега свързвате джъмперите от всяка точка на минус реда към реда, който е в съответствие с десния щифт на вашия бутон. това ще му даде енергия.

· След това искате да свържете джъмпер проводник от ред, който е в съответствие с левия щифт на вашия бутон, към цифровите входни слотове на Leonardo. За бутоните тук използвах слот 2 - 3 - 4 - 5 - 6 - 7- 8

Показах само проводника, който отива към вход 8 на изображението, защото става много объркана картина, за да ви покаже всички проводници, пресичащи се един друг.

Стъпка 2: Кодиране на Arduino Leonardo:

Кодиране на Arduino Leonardo
Кодиране на Arduino Leonardo

Така че, за да ви кажа причината, поради която използвам Леонардо за това. Това е така, защото има определен чип, който Uno няма, което кара компютъра да го разпознае като USB входно устройство. Подобно на клавиатура. Което ни позволява да направим нещо, което прави живота ни като програмисти за този проект адски много по -лесен. Емулация на клавиатурата. Ще накараме компютъра да си помисли, че натискаме определени клавиши на клавиатурата, когато всъщност натискаме бутони на нашия контролер.

Сега ще ви разкажа, помислихте кода стъпка по стъпка.

Първо, най -отгоре включваме Keyboard.h. Това ще ни позволи да използваме функциите на клавиатурата, които ще използваме в нашия код.

Стъпка 3:

Образ
Образ

След това трябва да определим слотовете за цифров вход, които ще използваме на

Леонардо за всеки бутон.

Аз също нарекох всеки от тях след ключа, който ще подражавам.

Стъпка 4:

Образ
Образ

Оттам влизаме във функцията за настройка. Това казва на

arduino какво прави при стартиране.

първо пишем Serial.begin, който ще отвори серийния порт и зададе скорост на предаване на данни на 9600 bps

и ние определяме, че всички са именувани щифтове като входове.

Стъпка 5:

Образ
Образ

И накрая пишем нашата циклична функция, която ще провери дали

бутоните се натискат и казват на arduino как да реагира на това.

Първо пишем Keyboard.begin, който ще каже на arduino, че той трябва да се грижи за нас, използвайки функциите на клавиатурата

Стъпка 6:

Образ
Образ
Образ
Образ
Образ
Образ

След това за всеки бутон пишем оператор if/else, който изглежда така

Ето какво казах на arduino тук: Ако левият ми бутон е натиснат на контролера, накарайте компютъра да мисли, че натискаме клавиша „а“и ако това не е така, накарайте го да мисли, че сме пуснали ключа.

По принцип повтаряте този блок код за всеки бутон на вашия контролер. с промени за всяка променлива и ключовете, които променливата трябва да подражава

Стъпка 7:

Образ
Образ

Ключовете, които казахме на компютъра да натисне тук, са W - A - S - D които

са почти стандарт за движение в компютърни игри и E-Q-и интервалът, който в този код е разпознат като „„ кои са бутоните, които използвам за вземане-отхвърляне и задействане в моята игра. Чувствайте се свободни да ги промените на каквито и да е клавиши, които смятате, че работят по -добре за вашата игра/контролер.

След това накрая казваме на arduino да спре проверката, която Keyboard.end

Стъпка 8: Кодиране на движението в единство:

Кодиране на движението в единство
Кодиране на движението в единство

Първо нека ви кажа, че правя това за 2d игра, така че

примерите, които ще видите, са създадени за това. Основно означава, че когато използвам vector2, ако работите в 3d, ще използвате vector3. защото трябва да се притеснявате за допълнителното измерение на движението в 3d.

Сега причината да използвам емулация на клавиатура от страна на arduino е, че Unity има нещо вградено, за да разпознава клавишите на клавиатурата, които можем да използваме.

Ако отворите проекта си в единство, отидете на Редактиране -> Настройки на проекта -> Въвеждане. Можете да видите във вашия инспектор, че зарежда мениджъра за въвеждане. Където, ако кликнете върху Axes, можете да видите, че се отварят цял куп входни имена, които обикновено се използват за компютърни контролери, като тези, които правим сега. Двата входа, които ще използваме, са хоризонтални и вертикални, които проверяват за вас, познахте W-A-S-D.

Първо искате да направите обект във вашата йерархия на сцени на единство, който ще бъде вашият играч. В моя случай това е забавно малко момче. Това може да бъде всичко, от което се нуждаете, но за целта на моята игра направих този човек.

Стъпка 9:

Образ
Образ

Искате да дадете на този играч 2 неща. Кутиен колайдер 2d и

a Rigidbody 2d и ги редактирайте така, че да са като изображението по -горе.

Стъпка 10:

Образ
Образ

След това искате да отидете в папката с проекти и да създадете

C# скрипт. Което нарекох PlayerMovement.

В този скрипт ще дефинирате 2 променливи. Публично плаване, което наричам moveSpeed. Това ще определи колко бързо ще се движите. И частен Rigidbody2D, който наричам RigidPlayer. Което ще търси вашите играчи rigidbody.

Не забравяйте да отидете в редактора на единството, щракнете върху плейъра си, добавете този нов скрипт, като го плъзнете към инспектора и зададете числова стойност за moveSpeed.

Стъпка 11:

Образ
Образ

сега във вашия Start () искате да направите едно нещо и това е да

уверете се, че вашият RigidPlayer може да намери вашия платец rigidbody 2d. Правите това със следния ред код:

Стъпка 12:

Образ
Образ

След това преминаваме към update (). Ето къде отиваме

за да накарате играча да се движи.

ние правим това с доста проста операция if, която ще разглежда отрицателните и положителните ключове от хоризонталната (AD) и вертикалната (SW) и ще я приложим като число, за да принудим да поставим нашето твърдо тяло 2d, за да вкараме играча си посока. Това число ще бъде умножено по променливата moveSpeed.

Стъпка 13:

Образ
Образ

И накрая, искате да сте сигурни, че вашият плейър спира да се движи, когато

нищо не натискаш Това харесваш така:

Сега, ако искате да използвате вашите 3 други бутона за всичко, което правите с това, ако:: (Input. GetKeyDown (Keycode. Space))

за интервал и вместо интервал поставете буквата на другите клавиши, които сте избрали да използвате за другите клавиши.

Стъпка 14: Свързване на светлини към Arduino

Свързване на светлини към Arduino
Свързване на светлини към Arduino

·

Какво ще ви трябва, за да свържете тази част:

· 9 джъмперни проводника

· 4 резистора

· 4 светодиода

· 1 кабел arduino uno + usb

· Макет

Свързването на светлините ще се извърши чрез Uno.

В крайна сметка ще изглежда като това изображение по -горе:

Свързвате резисторите към дългата страна на светодиодите. След това свързвате джъмпер от цифров пинов номер на uno към резисторите. в този случай използвах цифрови слотове за щифтове 9 -10 -11 -12, тези цифри ще бъдат от значение, когато стигнем до кода за светлините.

Оттам искате да свържете джъмпер от наземния слот на вашия arduino Uno до мястото на дъската ви, както се вижда с черния проводник на изображението по -горе.

След това искате да имате 4 джъмпера, всички да водят в късия край на всеки светодиод

Стъпка 15: Кодиране на Arduino Uno

Кодиране на Arduino Uno
Кодиране на Arduino Uno

Добре, първо ще дефинираме отново нашите променливи

Така че първо кои цифрови входове използваме за нашите светлини. И ние ще направим символ, наречен myCol [20]

Стъпка 16:

Образ
Образ

След това в настройката искаме да направим Serial.begin отново. Поставете всички наши светодиоди на изхода и ги изключете при стартиране.

Стъпка 17:

Образ
Образ

И накрая искате да напишете вашата циклична функция.

Това ще накара Arduino да чете всякакви данни, идващи чрез сериен, докато не се случи едно от двете събития. Открит е или символ за подаване на ред; това се идентифицира с lf, който е зададен на 10 и е първият аргумент или е прочетено определено количество байтове. Това е третият аргумент и за този пример е зададен само един байт. Данните се съхраняват в променливата myCol, която е зададена на char и ограничение от 20. В readBytesUntil това е вторият аргумент. Или друг начин да го обясните е Serial.readBytesUntil (terminatorCharacter, буфер, byteLimit);

И инструкциите if ще гарантират, че определени светлини се включват, когато единството подаде сигнал. В този случай имам 4 различни цветни светлини, така че правя единство изпращане g за включване на зеления светодиод, b за включване на синия светодиод, r за включване на червения светодиод и y за включване на жълтия светодиод.

Стъпка 18: Кодиране на светлини Unity Side:

Кодиращи светлини Unity Side
Кодиращи светлини Unity Side

Оке първо 2 неща, преди да влезем в това.

1. във вашата програма за кодиране на arduino отидете на Инструмент -> Порт -> и ме проверете на кой COM е вашият uno. В моя случай неговият COM3 (това ще бъде важно в кода)

2. в единство Отидете на Редактиране -> Настройки на проекта -> Плейър, след което в инспектора щракнете върху други настройки, отидете на Ниво на съвместимост на Api и го превключете от подмрежа. NET 2.0 към само. NET 2.0

Окей, това е направено. Да влезем в него.

Щракнете с десния бутон върху вашата йерархия и щракнете върху Създай празно.

Това ще бъде празен игрален обект, който просто ще съществува във вашата игра, за да държи един скрипт за нас. Нарекох този обект Init.

Стъпка 19:

Образ
Образ

След това отидете в раздела вашите проекти и създайте нов C# скрипт

и го наречете Изпращане.

Първото нещо, което правите, е да напишете това в редове в използващите раздели на вашия код:

използване на System. IO. Ports;

използване на System. Threading;

това го прави така, че можем да използваме променливата SerialPort

Стъпка 20:

Образ
Образ

в този скрипт ще направим следните променливи. Сега имайте предвид, че имам COM3 там, това може да е различно за вас, както обсъждахме в началото на тази стъпка. Ако е заменено на 3 с номера, който е казал за вас.

Стъпка 21:

Образ
Образ

В началото казваме на скрипта да използва OpenConnection

функция, която ще напишем след малко

актуализацията е по -скоро тест, отколкото всичко, но ако искате да я включите, тя ще тества съобщенията, изпращани до единство. Можете да го игнорирате честно.

Стъпка 22:

Образ
Образ

Добре сега за тази функция OpenConnection. Това е просто голям

ако/else изявление, което поддържа връзката отворена, просто я копирайте като написано и трябва да сте добре.

Стъпка 23:

Образ
Образ

Сега помнете от кода arduino, за който го направих да провери

сигнализира, че единството ще го изпрати.

ами това е мястото, където се случва. В моя случай имам закачени 4 светлини, затова написах 4 функции, които са изключително прости. Всичко, което правят, е, когато са повикани, изпращат писмо до arduino. Когато arduino получи тази буква, тя светва светлината, съответстваща на тази буква.

Стъпка 24:

Образ
Образ

Може би се чудите как да го накарам да нарече това

функция? Е, правите го с един прост ред във всеки от другите си скриптове на C#, които използвате за вашата игра. Изпращане. NameFunctionтук ();. Така например в моята игра играчът има задача да събере 4 цветни кълба. Затова написах малък скрипт, който гарантира, че когато се доближи до един и натисне десния бутон, той го вдига и той изпраща сигнала до arduino, че в този случай Жълтото кълбо е взето. За да знае, добре, трябва да включа жълтия светодиод:

Можете да поставите този ред код навсякъде, където желаете. Ако искате да светне, когато играта започне, поставете го в стартовата функция. Искате да светне, когато умре, поставете го във вашата функция за смъртта на играчите. Експериментирайте малко наоколо. Избирам да направя светлините нещо като потребителски елемент извън играта, за да следя кълбите, които трябва да съберете, без да затрупвате екрана.

Препоръчано: