Мазмұны:

Arduino контроллерімен көп ойыншы ойынын қалай жасауға болады: 6 қадам
Arduino контроллерімен көп ойыншы ойынын қалай жасауға болады: 6 қадам

Бейне: Arduino контроллерімен көп ойыншы ойынын қалай жасауға болады: 6 қадам

Бейне: Arduino контроллерімен көп ойыншы ойынын қалай жасауға болады: 6 қадам
Бейне: NOOBS PLAY CLASH ROYALE FROM START LIVE 2024, Шілде
Anonim
Arduino контроллерімен көп ойыншы ойынын қалай жасауға болады
Arduino контроллерімен көп ойыншы ойынын қалай жасауға болады

Сіз ойын әзірлеушілері бүкіл әлемде адамдарға ұнайтын таңғажайып ойындар қалай жасайтыны туралы ойланып көрдіңіз бе? Ал, бүгін мен сізге Arduino контроллері басқаратын шағын мультипликаторлық ойын жасау арқылы бұл туралы аз ғана кеңес бергім келеді. Сонымен, бастайық.

Жабдықтар

Саған қажет болады:

  • Ноутбук
  • Бірлік қозғалтқышы
  • Бірлікпен жұмыс жасайтын C# IDE, мысалы визуалды студия немесе Atom. (Мен Visual Studio кодын қолданамын)
  • 2X Arduino Nano
  • 2X үлкен нан тақтасы
  • 2X шағын нан тақтасы
  • 4X түйіспелі қосқыш (басу түймесі)
  • 4X 200Ω резистор
  • 12X аталықтан еркекке секіру сымдары
  • Arduino IDE

Егер сіз Unity -ді қолдану туралы қарапайым түсінікке ие болсаңыз, бұл пайдалы болады, бірақ бұл сіздің үлгеріміңізге әсер етпейді, өйткені сіз ойынды жалғастыра отырып, онымен танысасыз.

Unity Engine жүктеу сілтемесі:

store.unity.com/download-nuo

Visual Studio Code IDE жүктеуге сілтеме:

code.visualstudio.com/download

Arduino IDE жүктеу сілтемесі:

www.arduino.cc/kz/Main/Software

1 -қадам: Ойынның шекарасын орнатыңыз

Ойынның шекарасын орнатыңыз
Ойынның шекарасын орнатыңыз
Ойынның шекарасын орнатыңыз
Ойынның шекарасын орнатыңыз
Ойынның шекарасын орнатыңыз
Ойынның шекарасын орнатыңыз

Ең алдымен, сіз бірлікті жүктеуіңіз керек

Бұл аяқталғаннан кейін сіз ойынның көрінісін орнатуға кірісе аласыз.

Жаңа Unity жобасын ашыңыз, оны атаңыз және 2D ойынын таңдаңыз.

Жоба ашылған кезде 3 негізгі бөлім бар екенін ескеріңіз

  • Иерархия (мұнда сіздің барлық ойын нысандары мен мәліметтері қосылады).
  • Сахна (ойынның көрінісін орнататын жерде).
  • Ойын (мұнда нағыз ойынның қалай өтетінін тексеруге болады).

Иерархияның астында сіздің көрініс, сахнаның астында «Негізгі камера» бар екеніне назар аударыңыз. Камераны иерархиядан таңдағанда, ол сахнада таңдалады

(Бұл камераның шекарасындағы барлық нәрсе нақты ойында көрсетіледі).

1 суретке қараңыз

Біздің ойын екі тақтадан, айнала қозғалатын доптан және тақталар мен доптың қозғалысын шектейтін жиектерден тұрады.

Шекараны құрудан бастайық.

  1. Жаңа ойын нысанын жасау үшін Активтер> Жасау> Сприттер> квадрат таңдаңыз («оң және сол жақ шекарасы» деп атаңыз) 2 -суретті қараңыз
  2. Оң және сол жақ шекараны иерархияға сүйреп апарыңыз және сахнада квадрат пайда болады.
  3. Оның х осінің орнын (5) «оң және сол жақ шекаралар»> инспектор> түрлендіру> позиция> X күйіне келтіріңіз. 3 суретке қараңыз
  4. Содан кейін оның масштабын камераның шекараларын жабатындай етіп реттеңіз (оны созу үшін шаршының жоғарғы және төменгі жақтарын сүйреңіз).
  5. Оның түсін «оң және сол жақ шекарадан»> инспектор> спрайт рендері> түсі бойынша реттеңіз. 3 суретке қараңыз
  6. Инспекторда төмен жылжыңыз және компонентті қосуды таңдаңыз, содан кейін Rigidbody2D теріңіз және enter пернесін басыңыз, бұл сіздің ойын объектіңізге физика қосады, себебі ол массаны, ауырлық күшін және соқтығысуды анықтайды. Бізге гравитация қажет емес, сондықтан гравитацияны 0 -ге тең етіңіз. Сондай -ақ, сіз соқтығысқан кезде шекара қозғалмауы үшін позицияны және айналуды тоқтатуыңыз керек. 4 суретке қараңыз
  7. қосу компонентін таңдаңыз, содан кейін Box Collider 2D теріңіз және enter пернесін басыңыз, бұл ойын объектісінің айналасында соқтығысуларды анықтауға болатын аймақ қосады. 4 суретке қараңыз
  8. Енді оң және сол жақ шекараны таңдап, оны қайталау үшін (ctrl+d) басыңыз.
  9. Оны «сол жақ шекара» деп қайта атаңыз және біріншісін («оң жақ шекара») қайта атаңыз.
  10. Сол жақ шекараны таңдап, оның осінің орнын 3-қадамда дәл осылай (-5) етіп реттеңіз. Енді сізде оң және сол жақ шекара бар.

Алдыңғы 10 қадамды жоғары және төмен жиектермен қайталаңыз және х позициясының орнына квадраттың у орнын өзгертіңіз. Соңғы қарау суреттегіге ұқсас болуы керек.

5 суретке қараңыз

2 -қадам: тақталарды қосу және контроллерлер жасау

Тақталарды қосу және контроллерлер жасау
Тақталарды қосу және контроллерлер жасау
Тақталарды қосу және контроллерлер жасау
Тақталарды қосу және контроллерлер жасау
Тақталарды қосу және контроллерлер жасау
Тақталарды қосу және контроллерлер жасау

Тақталарды қосу

Жаңа ойын объектісін жасаңыз және оны 1 -ойыншы деп атаңыз.

Реттеу:

  • Масштаб: X (1.2), Y (0.15), Z (1)
  • Орны: X (0), Y (-3.6), z (0)
  • BoxCollider2D қосыңыз
  • Rigidbody 2D қосыңыз және y және z осьтерін қатырыңыз.

Көшіру ойнатқышының көшірмесін жасаңыз (ctrl+d) және 2.

Реттеу:

  • Масштаб: X (1.2), Y (0.15), Z (1)
  • Орны: X (0), Y (3.6), z (0)
  • BoxCollider қазірдің өзінде болады.
  • Rigidbody 2D қазірдің өзінде болады, y және z осьтері қатып қалады.

1 суретке қараңыз

Контроллерлер жасау

Саған қажет болады:

  • 2X Arduino Nano
  • 2X үлкен нан тақтасы
  • 2X шағын нан тақтасы
  • 4X түйіспелі қосқыш (басу түймесі)
  • 4X резистор
  • 12X еркек пен еркек арасындағы сым

Енді джойстиктерді жинау үшін нан тақтасының суреттері мен картасын қараңыз.

  1. Кішкене нан тақтасы бар бір Arduino Nano чипін бекітіңіз.
  2. Үлкен нан тақтасына 2 түйіспелі қосқышты суретте көрсетілгендей бекітіңіз. Нан тақтасының оң жағын сол жаққа симметриялы ұстауға тырысыңыз, себебі бұл джойстикті жақсы көрсетеді (30 -бағанды симметрия ретінде пайдалануға болады) түзу)
  3. Сол жақ түйменің жоғарғы сол жақ түйреуішін кішкене нан тақтасындағы Arduino 5В түйреуішімен жалғаңыз (нан тақтасындағы сол бағанмен байланысқан заттар бір-бірімен байланысты).
  4. Оң жақ батырманың жоғарғы оң жақ түйреуішін Arduino-дегі 5В істікшеге қосыңыз.
  5. Сол жақ батырманың төменгі оң жақ түйреуішін резистор көмегімен 31-бағандағы нүктемен жалғаңыз.
  6. Оң жақ батырманың төменгі сол жақ түйреуішін резистор көмегімен 29-бағандағы нүктемен жалғаңыз.
  7. Резисторларды Arduino ішіндегі GND түйреуішімен қосыңыз.
  8. Сол жақ батырманың жоғарғы оң жақ түйреуішін Arduino-дегі D3 түйрегімен жалғаңыз.
  9. Оң жақ түймешіктің жоғарғы сол жақ түйреуішін D9 түйрегішімен Arduino-ға қосыңыз.
  10. Енді осы қадамдарды қайталаңыз және екінші контроллерді жасаңыз.

3 -қадам: Arduino -ны сериялық портқа қосу

Arduino -ны сериялық портқа қосу
Arduino -ны сериялық портқа қосу
Arduino -ны сериялық портқа қосу
Arduino -ны сериялық портқа қосу
Arduino -ны сериялық портқа қосу
Arduino -ны сериялық портқа қосу
Arduino -ны сериялық портқа қосу
Arduino -ны сериялық портқа қосу

Алдымен сізге Arduino IDE орнату қажет.

Олар орнатылғаннан кейін, сіз батырмадан кірісті қабылдайтын Arduino бағдарламасын құрып, оларды сериялық портта (COM порты) сақтай аласыз. Ноутбукке Arduino тақтасы қосылған кезде, операциялық жүйе тақтаны автоматты түрде жүктей алатын сериялық порт ретінде таниды. Сериялық портта сақталған мәндерді Unity Engine -ді сериялық портқа қосқан кезде келесі қадамда қолдануға болады.

Енді Arduino -ны сериялық портпен байланыстырайық.

Суреттерге қара

  1. Ардуиноны ноутбукке қосыңыз
  2. Құралдар> Тақта> Arduino Nano
  3. Егер сіздің Arduino чипі жақында болса (2018-2020) Құралдар> Процессор> ATmega328P (Ескі жүктеуші).
  4. Егер сіздің Arduino чипі жақында болмаса (2018 жылға дейін) Құралдар> Процессор> ATmega328P
  5. Құралдар> Порт> COM (кез келген сан шығады, менің жағдайда ол 10). * Бұл мәндер сақталатын сериялық порт.
  6. Кодты көшіріп, Arduino IDE қойыңыз және бағдарламаны жүктеу үшін ctrl+u басыңыз.
  7. Екінші Arduino -мен қайталаңыз. (5 -қадамды орындағанда, басқа COM портын таңдағаныңызға көз жеткізіңіз, сонда екі контроллер де бір сериялық портқа қосылмайды).

Код:

жарамсыз орнату () {

Serial.begin (9600); pinMode (3, INPUT); // Arduino -ға D3 pinMode (9, INPUT) істікшесінен кіріс алуын айту; // Arduino -ға D9 түйреуішінен кіріс алуын айту} void loop () {if (digitalRead (3) == 1) { /* Егер Arduino 1 Serial.write (1) кірісін алса; пин 3 -тен Serial.flush () сериялық портына 1 мәнін шығарыңыз; */ кешігу (2); } if (digitalRead (9) == 1) { /* Егер Arduino 1 Serial.write (2) кірісін алса; түйреуіш 9 -дан Serial.flush () сериялық портына 2 мәнін шығару; */ кешігу (2); }}

Бағдарламаның түсіндірмесі:

Бұл код батырмаларға қосылған Arduino D3 пен D9 түйреуіштерінен кіріс алады. Түймелер басылады немесе басылмайды, демек олардан алынған көрсеткіштер 1 (басылған) немесе 0 (басылмаған) болады. Егер оң жақ батырманың кірісі (D9 -ден) 1 болса (басылған) Сериялық портта 1 мәнін сақтайды. Егер сол жақ батырманың кірісі (D3 -тен) 1 болса (басылған), Сериялық портта 2 мәнін сақтаңыз.

4 -қадам: Бірлікті сериялық портпен қосу

Сериялық портпен бірлікті қосу
Сериялық портпен бірлікті қосу
Сериялық портпен бірлікті қосу
Сериялық портпен бірлікті қосу

Бұл қадам үшін біз Unity -дегі сериялық портты анықтайтын боламыз, осылайша ол батырмалар басылған кезде Arduino кірістерін қабылдай алады. Ноутбукке Visual Studio кодын орнатыңыз. Содан кейін Unity -ге өтіңіз, иерархиядан 1 -ойыншыны таңдаңыз, төмен қарай жылжытыңыз және компонентті қосуды таңдаңыз және player1_motion теріңіз, содан кейін enter пернесін басыңыз. 1 суретке қараңыз

Инспекторда C# сценарийі құрылады, оны тінтуірдің оң жақ түймешігімен басып, өңдеу сценарийін таңдаңыз, визуалды студия коды ашылуы керек және 2 -суретке ұқсас әдепкі кодты көрсетеді.

Келесі кодты көшіріп, «SerialPort sp = new SerialPort (» COM10 «, 9600) өзгертіңіз;» SerialPort sp = new SerialPort көмегімен («Arduino қосылған COM порты», 9600); Сіз оны Arduino кодына оралып, Құралдар> Порт> COM (кез келген сан пайда болады) арқылы табуға болады.

Код:

System. Collections пайдалану;

System. Collections. Generic пайдалану; UnityEngine пайдалану; System. IO. Ports пайдалану; public class player1_motion: MonoBehaviour {өзгермелі жылдамдық = 8; жеке қалқымалы сома; SerialPort sp = жаңа SerialPort («COM10», 9600); // Бастау кадрды жаңартудан бұрын шақырылады void Start () {sp. Open (); sp. ReadTimeout = 1; } // Жаңарту кадрға бір рет шақырылады void Update () {amounttomove = speed*0.01f; if (sp. IsOpen) {try {moveObject (sp. ReadByte ()); басып шығару (sp. ReadByte ()); } catch (System. Exception) {}}} void moveObject (int Direction) {if (Direction == 1) {transform. Translate (Vector3.left*amounttomove, Space. World); } if (Бағыт == 2) {transform. Translate (Vector3.right*amounttomove, Space. World); }}}

Кодтың түсіндірмесі:

Бұл код сериялық порттан (COM 10) кірістерді алу үшін бірлік туралы айтады. Сол жақ батырманы басқанда, Arduino сериялық портқа 1 мәнін жібереді, егер бірлік сериялық порттан 1 қабылдайтын болса, ойыншы объектісіне «1 ойыншы» жылдамдығы сол жаққа қосылады. Оң жақ батырманы басқанда, Arduino сериялық портқа 2 мәнін жібереді, егер бірлік сериялық порттан 2 қабылдайтын болса, ойыншы ойыншыға жылдамдық дұрыс бағытта қосылады. егер сериялық порт сериялық порттан мән алмаса, онда жылдамдық екі жаққа да қосылмайды, сондықтан тақта қозғалмайды.

Кодты көшіргеннен кейін кодты құру және іске қосу үшін F5 пернесін басыңыз. Бірлікке оралыңыз және ойнату түймесін басыңыз, 1 -ойыншы оңға басқанда оңға, солға басқанда солға жылжуы керек.

Енді сол әрекеттерді тағы да 2 -ойнатқышпен орындаңыз және player1_motion орнына 'компонент қосу' player2_motion деп жазыңыз және екінші контроллер қосылған екінші COM портын анықтаңыз, сол сериялық порт емес.

Сондай -ақ, кодтың өзінде «public class player1_motion: MonoBehaviour» параметрін «public class player2_motion: MonoBehaviour» етіп өзгерту қажет болады.

5 -қадам: Допты қосу

Допты қосу
Допты қосу
Допты қосу
Допты қосу
Допты қосу
Допты қосу
  1. Жаңа ойын нысанын қосыңыз, бірақ бұл жолы шаршының орнына шеңберді таңдаңыз.
  2. Оны «доп» деп атаңыз.
  3. Иерархияда сүйреп апарыңыз.
  4. Масштабты реттеңіз (X: 0.2 - Y: 0.2 - Z: 0.2).
  5. Rigidbody 2D қосыңыз және тек Z осін қатырыңыз.
  6. Массаны 0.0001 -ге өзгертіңіз
  7. Гравитация шкаласын 0 -ге өзгертіңіз.
  8. Box Collider 2D қосыңыз.
  9. Активтер> Жасау> Физика материалына өтіңіз 2D 1 -суретті қараңыз
  10. атауын «секіру» деп өзгертіңіз
  11. Инспектордан үйкелісті нөлге өзгертіңіз
  12. Инспектордан секіруді 1 -ге өзгертіңіз
  13. Rigidbody 2D> Material ішіне «секіруді» сүйреп апарыңыз. 2 -суретке қараңыз
  14. Иерархиядан «шарды» қайтадан таңдап, компонентті қосу үшін өтіңіз және Ball_movement теріңіз, содан кейін enter пернесін басыңыз.
  15. Сценарийді тінтуірдің оң жақ түймесімен нұқып, өңдеу сценарийін таңдаңыз.
  16. Төмендегі кодты көшіріп, оны құру және іске қосу үшін F5 пернесін басыңыз.

Код:

System. Collections пайдалану;

System. Collections. Generic пайдалану; UnityEngine пайдалану; қоғамдық сынып Ball_movement: MonoBehaviour {// Бастау бірінші фреймді жаңартудың алдында шақырылады жеке өзгермелі күш = 2; void Start () {StartCoroutine (move ()); } IEnumerator move () {қайтарымдылығы жаңа WaitForSeconds (2) қайтарады; GetComponent (). AddForce (жаңа Vector2 (1f, 0.5f)*0.02f*күш); }}

Кодты түсіндіру

Бұл код допқа 45 градус бұрышта қозғалуға мүмкіндік беретін бірдей бағыттағы X және Y бағыттарындағы екі бағыттағы жылдамдықты береді. 8 -қадамда біз допқа физикалық материалды қостық және оның серпімділігін өзгерттік, бұл ойын барысында доптың қозғалысын сақтайды.

6 -қадам: Ойынды аяқтау

Ойынды қорытындылау
Ойынды қорытындылау
Ойынды қорытындылау
Ойынды қорытындылау
Ойынды қорытындылау
Ойынды қорытындылау
Ойынды қорытындылау
Ойынды қорытындылау

Енді біз жеңілуді мүмкін етуіміз керек, егер сіз ойынды іске қоссаңыз, доп 1 немесе 2 ойыншыдан өткенде, ол тек шекарадан секіретінін байқайсыз және бұл біздің ойынға қажет емес. Оның орнына біз доп жоғары немесе төмен шекаралармен соқтығысқан сайын ұпай есептейтін есептегіш құрғымыз келеді және доптың орнын қалпына келтіргіміз келеді.

  1. Допты иерархиядан жобаға сүйреп апарыңыз, сіз допты алдын ала дайындап қойдыңыз, оны кейін пайдалануға болады.
  2. Иерархияны тінтуірдің оң жақ түймешігімен нұқыңыз және бос орын таңдаңыз. бос объект пайда болады, оны доптың қайта пайда болуына өзгертіңіз және оның орнын доптың орнына ұқсас етіп өзгертіңіз.
  3. Иерархияны тінтуірдің оң жақ түймесімен басып, UI >> Мәтін таңдаңыз. Мәтін кенеппен бірге жүретініне назар аударыңыз, ойындағы мәтіннің орны біздің ойынның шекарасында емес, кенептегі мәтіннің орналасуына байланысты. (1 суретке қараңыз).
  4. Мәтіннің орналасуын қалаған жеріңізге өзгертіңіз.
  5. Екінші ойыншының ұпайы үшін 3 және 4 қадамдарды қайталаңыз.
  6. Бірінші мәтінге «Ойыншы 1 ұпайы: 0» деп теріңіз және екінші мәтінге «Ойыншы 2 ұпайы: 0» деп теріңіз. (2 суретті қараңыз).
  7. P1wins деп аталатын жоғарғы шекарада сценарий жасаңыз және келесі кодты көшіріңіз.

Код:

System. Collections пайдалану;

System. Collections. Generic пайдалану; UnityEngine пайдалану; UnityEngine. SceneManagement пайдалану; UnityEngine. UI пайдалану; p1wins қоғамдық сыныбы: MonoBehaviour {public Text score; ball_respawn қоғамдық трансформациясы; жалпыға ортақ GameObject доптары; жеке int p1 = 0; // Бастау бірінші кадрды жаңартудан бұрын шақырылады void Start () {} // Жаңарту кадрға бір рет шақырылады void Update () {score.text = «1 -ойыншы ұпайы:» + p1; } void OnCollisionEnter2D (Collision2D other) {if (other.gameObject.tag == «Ball») {Destroy (other.gameObject); p1 ++; Шұғыл әрекет ету (доп, допқа жауап беру. Позиция, допқа жауап беру). }}}

8. 1 -қадамдағы жобадан доптың префабрын Ball параметріне сүйреп апарыңыз. (3 суретті қараңыз)

9. Допты қайта иерархиядан Ball-rspawn параметріне сүйреп апарыңыз. (3 суретті қараңыз)

10. ойыншының 1 ұпайын иерархиядан Score параметріне апарып тастаңыз. (3 суретті қараңыз)

Кодтың түсіндірмесі:

Доп жоғарғы шекарамен соқтығысқанда, ол біз 2 -қадамда тағайындаған ball_respawn позициясында қайтадан жойылады және қайта тіріледі, допты префабқа айналдырудың мақсаты - оны барлық ерекшеліктерімен қайта өңдеу. иерархиядан ол қайта тіріледі, бірақ ол қозғалмайды. Доп жоғарғы шекарамен соқтығысқанда бастапқыда p1 деп аталатын мән 1 -ге артады, бұл мән мәтін ретінде көрсетіледі, сондықтан доп жоғарғы шекарамен соқтығысқанда 1 -ойыншының ұпайы 1 -ге артады.

Енді төменгі шекара үшін 7, 8, 9 және 10 -қадамдарды орындаңыз

7 -қадам үшін p2wins деп аталатын сценарий жасаңыз және оның орнына келесі кодты көшіріңіз.

10 -қадам үшін 2 -ші ойыншыны иерархиядан Score параметріне апарып тастаңыз.

Код:

System. Collections пайдалану;

System. Collections. Generic пайдалану; UnityEngine пайдалану; UnityEngine. SceneManagement пайдалану; UnityEngine. UI пайдалану; p2wins қоғамдық сыныбы: MonoBehaviour {public Text score; ball_respawn қоғамдық трансформациясы; жалпыға ортақ GameObject доптары; жеке int p2 = 0; // Бастау бірінші кадрды жаңартудан бұрын шақырылады void Start () {} // Жаңарту кадрға бір рет шақырылады void Update () {score.text = «Ойыншы 2 ұпайы:» + p2; } void OnCollisionEnter2D (Collision2D other) {if (other.gameObject.tag == «Ball») {Destroy (other.gameObject); p2 ++; Шұғыл әрекет ету (доп, допқа жауап беру. Позиция, допқа жауап беру). }}}

Ұсынылған: