Com es crea un joc bàsic d'Android amb Unity

en aquest tutorial similar, analitzarem com crear un element bàsic Android joc amb Unity.



Requisits:

  • Unitat
  • Un bon editor de text com NotePad ++ (opcional però recomanable)
  • SDK d'Android
Si encara no el teniu, heu de començar descarregant i instal·lant l’SDK d’Unity i també l’SDK d’Android. Necessitem l'SDK d'Android per poder provar l'APK del joc dins d'un entorn Android.

Inicieu Unity i creeu un projecte nou. Feu-ne un projecte 2D.



Hi ha diversos plafons per familiaritzar-vos: el tauler de la jerarquia, que contindrà tots els nostres elements d’escena (escena = qualsevol 'nivell' en què esteu treballant actualment). A continuació, hi ha la pestanya Joc que s’utilitza per jugar / provar el vostre joc mentre es troba dins de l’editor i, a la dreta, teniu el tauler Inspector on podreu editar diverses coses, com ara il·luminació, física, etc.



El primer que volem fer és crear un sprite: aquest serà el nostre personatge principal (que controlem). Podeu dibuixar el vostre propi sprite, com simplement dibuixar un quadrat amb els ulls, o bé podeu agafar un sprite d’Internet. Assegureu-vos que sigui un fitxer .PNG (fons transparent).



Arrossegueu i deixeu anar el sprite a la finestra principal de l'escena (la finestra més gran); també apareixerà al tauler de jerarquia de l'esquerra.

Per tant, ara crearem unes quantes plataformes: poden ser quadrats simples, perquè podrem canviar-ne la mida fàcilment per fer parets i altres plataformes.

Per tant, només cal que creeu un 'sprite' quadrat i arrossegueu-lo i deixeu-lo anar a la finestra de l'escena tal com vau fer amb el vostre personatge sprite.



Ara hem d’indicar a Unity que doni física al nostre personatge principal: feu clic al vostre personatge sprite principal (s’ha de ressaltar en blau a la finestra de l’escena) i, a continuació, al tauler Inspector, cerqueu “GameObjects”.

Feu clic a 'Afegeix component> Física 2D> RigidBody2D'. Això afegirà automàticament física al vostre sprite, que d’altra manera hauríeu hagut d’escriure en un altre SDK.

Volem evitar que el personatge principal del sprite giri fora de control; per tant, busqueu la pestanya Restriccions al tauler Inspector (amb el sprite principal encara ressaltat a la finestra Escena) i marqueu la casella 'Congela la rotació Z'.

Si premeu el botó 'Reproduir', el vostre personatge principal sprite hauria de caure del cel i caure sense fi; ja ens en ocuparem més endavant, però preneu nota de com hem pogut aplicar fàcilment la física. La física que hem aplicat depèn de la forma a la qual s’està aplicant; per tant, si apliquéssiu la mateixa física a una esfera, per exemple, rodaria.

També volem fixar la nostra orientació per evitar que el personatge giri i rodi lliure. Cerqueu 'restriccions' a l'inspector amb el jugador seleccionat i marqueu la casella per congelar la rotació Z. Ara torneu a fer clic a Reprodueix i hauríeu de trobar que el vostre jugador ara cau del cel a la seva infinita fatalitat.

Per tal d’evitar que el nostre personatge principal sprite caigui sense fi, haurem d’afegir un col·lisionador. Aquest és bàsicament només el contorn sòlid d’una forma que afegirem al personatge principal del sprite. Ressalteu el vostre caràcter sprite principal i feu clic a 'Afegeix component> Física 2D> BoxCollider2D.

Ara feu el mateix amb la plataforma que heu creat anteriorment. El vostre personatge principal sprite ara hauria de 'xocar' amb la plataforma i romandre allà.

Per tant, ara volem assegurar-nos que la càmera segueixi el vostre personatge principal sprite: dins de l’escena ja hi hauria d’haver un objecte de càmera. Voleu arrossegar això en el cim de el personatge principal del sprite.

Això és especialment important si en creeu un Corredor basat en 3D , alguna cosa com Pendent on necessiteu que la càmera romangui constantment darrere de l'objecte de joc principal (el vostre personatge principal sprite).

Ara aneu al tauler Jerarquia i, a la llista de GameObjects, voleu arrossegar la càmera per sota el personatge principal sprite (Player GameObject). Això farà que el personatge principal del sprite sigui el ‘ pare de la càmera. Per tant, cada vegada que el Player GameObject es mou per la pantalla, la càmera hauria de seguir-la.

Per tant, per a aquest tutorial de jocs, només crearem un joc bàsic de tipus corredor sense fi, com ara Cursa 3 , on el vostre personatge principal travessarà la pantalla i esquivarà obstacles (o 'acabarà' si colpegeu un obstacle '. Això comportarà uns quants scripts, la majoria dels quals es proporcionaran en aquesta guia.

Feu clic amb el botó dret a la carpeta 'Actius' i creeu-ne una de nova Scripts . Ara feu clic amb el botó dret sobre aquesta nova carpeta i feu clic a 'Crea> Script C #' i nomeneu-lo PlayerControls . Aquest script definirà el comportament del nostre personatge principal sprite.

Quan feu doble clic sobre aquest nou script, el feu hauria obriu-vos a Visual Studio; alternativament (i la meva preferència personal), podeu editar-lo en alguna cosa com NotePad ++.

El fitxer de seqüències d'ordres ja hauria de contenir una mica de codi 'placa de la caldera': bàsicament es tracta d'un guió que cal deixar sol o adaptar-se a les vostres necessitats i que ens estalviarà molt de temps. Per tant, afegirem un objecte nou.

Per sobre de la línia buida Inici ():

públic Rigidbody2D rb;

El següent bit de codi que hem d’afegir entrarà dins de Start () i s’utilitzarà per trobar el rígid; bàsicament, estem indicant a Unity que localitzi la física que hem adjuntat als GameObjects (el nostre personatge principal sprite) i Start () s'executarà quan es creï un nou objecte o script.

A continuació, localitzeu l'objecte de física.

rb = GetComponent< Rigidbody2D > ();

I afegirà aquesta línia dins de l’actualització ()

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

El que fa Update () és actualitzar constantment, de manera que qualsevol codi que s'hi afegeixi s'executarà contínuament (tret que es destrueixi l'objecte). Per tant, el que hem fet és indicar a l’escriptura que volem que el cos rígid tingui un nou vector amb la mateixa velocitat a l’eix Y (rb.velocity.y), però amb una velocitat de 3 a l’eix horitzontal. En el futur, també podeu utilitzar ‘ FixedUpdate () ' que és similar però diferent, perquè allà podeu controlar la quantitat d'actualització / actualització de l'script.

Deseu l'script i torneu a Unity i, a continuació, feu clic al vostre personatge sprite principal per ressaltar-lo. Al tauler Inspector, aneu a Afegeix component> Scripts i afegiu el script que acabem de desar. Ara, quan feu clic al botó Reprodueix, el personatge principal sprite s'hauria de moure contínuament cap a la vora de la plataforma.

Creació de controls d’entrada de reproductor

Per tant, com que es tracta d’un joc interminable d’estil corredor amb obstacles, hem d’afegir controls per al jugador, com ara un botó de 'salt'.

Torneu a obrir l'script d'abans i afegirem aquest codi addicional:

 si (Input.GetMouseButtonDown (0)) {rb.velocity = nou Vector2 (rb.velocity.x, 5); }

Ho posaràs dins del mètode Update (), i el que fa bàsicament és dir-li a Unity que quan el jugador fa clic amb el botó del ratolí (que es traduirà com un toc de pantalla a Android), el personatge principal sprite 'saltarà' ' en l'aire. Això es deu al fet que hem afegit una velocitat a l’eix Y amb un valor de 5 (un valor més alt significaria un salt més alt, és clar).

Si no esteu massa familiaritzat amb la codificació, en vam utilitzar un Si afirmació perquè Si bàsicament és un tipus d’instrucció “fer o no fer”: és la seva frase literal SI això passa, feu aquesta ordre . Per tant, si el reproductor no fa clic al ratolí (ni toca la pantalla d'Android), òbviament l'script no s'executarà.

Seguiu endavant i feu clic al botó 'Reprodueix' i assegureu-vos que funcioni correctament abans de continuar.

A continuació, afegirem els nostres obstacles (que poden 'destruir' el sprite del personatge principal), una puntuació del joc i un menú 'game over'.

Si heu provat el joc fins ara, l’únic problema que tenim fins ara és que prement el botó “saltar” que vam crear saltarà el personatge independentment de si estan connectats a terra o no; es tracta bàsicament de Flappy Birds i no d’un corredor com volem. Però ho solucionarem.

A l'script, afegiu aquest bit de codi a sobre el mètode Update ():

 públic Transformar groundCheck; públic Transformar startPosition; públic   flotar groundCheckRadius; públic LayerMask whatIsGround; privat   bool a terra; A continuació, afegiu aquesta següent línia al mètode Actualització que hi ha a sobre de si enunciat: onGround = Physics2D.OverlapCircle (groundCheck.position, groundCheckRadius, whatIsGround); A continuació, canviarà aquesta línia següent per incloure '&& onGround' si (Input.GetMouseButtonDown (0) && onGround) {Per tant, tot el nostre script bàsicament hauria de ser així: públic   classe   PlayerControls : MonoBehaviour { públic Rigidbody2D rb; públic Transformar groundCheck; públic Transformar startPosition; públic   flotar groundCheckRadius; públic LayerMask whatIsGround; privat   bool a terra; buit   Començar () {rb = GetComponent (); } buit   Actualització () {rb.velocity = nou Vector2 (3, rb.velocity.y); onGround = Physics2D.OverlapCircle (groundCheck.position, groundCheckRadius, whatIsGround); si (Input.GetMouseButtonDown (0) && onGround) {rb.velocity = nou Vector2 (rb.velocity.x, 5); }}}

Per explicar el que hem fet, hem creat una nova 'transformació', que significa una posició a l'espai del món del joc. Hem establert el seu radi i instruïm a Unity que comprovi si el radi se solapa amb la nostra capa 'terra', i, per tant, si el nostre radi se sincronitza amb el 'terra', el nostre personatge hauria de poder saltar i si Ja estem en l'aire d'un salt, no hauríem de poder tornar a saltar. Bàsicament, a terra serà cert si la transformada anomenada terraComproveu es solapa amb la capa de terra. Tant de bo això tingui sentit.

Així que deseu el guió i torneu a Unity i notareu que s’han afegit més opcions a l’Inspector després de ressaltar el reproductor. Són variables públiques i les podem ajustar al nostre gust.

Ara feu clic amb el botó dret a la jerarquia i creeu un nou objecte buit i arrossegueu-lo de manera que es mostri per sota del caràcter principal a la finestra principal de l'escena: col·loqueu aquest objecte buit on volem que es detecti el terra. Canvieu el nom de l'objecte per 'Check Ground' i, a continuació, arrossegueu-lo per sota de l'objecte de joc del jugador, tal com vam fer anteriorment amb la càmera (per crear una relació pare-fill entre els objectes). Ara l’objecte buit seguirà el sprite del personatge principal, igual que la càmera, i comprovarà contínuament la distància del sòl

Ara seleccioneu el sprite del personatge principal i aneu al tauler Inspector: arrossegueu l'objecte Check Ground a l'espai anomenat 'groundCheck'. La posició de ‘transformació’ hauria de ser igual a la posició d’aquest nou objecte i, on diu “Radi”, convertiu-la en 0,1.

Hem de definir la capa de terra. Només cal que seleccioneu el terreny terrestre i, a l’Inspector, busqueu el botó “Capa: predeterminat” (és un quadre desplegable) i trieu “Afegeix capa”.

Ara seleccioneu 'terra' com a capa de la nostra plataforma i repetiu-ho per a qualsevol altra plataforma de la finestra del joc. Quan es digui 'Què és el sòl' al nostre objecte sprite del personatge principal, també seleccioneu la capa de terra.

El que hem fet és indicar al guió del reproductor que faci una comprovació: si el petit punt de la pantalla se solapa amb qualsevol cosa que coincideixi amb la capa, el personatge només saltarà si això és cert.

Game Over a la col·lisió i al menú Game

Així doncs, per acabar-ho tot, les últimes coses que volem fer són A: fer que xocar amb els obstacles doni com a resultat un joc acabat i B: crear una pantalla de menú 'joc acabat' amb el botó Reproduir de nou.

El que bàsicament voleu fer és:

  1. Afegiu un Jugador objecte i assignar un cos rígid i a col·lisionador que triïs.
  2. Afegiu un Enemic objecte i assignar un cos rígid i a col·lisionador de la vostra elecció. (i opcional, afegeix Etiqueta 'Enemic' a ella)
  3. Crea un nou Script C # i afegiu-lo com a component a Jugador (o utilitzeu qualsevol script adjunt al reproductor, no cal crear-ne un de nou si ja en teniu)
  4. Afegiu-ho al vostre script:
buit OnCollisionEnter ( Col·lisió  coll){ Depuració . Registre ('Col·lisió'); // Comproveu si fins i tot registra una col·lisió, si funciona podeu eliminar aquesta línia if (coll.gameobject. etiqueta == 'Enemic') { // veu si l'objecte amb el qual el jugador ha xocat té una etiqueta anomenada 'Enemic'