Paano Lumikha ng Pangunahing Laro sa Android na may Unity

sa katulad na tutorial na ito, tatalakayin namin kung paano lumikha ng isang batayan Android laro gamit ang Unity.



Mga Kinakailangan:

  • Pagkakaisa
  • Isang mahusay na editor ng teksto tulad ng NotePad ++ (Opsyonal ngunit inirerekomenda)
  • Android SDK
Kung wala mo pa ito, dapat kang magsimula sa pamamagitan ng pag-download at pag-install ng Unity SDK at pati na rin ang Android SDK. Kailangan namin ang Android SDK upang masubukan namin ang APK ng laro sa loob ng isang Android environment.

Ilunsad ang Pagkakaisa at lumikha ng isang bagong proyekto. Gawin itong isang proyekto ng 2D.



Mayroong maraming mga panel upang pamilyar - ang panel ng Hierarchy na maglalaman ng lahat ng aming mga elemento ng eksena (eksena = anuman ang 'antas' na kasalukuyang ginagawa mo). Pagkatapos ay mayroong tab na Game na ginagamit para sa paglalaro / pagsubok sa iyong laro habang nasa loob ng editor, at sa kanan ay mayroon kang panel ng Inspektor na kung saan ay i-e-edit mo ang iba't ibang mga bagay tulad ng pag-iilaw, pisika, atbp.



Ang unang bagay na nais naming gawin ay lumikha ng isang sprite - ito ang magiging pangunahing karakter namin (na kinokontrol namin). Maaari kang gumuhit ng iyong sariling sprite, tulad ng pagguhit lamang ng isang parisukat na may mga mata, o maaari kang kumuha ng isang sprite mula sa internet - siguraduhin lamang na isang .PNG file (transparent background).



I-drag at i-drop ang iyong sprite papunta sa pangunahing window ng eksena (ang pinakamalaking window) - lilitaw din ito sa panel ng Hierarchy sa kaliwa.

Kaya't lilikha kami ngayon ng ilang mga platform - maaaring ito ay simpleng mga parisukat, sapagkat madali naming madaling mapapalitan ang laki upang gumawa ng mga dingding at iba pang mga platform.

Kaya lumikha lamang ng isang bagong parisukat na 'sprite' at i-drag at i-drop ito sa window ng Scene tulad ng ginawa mo sa iyong sprite character.



Ngayon kailangan naming turuan ang Unity upang bigyan ang pisika ng aming pangunahing karakter - mag-click sa iyong pangunahing karakter ng sprite (dapat itong ma-highlight ng asul sa window ng Scene), pagkatapos sa panel ng Inspektor, hanapin ang 'GameObjects'.

Mag-click sa 'Magdagdag ng Component> Physics 2D> RigidBody2D'. Awtomatiko nitong idaragdag ang pisika sa iyong sprite, na nais mong i-script ang iyong sarili sa ibang SDK.

Nais naming pigilan ang pangunahing tauhan ng sprite mula sa pag-ikot sa labas ng kontrol - kaya hanapin ang tab na Mga Pilit sa panel ng Inspektor (na may pangunahing sprite na naka-highlight pa rin sa window ng Scene), at lagyan ng tsek ang kahon para sa 'Freeze Rotation Z'.

Kung na-hit mo ang pindutang 'Play', ang iyong pangunahing karakter ng sprite ay dapat mahulog mula sa langit at mahulog nang walang katapusang - aalagaan namin iyon sa paglaon, ngunit pansinin lamang kung paano namin madaling mailapat ang pisika. Ang physics na aming inilapat ay nakasalalay sa hugis na inilalapat sa kanila - kaya kung inilapat mo ang parehong pisika sa isang globo, halimbawa, gumulong ito.

Nais din naming ayusin ang aming oryentasyon upang maiwasan ang pag-ikot ng character at freewheeling sa paligid. Maghanap ng 'mga hadlang' sa inspektor na may napiling manlalaro at lagyan ng tsek ang kahon upang i-freeze ang pag-ikot ng Z. Ngayon i-click muli ang pag-play at dapat mong makita ang iyong manlalaro na ngayon ay bumaba mula sa langit patungo sa kanyang walang katapusang tadhana.

Upang mapatigil ang aming pangunahing tauhan ng sprite mula sa pagkahulog lamang ng walang katapusang, kakailanganin naming magdagdag ng isang collider. Ito ay karaniwang solidong balangkas lamang ng isang hugis na idaragdag namin sa pangunahing karakter ng sprite. I-highlight ang iyong pangunahing karakter ng sprite, i-click ang 'Magdagdag ng Component> Physics 2D> BoxCollider2D.

Ngayon gawin ang parehong eksaktong bagay sa platform na nilikha mo nang mas maaga. Ang iyong pangunahing karakter ng sprite ay dapat na ngayon 'bumangga' sa platform at manatili doon.

Kaya ngayon nais naming tiyakin na susundan ng camera ang iyong pangunahing karakter ng sprite - sa loob ng eksena, dapat mayroon nang isang object ng camera. Nais mong i-drag ito sa ibabaw ng ang pangunahing tauhan ng sprite.

Ito ay lalong mahalaga kung lumilikha ka ng isang 3D based runner , isang bagay tulad ng Dulas kung saan kailangan mo ang camera upang manatiling patuloy na nasa likod ng pangunahing object ng laro (ang iyong pangunahing karakter ng sprite).

Pumunta ngayon sa panel ng Hierarchy at sa listahan ng mga GameObjects, nais mong i-drag ang camera sa ilalim ang pangunahing karakter ng sprite (Player GameObject). Gagawin nitong pangunahing karakter ng sprite ang ' magulang ’ ng camera. Kaya't tuwing gumagalaw ang Player GameObject sa paligid ng screen, dapat sundin ang camera.

Kaya para sa tutorial ng laro na ito, lilikha lamang kami ng isang pangunahing walang katapusang laro ng uri ng runner, tulad ng Patakbuhin 3 , kung saan tatakbo ang iyong pangunahing tauhan sa screen at umiwas sa mga hadlang (o 'laro sa paglipas' kung tumama ka sa isang balakid '. Kakailanganin ito ng ilang mga script, na ang karamihan ay ibibigay sa gabay na ito.

Mag-right click sa folder na 'Mga Asset' at lumikha ng isang bagong folder - pangalanan ito Mga script . Ngayon ay mag-right click sa bagong folder at pindutin ang 'Lumikha> C # Script' at pangalanan ito Mga Kontroler ng Player . Tutukuyin ng script na ito ang pag-uugali ng aming pangunahing karakter na sprite.

Kapag nag-double click ka sa bagong script na ito dapat buksan sa Visual Studio - kahalili (at ang aking personal na kagustuhan), maaari mong i-edit ito sa isang bagay tulad ng NotePad ++.

Ang file ng script ay dapat na magkaroon ng kaunting code na 'boiler plate' sa loob nito - karaniwang ito ang script na kailangang iwanang mag-isa o maiakma lamang sa iyong mga pangangailangan, at makatipid sa amin ng maraming oras. Kaya't magdaragdag kami ng isang bagong bagay.

Sa itaas ng linya na walang bisa Start ():

pampubliko Rigidbody2D rb;

Ang susunod na piraso ng code na kailangan nating idagdag ay mapupunta sa Simula (), at ginagamit upang mahanap ang tigas - karaniwang, tinuturo namin ang Pagkakaisa na hanapin ang pisika na na-attach namin sa GameObjects (aming pangunahing karakter sa sprite), at Start Ang () ay papatayin kapag ang isang bagong object o script ay nilikha.

Kaya sa susunod, hanapin ang object ng physics.

rb = GetComponent< Mahigpit na tao2D > ();

At idaragdag mo ang linyang ito sa loob ng Update ()

rb.velocity = bago Vector2 (3, rb.velocity.y);

Ang ginagawa ng Update () ay patuloy na nagre-refresh, kaya't ang anumang code na naidagdag doon ay patuloy na tatakbo (maliban kung ang bagay ay nawasak). Kaya't ang nagawa namin ay turuan ang script na nais naming ang matibay na magkaroon ng isang bagong vector gamit ang parehong bilis sa Y axis (rb.velocity.y), ngunit may bilis na 3 sa pahalang na axis. Sa hinaharap, maaari mo ring gamitin ang ‘ FixedUpdate () ’ na magkatulad ngunit magkakaiba, dahil doon maaari mong makontrol ang pag-update / pag-refresh ng halaga ng script.

I-save ang script at bumalik sa Unity, pagkatapos ay i-click ang iyong pangunahing karakter ng sprite upang i-highlight ito. Sa panel ng Inspektor, pumunta sa Magdagdag ng Component> Mga Script at idagdag ang script na na-save namin. Ngayon kapag na-click mo ang pindutan ng Play, ang pangunahing karakter ng sprite ay dapat na patuloy na lumipat patungo sa gilid ng platform.

Lumilikha ng Mga Kontrol sa Pag-input ng Player

Kaya't dahil ito ay isang walang katapusang laro ng istilo ng runner na may mga hadlang, kailangan naming magdagdag ng mga kontrol para sa manlalaro tulad ng isang pindutan na 'jump'.

Muling buksan ang script mula dati, at idaragdag namin ang karagdagang code na ito:

 kung (Input.GetMouse ButtonDown (0)) {rb.velocity = bago Vector2 (rb.velocity.x, 5); }

Ilalagay mo iyan sa loob ng paraan ng Pag-update (), at kung ano ang karaniwang ginagawa nito ay sabihin sa Unity na kapag nag-click ang player sa kanilang pindutan ng mouse (na isasalin bilang isang tapikin sa screen sa Android), ang pangunahing tauhan ng sprite ay 'tatalon ' nasa hangin. Ito ay dahil nagdagdag kami ng isang tulin sa axis ng Y na may halagang 5 (isang mas mataas na halaga ay nangangahulugang isang mas mataas na paglukso, syempre).

Kung hindi ka masyadong pamilyar sa pag-coding, gumamit kami ng Kung pahayag dahil Kung ay karaniwang isang 'gawin o hindi' uri ng tagubilin - literal nitong sinasabi KUNG nangyari ito, gawin ang utos na ito . Kaya't kung ang manlalaro ay hindi nag-click sa mouse (o pag-tap sa kanilang Android screen) kung gayon malinaw na ang script ay hindi tatakbo.

Sige at i-click ang pindutang 'Play' at tiyakin na gumagana ito nang tama bago magpatuloy.

Susunod, idaragdag namin ang aming mga hadlang (na maaaring 'sirain' ang pangunahing character sprite), isang marka ng laro, at isang menu na 'over over game'.

Kung nasubukan mo ang laro sa ngayon, ang tanging problema na mayroon kami sa ngayon ay ang pagpindot sa pindutan na 'jump' na nilikha namin ay tatalon ang character kahit na sila ay grounded o hindi - ito ay karaniwang Flappy Birds, at hindi isang runner tulad ng gusto namin. Ngunit aayusin namin iyon.

Sa script, idagdag ang kaunting code sa itaas ang paraan ng Pag-update ():

 pampubliko Pagbabago ng groundCheck; pampubliko Pagbabago ng pagsisimulaPosisyon; pampubliko   lumutang groundCheckRadius; pampubliko LayerMask whatIsGround; pribado   bool onGround; At pagkatapos ay idagdag ang susunod na linya na ito sa paraan ng Pag-update sa itaas ng kung pahayag: onGround = Physics2D.OverlapCircle (groundCheck.position, groundCheckRadius, whatIsGround); At sa susunod ay babaguhin mo ang sumusunod na linya upang maisama ang “&& onGround” kung (Input.GetMouse ButtonDown (0) && onGround) {Kaya't ang aming buong script ay karaniwang ganito ang hitsura: pampubliko   klase   Mga Kontroler ng Player : MonoBehaviour { pampubliko Rigidbody2D rb; pampubliko Pagbabago ng groundCheck; pampubliko Pagbabago ng pagsisimulaPosisyon; pampubliko   lumutang groundCheckRadius; pampubliko LayerMask whatIsGround; pribado   bool onGround; walang bisa   Magsimula () {rb = GetComponent (); } walang bisa   Update () {rb.velocity = bago Vector2 (3, rb.velocity.y); onGround = Physics2D.OverlapCircle (groundCheck.position, groundCheckRadius, whatIsGround); kung (Input.GetMouseButtonDown (0) && onGround) {rb.velocity = bago Vector2 (rb.velocity.x, 5); }}}

Upang ipaliwanag kung ano ang nagawa namin, lumikha kami ng isang bagong 'pagbabago', na nangangahulugang isang posisyon sa puwang ng mundo ng laro. Itinakda namin ang radius nito at tinuturo namin ang Unity na suriin kung ang radius ay nagsasapawan sa aming 'ground' layer - at kung gayon kung ang aming radius ay naka-sync sa 'ground', dapat na tumalon ang aming karakter, at kung nasa hangin na mula sa isang pagtalon, hindi tayo dapat na tumalon muli. Talaga, saGround magiging totoo kung pinangalanan ang pagbabago groundCheck ay nag-o-overlap sa ground layer. Sana may katuturan iyon.

Kaya i-save ang script at bumalik sa Unity, at mapapansin mo na mas maraming mga pagpipilian ang naidagdag sa Inspector pagkatapos i-highlight ang player. Ang mga ito ay mga variable ng publiko at maaari nating ayusin ang mga ito ayon sa gusto namin.

Ngayon ay mag-right click sa Hierarchy at lumikha ng isang bagong walang laman na bagay, at i-drag ito upang sa ilalim nito ng pangunahing character sprite sa pangunahing window ng Scene - iposisyon ang walang laman na bagay na ito kung saan nais naming makita ang sahig. Palitan ang pangalan ng object sa 'Check Ground', at pagkatapos ay i-drag ito sa ilalim ng object ng laro ng player tulad ng ginawa namin kanina gamit ang camera (upang lumikha ng ugnayan ng magulang - anak sa pagitan ng mga object). Ngayon ang walang laman na bagay ay susundan ng pangunahing character sprite, tulad ng camera, at patuloy na susuriin ang distansya ng sahig.cam

Piliin ngayon ang pangunahing sprite ng character at pumunta sa panel ng Inspektor - i-drag ang bagay na Suriin ang Ground sa puwang na tinatawag na 'groundCheck'. Ang posisyon na 'ibahin ang anyo' ay dapat na katumbas ng posisyon ng bagong bagay na ito, at kung saan sinasabi na 'Radius', gawin itong 0.1.

Kailangan nating tukuyin ang layer ng lupa. Piliin lamang ang ground terrain at sa Inspector, hanapin ang pindutan para sa 'Layer: Default' (ito ay isang dropdown box) at piliin ang 'Add Layer'.

Piliin ngayon ang 'ground' bilang layer para sa aming platform, at ulitin ito para sa anumang iba pang mga platform sa window ng laro. Kung saan sinasabi na 'Ano ang Ground' sa aming pangunahing object na sprite ng character, piliin din ang ground layer.

Ang nagawa namin ay utusan ang script ng manlalaro na magsagawa ng isang tseke - kung ang maliit na point sa screen ay nag-o-overlap sa anumang tumutugma sa layer, tatalon lang ang character kung totoo ito.

Game Over sa banggaan at Menu ng Laro

Kaya't upang mabalot ang lahat, ang pangwakas na mga bagay na nais naming gawin ay A: Gumawa ng pagbabangga sa mga hadlang na magreresulta sa isang laro, at B: Lumikha ng isang 'game over' na screen ng screen na may pindutang muling pag-play.

Ano ang karaniwang nais mong gawin ay:

  1. Magdagdag ng a Manlalaro object at magtalaga ng a tigas at a nakabangga ng iyong pinili dito.
  2. Magdagdag ng isang Kaaway object at magtalaga ng a tigas at a nakabangga ng iyong pagpili dito. (at opsyonal, idagdag Tag na 'Kaaway' dito)
  3. Gumawa ng bago C # script at idagdag ito bilang isang sangkap sa Manlalaro (o gumamit ng anumang script na nakakabit sa player, hindi na kailangang lumikha ng bago kung mayroon ka na)
  4. Idagdag ito sa iyong script:
walang bisa OnCollisionEnter ( Banggaan coll) { Pag-debug . Mag-log ('Salpukan'); // Suriin upang makita kung nagrerehistro din ito ng isang banggaan, kung gumagana ito maaari mong alisin ang linyang ito kung (coll.gameobject. tag == 'Kaaway') { // nakikita kung ang bagay na nabangga ng iyong manlalaro ay may isang tag na tinatawag na 'Kaaway