Како направити прилагођени контролер игре са Ардуином и Унитијем

Како направити прилагођени контролер игре са Ардуином и Унитијем

Да ли сте икада пожелели да дизајнирате сопствени контролер игре? Лакше је него што мислите!





У овом кратком пројекту изградићемо једноставан прилагођени контролер игре за употребу са Унити енгине -ом за игре. Овај контролер ће покретати Ардуино Уно, иако бисте за овај пројекат могли користити и једну од многих алтернатива. Такође ћемо створити основну игру у којој ћете помоћу контролера избегавати падање предмета и успоравати време.





За овај пројекат ће вам требати

  • Ардуино или сличан микроконтролер
  • 1 к 10к Охм отпорник
  • 1 к Тренутни прекидач
  • 1 к Потенциометар
  • Прикључне жице
  • Матична плоча
  • Унити енгине за игре
  • Унидуино додатак из Унити Ассет Сторе (30 УСД)
  • Комплетан код пројекта, у случају да не желите да га испишете (не укључује Унидуино додатак)

Већина ових ствари је доступна у почетном комплету Ардуино. Ако немате почетни комплет, погледајте наш водич за одабир најбољег за вас.





Можете учинити ваш контролер компликованим колико желите, мада ћемо за овај пример поставити потенциометар и дугме - савршено за управљање једноставном аркадном игром.

Склапање вашег контролера

Поставите матичну плочу и Ардуино као што је приказано на доњој слици. Ово ћемо користити као наш контролер игре, иако бисте могли користити готово потпуно исто подешавање као и Уради сам миди контролер такође!



Припрема вашег Ардуина

Када све повежете, повежите свој Ардуино путем УСБ -а. У Ардуино Софтваре ИДЕ идите на Алати> Плоча и Алатке> Порт да бисте изабрали микроконтролер и порт који користите. Ардуино ИДЕ долази у пакету са скицом која нам је потребна, а можете је пронаћи испод Датотека> Примери> Фирмата> Стандардне фирме . Притисните Отпреми и бићете спремни за рад.

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





Постављање вашег пројекта Унити

У Унити, отворите Прозор> Продавница имовине за приступ Унити -овој Ассет Сторе -у из Унити Едитор -а. Претражите Унидуино додатак у Ассет Сторе -у. Овај додатак ће вам омогућити да примате и шаљете податке на и са Ардуино пинова унутар Унитија. Додатак у време писања кошта 30 УСД. Могуће је да бисте урадили овај пројекат без куповине додатка, мада је прилично компликованији и можда ће вам додатак више одговарати.

Овај видео запис од креатора додатка води вас кроз процес тестирања да ли све ради, заједно са првим постављањем. Имајте на уму да ћете можда такође морати да ресетујете уређивач Унити у оперативном систему Виндовс.





Овај исти панел можемо користити за тестирање нашег контролера. Поставите пин Д2 на ИНПУТ и Дигитал. Даље, поставите Пин А5 на АНАЛОГ. Ваш потенциометар и дугме сада би требало да приказују вредности на екрану поред њихових бројева пинова. Напредак!

Сада да направимо нешто што можемо контролисати

Дакле, имамо контролер, али шта ћемо контролисати? Па, могућности су бескрајне, али за данас ћемо створити врло једноставну игру избегавања како бисмо тестирали наш нови систем контроле. Прећи ћемо на подешавање игре прилично брзо, па ако сте потпуно нови у Унити енгине -у, можда ћете пронаћи наш Унити водич за програмирање игара за почетнике корисно да се усредсредите.

Направићемо врло основну игру у којој је ваш циљ да избегнете своју сферу лево и десно како бисте избегли падање коцкица, што ће користити ваш новоизрађени прилагођени контролер.

Направите нову сцену и превуците монтажну јединицу Унидуино из Средства> Унидуино> Монтажни објекти у вашу хијерахију и превуците монтажну јединицу Унидуино у хијерархију. То нам је потребно да бисмо разговарали између наше игре и контролера.

У хијерархији Унити кликните Креирај> Сфера и користите картицу Трансформ у Инспецтору да бисте је преместили на дно екрана игре.

Време је за кодирање

Сада да додам неки код овој забави. Када је сфера изабрана у Хијерархији, кликните Додајте компоненту> Нова скрипта на дну прозора инспектора. Именуј спхереМовер и изаберите Ц Оштро из падајућег менија. Кликните Креирајте и додајте и скрипта ће бити додата у ГамеОбјецт. Двапут кликните на њу да бисте отворили скрипту и унели овај код:

using UnityEngine;
using System.Collections;
using Uniduino;
public class sphereMover : MonoBehaviour
{
//Headers aren't scrictly neccesary, but they make life easier back in the Inspector.
[Header('Arduino Variables')]
//we need to declare the Arduino as a variable
public Arduino arduino;
//we need to declare an integer for the pin number of our potentiometer,
//making these variables public means we can change them in the editor later
//if we change the layout of our arduino
public int potPinNumber;
//a float variable to hold the potentiometer value (0 - 1023)
public float potValue;
//we will later remap that potValue to the y position of our capsule and hold it in this variable
public float mappedPot;
//public int for our button pin
public int buttonPinNumber;
[Header('Sphere Variables')]
//variables to hold the values we noted earlier for the sides of our screen
public float leftEdge;
public float rightEdge;
// Use this for initialization
void Start ()
{//and initialize we shall, starting with the Arduino Variable.
//we are only using one arduino, so we can use Arduino.global to grab it.
arduino = Arduino.global;
arduino.Setup(ConfigurePins);
}
void ConfigurePins()
{
//configure the Arduino pin to be analog for our potentiometer
arduino.pinMode(potPinNumber, PinMode.ANALOG);
//Tell the Arduino to report any changes in the value of our potentiometer
arduino.reportAnalog(5, 1);
//configure our Button pin
arduino.pinMode(buttonPinNumber, PinMode.INPUT);
arduino.reportDigital((byte)(buttonPinNumber / 8), 1);
}
}

Одвојите тренутак да прочитате коментаре кода. До сада смо прогласили неке променљиве за наш Ардуино, његове пинове и нашу Сферу. Такође смо користили

Методе Старт и ЦонфигуреПинс за иницијализацију нашег Ардуина за време извођења. Сачувајмо нашу скрипту и вратимо се у уређивач Унити да видимо шта се променило.

Сада можемо видети наше јавне променљиве у прозору Инспецтор. Хајде да видимо шта можемо да унесемо у овој фази да бисмо нам касније помогли. Знамо које иглице користимо на Ардуину из наше раније израде, можемо их унети. Из нашег ранијег експеримента такође знамо колико желимо да наша сфера може да путује лево -десно како не би пала са екрана. Хајде сада да унесемо ове вредности.

Први знаци живота

Време је да заиста видимо вредности из нашег Ардуина у уређивачу Унити. За сада можемо додати једну линију кода у функцију Упдате наше скрипте спхереМовер и поново сачувати скрипту.

void Update ()
{
//We assign the value the arduino is reading from our potentionmeter to our potValue variable
potValue = arduino.analogRead(potPinNumber);
}

Сада када имамо променљиву потВалуе која се ажурира сваки оквир, можемо видети њену вредност у реалном времену у Унити Инспецтору. Пре него што га тестирамо, сада би било добро време да проверимо да ли Унидуино прикључак слуша на правом порту. Кликните на Унидуино у Хеирархији и проверите да ли је назив порта у инспектору. Ако је празно, унесите исправан број порта за свој Ардуино. У овом случају то је био ЦОМ4, иако је за вас можда другачије. Ако нисте сигурни, проверите помоћу Ардуино ИДЕ -а.

Изаберите своју сферу у хијерархији и кликните на дугме Репродукуј при врху екрана. Систему је потребно неколико секунди за иницијализацију, након чега би требало да видите промену променљиве Пот Валуе у инспектору када померате потенциометар.

Сада причамо! Па, стриктно говорећи, говоре Унити и Ардуино, али ко броји? Ако сте довде стигли и не видите промену вредности у инспектору, проверите кораке подешавања и проверите да ли сте изабрали исправан порт за свој Ардуино.

Померимо ову сферу

Сада када имамо ажурирану променљиву потВалуе, желимо да користимо ову вредност за померање наше сфере. Када је потенциометар скроз лево, желимо да сфера буде са леве стране екрана и обрнуто. Објекти у Унити -у су позиционирани на тачки у векторском простору, одређеном вредностима ит Трансформ.поситион . На доњој слици, где је сфера у најудаљенијој тачки лево коју бисмо желели, можете видети да је њен вектор положаја 9,5, -4, 0.

Желимо да утичемо на положај Кс сфере. Нажалост, коришћење вредности из нашег потенциометра неће функционисати, јер када је потенциометар скроз улево, он даје вредност 0 - што би нашу сферу ставило тачно на средину екрана. На другом крају, највећа вредност потенциометра, 1023, ставила би коцку далеко десно од нашег екрана. Није корисно. Оно што нам овде треба је математика.

Зашто радити математику када ће Унити то учинити уместо вас?

За оне од вас који се плаше зурећи у комад папира прекривен бесмисленим бројевима (иако их има одличне веб странице то вам може помоћи да научите математику), не бојте се. Потребан нам је начин да наше вредности потенциометра буду у складу са Кс позицијом наше сфере. Срећом, можемо користити ан Метода продужења .

Метода проширења је скрипта која за нас обавља одређени посао. У овом случају, дајемо му вредности које имамо, а он их враћа пресликане једна у другу, спремне за употребу у нашем спхереМовер скрипта. На врху панела Пројекат кликните на Креирај> Ц# Сцрипт и назовите га ЕктенсионМетходс. Унесите доњи код у скрипту:

using UnityEngine;
using System.Collections;
public static class ExtensionMethods {

//our handy dandy Remapper function
public static float Remap (this float value, float from1, float to1, float from2, float to2)
{
return (value - from1) / (to1 - from1) * (to2 - from2) + from2;
}
}

Сачувајте скрипту и вратите се на скрипту спхереМовер. Сада можемо користити ову функцију пресликавања у нашој скрипти ЕктенсионМетходс у нашој функцији ажурирања да претворимо наше потенциометарске вредности у употребљиве вредности у нашој игри. Испод места где смо управо доделили променљиву потВалуе, откуцајте следеће:

Одзив нам показује да наша Ремап узима два сета вредности Од и До и заједно их мапира. У то можемо унети своје вредности.

mappedPot = potValue.Remap(0, 1023, leftEdge, rightEdge);

Сачувајте скрипту, вратите се у уређивач Унити и притисните дугме за репродукцију. Сада би требало да видите да се променљива Маппед Пот мења када померате потенциометар, како би одговарала вредностима које смо одредили за нашу леву и десну ивицу. Одвојите тренутак да седнете и захвалите се на скрипти ЕктенсионМетходс. Калкулатор није на видику.

Напомена: ако приметите да су вам вредности обрнуте, па када је ваш потенциометар скроз удесно, добијате негативну вредност за променљиву Маппед Пот, можда сте потенциометар поставили погрешно. Срећом, ово можете поправити без поновног ожичења. Можете једноставно променити вредности када их поново мапирате:

Сада коначно имамо употребљиве вредности. Сада остаје само да те вредности доделимо Кс позицији наше сфере:

како извући звук из видео записа
//Assign the mapped pot value to the sphere's x position
transform.position = new Vector3(mappedPot, transform.position.y, transform.position.z);

Сачувајте скрипту, вратите се у уређивач Унити и притисните плаи. Сада би требало да можете да померате своју сферу лево и десно помоћу потенциометра!

Укључивање дугмета

Сада када се наша сфера креће, зар не би било лепо имати начин да мало успоримо ствари када се нађемо у тесној ситуацији? Користићемо наше дугме да успоримо време у нашој игри. Отворите сцриптМовер скрипту и додајте овај код у функцију Упдате

//if Unity detects the button is being pressed, the time scale slows down
if (arduino.digitalRead(buttonPinNumber) == 1){
Time.timeScale = 0.4f;
}
else Time.timeScale = 1.0f;

Сада имамо механику наше игре, додајмо неке препреке! Користићемо природног непријатеља сфере, коцку. У хијерархији кликните Креирај> 3д објекат> Коцка . У инспектору коцке, Додајте компоненту> Физика> Чврсто тело . Подесите Драг вредност крутог тела на 5. Такође, под компонентом Бок Цоллидер у инспектору изаберите Ис Триггер. То ће нам омогућити откривање судара са нашом Сфером.

Направите скрипту на коцки и позовите је цоллидеВитхСпхере , отворите скрипту и избришите функције Старт и Упдате јер нам овај пут неће требати. Унесите овај код:

using UnityEngine;
using System.Collections;
public class collideWithSphere : MonoBehaviour
{
void OnTriggerEnter(Collider other)
{
Destroy(other.gameObject);
}
}

ОнТриггерЕнтер шаље поруку кад год окидач сударача удари у други колајдер. У овом случају говоримо му да уништи све што дотакне. Сачувајте скрипту и вратите се у уређивач Унити. Повуците коцку из хијерархије на плочу Пројекат. Приметићете да је текст коцке у хијерархији постао плав. То је зато што смо направили монтажни материјал и сачували га у нашем пројекту. Избришите своју коцку из хијерархије сада.

Све што нам сада треба је скрипта за мријест коцкица. У хијерархији кликните Креирај> Креирај празно , и преименујте га у Гаме Манагер у Инспецтору и додајте му скрипту која се зове гамеМанагер. Отворите скрипту и додајте овај код:

using UnityEngine;
using System.Collections;
public class gameManager : MonoBehaviour {
//a variable to hold the prefab we want to spawn
public GameObject cube;
//we want some variables to decide how any cubes to spawn
//and how high above us we want them to spawn
public int numberToSpwan;
public float lowestSpawnheight;
public float highestSpawnheight;
// Use this for initialization
void Start ()
{
for (int i = 0; i {
Instantiate(cube, new Vector3(Random.Range(-9, 9), Random.Range(lowestSpawnheight, highestSpawnheight), 0), Quaternion.identity);
}
}

// Update is called once per frame
void Update ()
{

}
}

Сачувајте скрипту. Назад у уређивачу, изаберите Менаџер игара у хијерархији и превуците монтажни оквир коцке са панела пројекта на променљиву Коцка у Инспектору. Овде такође попуните вредности вашег мријеста. Можете да се петљате са њим како бисте учинили тешко или лако колико желите. Имајте на уму да вреди имати своје најниже коцке довољно високо да дозволите Унидуину да покрене иницијативу - губитак игре пре него што се крећете може бити фрустрирајуће!

Завршен пројекат

Сада када притиснете плаи, коцке ће се мрестити изнад вас и пасти. Помоћу потенциометра можете их избећи, а помоћу дугмета успорити време.

У овом пројекту смо креирали прилагођени контролер са Ардуином, конфигурисали Унити и Унидуино да комуницирају са њим и створили једноставну игру за тестирање. Овде се концепти могу применити на скоро сваки пројекат, па чак постоје џемови за игре који су специјализовани за прилагођене контролере .

Помоћу Ардуина и Унити -а могли сте да креирате прилагођени контролер од готово било чега. Да ли сте створили хи-фи који контролише свемирски брод? Тостер који контролише игру на платформи?

Ако сте направили овакав пројекат, волео бих да га видим! Објавите то у коментарима испод!

Објави Објави Твеет Емаил 6 звучних алтернатива: најбоље бесплатне или јефтине апликације за аудио књиге

Ако не волите да плаћате аудио књиге, ево неколико сјајних апликација које вам омогућавају да их бесплатно и легално слушате.

Прочитајте следеће
Повезане теме
  • ДИИ
  • Програмирање
  • Ардуино
  • Контролер игре
  • Развој игара
О аутору Иан Буцклеи(216 објављених чланака)

Иан Буцклеи је слободни новинар, музичар, извођач и видео продуцент који живи у Берлину, Немачка. Кад не пише или је на сцени, петља са „уради сам“ електроником или кодом у нади да ће постати луди научник.

Више од Иана Буцклеија

Претплатите се на наш билтен

Придружите се нашем билтену за техничке савете, критике, бесплатне е -књиге и ексклузивне понуде!

Кликните овде да бисте се претплатили