In deze tutorial leer je hoe je een 2D-game maakt met C # en Unity. We zullen profiteren van Unity's microfoonondersteuning om de gameplay van het spel te verbeteren. Het doel van het spel is simpel, het bereiken van de andere kant van het level door onderweg obstakels te ontwijken. De speler kan het hoofdpersonage verplaatsen door op de microfoon van het apparaat te blazen en deze naar boven te verplaatsen.
In deze tutorial leer je de volgende aspecten van Unity-gameontwikkeling:
Open Unity en selecteer Nieuw project van de het dossier menu om het nieuwe projectdialoogvenster te openen. Vertel Unity waar u het project wilt opslaan en stel het inStandaardinstellingen instellen voor: menu naar 2D.
In de volgende stap krijgt u de gebruikersinterface van Unity te zien. Stel het project in op uw voorkeursplatform door te kiezen Bouw instellingen van de het dossier menu en het selecteren van het doelplatform.
Voordat we aan de slag gaan, zorgt u ervoor dat de 2D knop in de Tafereel paneel is gemarkeerd. U kunt de huidige resolutie ook wijzigen in de Spel paneel.
U zou ook de werkruimtepanelen van Unity moeten zien, die we in deze tutorial zullen gebruiken. Neem even de tijd om de gebruikersinterface van Unity te verkennen, zoals de Tafereel, Spel, Hiërarchie, project, Middelen, en Inspecteur. We zullen ze veel gebruiken in deze tutorial.
De gebruikersinterface van onze game zal eenvoudig zijn. De volgende screenshot geeft je een idee van de assets die we gaan gebruiken en hoe de uiteindelijke gebruikersinterface van het spel eruit zal zien. Je kunt de assets vinden die we zullen gebruiken in de bronbestanden op GitHub.
U kunt een van de drie programmeertalen gebruiken wanneer u Unity gebruikt, C #, UnityScript, een variatie van JavaScript, en boe. Elk van deze programmeertalen heeft zijn voor- en nadelen en het is aan u om te beslissen welke u kiest. Mijn persoonlijke voorkeur gaat uit naar de programmeertaal C # en dat is de taal die ik in deze zelfstudie zal gebruiken.
Als u besluit een andere programmeertaal te gebruiken, moet u de voorbeelden van Unity's Script Reference raadplegen.
Voordat we beginnen met coderen, moeten we de items aan het Unity-project toevoegen. U kunt dit op verschillende manieren doen:
Nadat u deze stap hebt voltooid, ziet u de items in uw project Middelen map in de project paneel.
We zullen een aantal geluiden gebruiken om een geweldige audiale ervaring te creëren. De geluidseffecten die in deze zelfstudie worden gebruikt, zijn verkregen van freesound.org.
Begin met het slepen en neerzetten van de achtergrond naar de Hiërarchie paneel. Het zou automatisch moeten verschijnen in de Tafereel paneel.
Omdat het Tafereel paneel is ingesteld om een 2D-weergave weer te geven, zult u merken dat het selecteren van de Hoofdcamera in de Hiërarchie toont een voorbeeld van wat de camera gaat weergeven. Je kunt dit ook zien in de Spel uitzicht. Om de hele scène zichtbaar te maken, stelt u de Grootte waarde van de Hoofdcamera naar 4 in de Inspecteur paneel zoals hieronder getoond.
We gebruiken een sprite-blad voor de elementen van de gebruikersinterface van onze game. Unity heeft een spriteditor die het gebruik van sprites een fluitje van een cent maakt. De illustraties in deze tutorial zijn verkregen van openclipart.org.
Importeer de illustratie, selecteer deze uit de Middelen paneel en wijzig de Sprite-modus optie om Meerdere in de Inspecteur paneel.
Klik op de knop met het label Sprite Editor en stel de Type optie om automatisch.
Klik met het sprite-blad in plakjes en klaar voor gebruik op de pijl die verschijnt als het sprite-blad is geselecteerd en kies de sprite van de koe, het hoofdpersonage van onze game. Sleep het naar de scène om het toe te voegen.
Om botsingen te detecteren, moet ten minste één van de botsende voorwerpen een hebben Rigidbody 2D component eraan verbonden. Om er een toe te voegen aan de koe, klikt u op de Component toevoegen knop in de Inspecteur paneel. Selecteer uit de lijst met componenten RigidBody 2D in de Natuurkunde 2D sectie.
Controleer de Vaste hoek doos om te voorkomen dat de koe draait als er een botsing plaatsvindt. We zullen de standaard fysica zwaartekracht in dit spel niet gebruiken, in plaats daarvan zullen we onze eigen simulatie simuleren. Verander de Zwaartekracht schaal van 1 naar 0 om te zorgen dat de standaardzwaartekracht geen invloed heeft op het object.
De vloer wordt gebruikt om te voorkomen dat onze hoofdpersoon valt wanneer we de fysica aan de game hebben toegevoegd. Maak een nieuw game-object door te selecteren Maak leeg van de GameObject menu.
Om de vloer te laten detecteren wanneer het personage het aanraakt, moeten we een toevoegen Box Collider 2D component. Een collider is een fysische vorm die het gebied definieert dat een botsing veroorzaakt.
Selecteer het vloergame-object in de Hiërarchie, open de Inspecteur paneel en klik Component toevoegen. Selecteer uit de lijst met componenten Box Collider 2D in de Natuurkunde 2D sectie.
Verander de Grootte eigendom aan X: 4,8 en Y: 0,05 om een kleine rechthoek te maken waar de koe zal worden geplaatst. Voeg ten slotte een toe Box Collider 2D naar het cow game-object door deze stappen te herhalen.
Een Geluidsbron component wordt gebruikt om een audioclip af te spelen wanneer de speler de ster verzamelt. Dit onderdeel leest de audioclip die in de opties is ingesteld en speelt deze af wanneer deze wordt opgeroepen vanuit een script of aan het begin als het Speel op Awake checkbox is geselecteerd.
Om een geluid te spelen wanneer de speler een ster verzamelt, moeten we eerst een Geluidsbron component ervan. Selecteer de ster in de Hiërarchie of Tafereel weergave, klik op de Component toevoegen knop in de Inspecteur paneel en selecteer Geluidsbron in de audio sectie.
Omdat we alleen willen dat het geluid wordt afgespeeld wanneer de speler de ster raakt, moeten we het vinkje verwijderen Speel op Awake keuze. Klik op de kleine stip aan de rechterkant, onder het tandwielpictogram, om het geluid te selecteren dat we willen spelen.
De ballonnen vertegenwoordigen het leven of de gezondheid van onze hoofdpersoon. Wanneer een hand in botsing komt met de koe, zal een van de ballonnen knallen om aan te geven dat deze is geraakt en het aantal levens is afgenomen.
Sleep de sprite van de ballon van de Middelen naar de Hiërarchie paneel en vervolgens terug naar de Middelen. Dit zal een maken prefab van de ballon. Je zult merken dat de tekst blauw wordt, wat aangeeft dat het nu een prefab is. Door een prefab te maken, kunnen we de ballon opnieuw gebruiken zonder extra hulpbronnen te gebruiken.
Selecteer de nieuwe prefab en druk op Command + D om het te dupliceren. Gebruik de omwenteling gereedschap om de ballonnen iets te draaien, zoals weergegeven in de bovenstaande schermafbeelding.
We groeperen de koe en de ballonnen om ze een beetje gemakkelijker te maken. Om dit te doen, sleept u een ballon van de Hiërarchie paneel en plaats het bovenop het cow game-object in de Hiërarchie paneel. Het cow-game-object is gemarkeerd om aan te geven dat als u de ballon erop neerzet, deze als een kind van het cow-game-object wordt toegevoegd. Het resultaat is dat het bewegen van het koe-spelobject ook de positie van de ballonnen verplaatst.
De handen zijn de vijanden of obstakels die moeten worden vermeden als de speler het level wil voltooien door de ster te verzamelen. De wijzers bewegen van links naar rechts en laten een smalle opening in het midden achter zodat de koe er doorheen kan.
Omdat de handen game-objecten zijn die we meerdere keren gebruiken, zetten we deze eerst om in een prefab zoals bij de ballonnen. Volg de bovenstaande stappen om de prefab te maken en gebruik de editorhulpprogramma's om de handen te positioneren zoals weergegeven in de bovenstaande schermafbeelding.
We moeten ook een collider toevoegen aan elke hand om botsingen te detecteren. Klik op de om de collider toe te voegen Component toevoegen knop in de Inspecteur paneel en selecteer Box Collider 2D in de Natuurkunde 2D sectie. Je zult opmerken dat er een groen vakje rond de hand verschijnt wanneer je het selecteert om aan te geven dat de hand een spider heeft die eraan vastzit.
We spelen ook een geluid wanneer een hand botst met de koe en een ballon knalt. Om dit te bereiken, moeten we eerst het geluid toevoegen. Selecteer de hand van de Hiërarchie of Tafereel weergave, klik op de Component toevoegen knop in de Inspecteur paneel en selecteer Geluidsbron van de audio sectie.
De details van de audiocomponent worden weergegeven in de Inspector Panel. Klik op de stip onder het tandwielpictogram om het juiste geluid te selecteren.
Het doel van het spel is om de ster aan het einde van elk level te verzamelen. De speler kan de koe omhoog bewegen door op de microfoon van het apparaat te blazen.
Sleep de ster van de Middelen paneel en voeg het toe aan de Tafereel. In de Inspecteur's Transformeren sectie, wijzig de waarden zoals weergegeven in de onderstaande schermafbeelding om de ster te positioneren.
Dit plaatst de ster bovenaan het niveau. Om te detecteren wanneer de koe de ster verzamelt, moeten we er een collider aan toevoegen, zoals we al een paar keer hebben gedaan. Voeg een ... toe Box Collider 2D naar de ster.
Waarschuwingen zijn ook game-objecten. Dit zijn berichten die de speler informeren wanneer het niveau is voltooid of het spel is afgelopen.
Sleep de meldingen van de Middelen paneel naar de Hiërarchie en dan terug naar de Middelen paneel om ze naar een prefab om te zetten. Later in deze tutorial voegen we een script toe aan de waarschuwingen en laten we zien hoe ze worden gebruikt. Vergeet niet om ze te verwijderen van de Tafereel nadat je ze hebt geconverteerd naar een prefab.
Unity bevat een code-editor, een versie van Mono ontwikkelen. Hoewel het een goede editor is, kunt u elke gewenste editor gebruiken. Visuele studio, bijvoorbeeld, is een populaire keuze als u Windows gebruikt.
U kunt een nieuw bestand maken door uw code-editor te starten en het bestand op te slaan in de Middelen map van uw project en vervolgens toe te voegen aan een GameObject, net zoals je met een component doet. U kunt ook een nieuw script maken in de Inspecteur door selecteren Nieuw script en dubbelklik erop om het te openen.
Om onze hoofdpersoon te verplaatsen, hebben we toegang tot de microfoon van het apparaat nodig. Standaard biedt Unity basisondersteuning voor het vastleggen van audio, maar het bevat geen eigenschap of methode om het activiteitsniveau van de microfoon te detecteren, wat is wat we nodig hebben om de koe te verplaatsen.
Gelukkig kunnen we een script van een derde partij gebruiken dat ons toegang geeft tot een loudness
eigendom. De loudness
eigendom zal ons toestaan, samen met transform.position
, om de koe te verplaatsen.
Maak een leeg GameObject en noem het MicrophoneInput. Gebruik de Component toevoegen om het voornoemde script te bevestigen en een Geluidsbron component van het nieuwe game-object.
Door dit te doen, schakelen we het script in en de toepassing begint de invoer van de microfoon te vangen. Door de Gevoeligheid eigendom in de Inspecteur, we bepalen hoeveel de koe wordt verplaatst door de invoer van de microfoon. Hoe hoger de waarde, hoe sneller de koe beweegt. Ik heb dat gevonden 50 is een goede waarde om mee te beginnen.
Het volgende script definieert de Hand
klasse en regelt de beweging van de handen. De wijzers bewegen continu van links naar rechts en omgekeerd. Laten we kijken hoe dit werkt.
De eerste eigenschap die we gebruiken in het script is bewegingssnelheid
, een vlotter
Dit bepaalt het aantal eenheden dat een hand beweegt tijdens elk frame. Het zet de X
waarde van de transform.position
eigendom, de hand horizontaal verplaatsen.
De tweede eigenschap, currentPos
, is ook een vlotter
en slaat de huidige positie van de hand op voordat deze beweegt. Dit zal ons helpen het aantal eenheden te berekenen dat de hand kan bewegen.
gebruikmakend van UnityEngine; met behulp van System.Collections; openbare klasse Hand: MonoBehaviour private float moveSpeed = 0.02f; privé float currentPos; public bool left = false;
Ten slotte, de links
eigendom van het type boolean
bepaalt of de hand naar links beweegt. Dit maakt het gemakkelijk om de richting van een hand te veranderen door de links
variabel voor beide waar
of vals
.
De Begin
methode is een methode die is gedefinieerd in de MonoBehaviour
klasse die wordt aangeroepen tijdens de initialisatie, voordat een andere methode wordt aangeroepen, met uitzondering van Wakker
, die we niet zullen behandelen in deze tutorial.
In de Begin
methode, kunnen we het object configureren voordat een andere code wordt uitgevoerd. In dit geval stellen we de currentPos
eigendom van de huidige positie van de hand, voordat deze is verplaatst.
void Start () currentPos = transform.position.x;
In de Bijwerken
methode, controleren we of de hand links of rechts is en verplaatsen we hem tijdens elk frame in de juiste richting. Om dit te doen, schrijven we een als
verklaring binnen de Bijwerken
methode en verlaag of verhoog de X positie met behulp van de bewegingssnelheid
variabele om de te wijzigen positie
eigendom.
void Update () / * Hand verplaatsen * / / * Naar rechts verplaatsen als hand aan de linkerkant staat * / if (! left) transform.position - = new Vector3 (moveSpeed, 0, 0); else transform.position + = new Vector3 (moveSpeed, 0, 0); / * Verander moveSpeed om in de andere richting te bewegen, creërend een beweging lus * / if (transform.position.x <= currentPos - 0.7f) moveSpeed *= -1; if (transform.position.x >= currentPos + 0.7f) moveSpeed * = -1;
Wanneer de hand beweegt 0.7
eenheden, vermenigvuldigen we de bewegingssnelheid
eigendom door -1
om de hand in de tegenovergestelde richting te laten bewegen. Het resultaat is dat de handen van de ene naar de andere kant in een continue lus bewegen, waardoor het moeilijker wordt voor de koe om door de handen te gaan en de ster te bereiken.
Maak een nieuw script en koppel het aan het cow game-object. Dit script behandelt de acties van de speler en een paar andere functies die verband houden met de mechanica van de game, zoals het weergeven van de waarschuwingen. Laten we eens kijken naar de eigenschappen die in dit script worden gebruikt.
gebruikmakend van UnityEngine; met behulp van System.Collections; public class Cow: MonoBehaviour private Vector3 gravity = new Vector3 (0, 0.02f, 0); openbare GameObject micVolume; privé float moveSpeed; ballonnen voor privé-bytes = 3; openbare GameObject alertWin; openbare GameObject alertLose;
zwaartekracht
: gebruikt om een verticale kracht te simuleren, het trekt de koe naar benedenmicVolume
: verwijzing naar de MicrophoneInput
game-objectbewegingssnelheid
: krijgt de loudness
waarde van de MicrophoneInput
klasseballonnen
: houdt het aantal ballonnen bij, deze waarde staat voor het leven van de speleralertWin
: Verwijzing naar de alertWin
game-objectalertLose
: Verwijzing naar de alertLose
game-objectMerk op dat openbare variabelen moeten worden ingesteld in de editor van de Unity. Het zijn allemaal verwijzingen naar prefabs. Het instellen van de waarde van een variabele in de editor is eenvoudig. Sla het script op en controleer of er geen fouten zijn. Schakel vervolgens terug naar Unity en selecteer de game-object waaraan het script is gehecht. U zou de variabelen onder het scriptonderdeel moeten zien zoals hieronder getoond.
Sleep het gewenste of gewenste item naar de variabele of klik op het kleine punt onder het tandwielpictogram om het te selecteren.
Zorg ervoor dat het activum en de variabele van de zijn zelfde type of je kunt het niet laten vallen of zien wanneer je op het puntpictogram klikt.
Om de koe naar boven te verplaatsen, gebruiken we de FixedUpdate
methode. Waarom niet de reguliere Bijwerken
methode? Deze methode is vooraf gedefinieerd MonoBehaviour
methode die wordt uitgevoerd elke vaste framesnelheid in plaats van elk frame. Dit betekent dat het vloeiend zal zijn, zelfs als de huidige framesnelheid een beetje laag is. Voeg het volgende codeblok toe aan het script:
void FixedUpdate () / * Verplaats koe omhoog op basis van Mic volume * / moveSpeed = micVolume.GetComponent() .loudness * 0.01f; transform.position = new Vector3 (0, transform.position.y + moveSpeed, 0); / * Simuleer onze eigen zwaartekracht (deze wordt niet sterker wanneer hij hoog is) * / transform.position - = zwaartekracht;
We berekenen de snelheid door de huidige luidheid van de microfoon te krijgen. Deze luidheid wordt verkregen van de MicrophoneInput
klasse en vervolgens vermenigvuldigd met 0.01. We doen dit om te voorkomen dat de koe te snel beweegt.
Het koekarakter wordt verplaatst door het vergroten van de Y
waarde van de transform.position
eigendom, met behulp van de snelheid die we hebben opgeslagen in opgeslagen bewegingssnelheid
.
Naast het verplaatsen van de koe, passen we er ook een neerwaartse kracht op toe, de zwaartekracht. We bereiken dit door de positie van de koe te verlagen met behulp van de zwaartekracht
vector die we eerder hebben gemaakt. Als u dit doet, wordt het aantal afdrukken steeds lager Y
positie van de koe zonder hem sneller te laten vallen, wat gebeurt als we het standaard zwaartekrachtgedrag zouden gebruiken.
In de volgende stap detecteren we of een van de handen botst met de koe. De OnTriggerEnter2D
methode wordt uitgevoerd wanneer twee objecten botsen zonder interactie met de natuurkunde. In dit geval controleren we of de koe botst met een genoemd object "Hand"
, die een van de wijzers van de scène kan zijn en speel de audio af die aan het cow game-object is gekoppeld als de botsing plaatsvindt. Je zult merken dat we ook de alpha-eigenschap van de koe inspecteren. Waarom we dit doen, wordt in de volgende stap uitgelegd.
void OnTriggerEnter2D (Collider2D anders) / * Hands Collision * / if (other.name == "Hand" && transform.GetComponent() .color.a == 1) other.audio.Play ();
Botsingen worden meerdere malen getest in elk frame, wat betekent dat er drie botsingen zullen optreden in een zeer korte tijd waarbij alle ballonnen knallen. Omdat we niet willen dat dit gebeurt, hebben we een manier nodig om dit te voorkomen.
Een handige manier om dit te doen is om de alpha van het getroffen object te wijzigen. Dit geeft de gebruiker ook visuele feedback die aangeeft dat deze is geraakt. De volgende regels zorgen ervoor.
/ * Voorkomen van meerdere botsingen * / Kleur alpha = nieuwe kleur (1, 1, 1, 0,5f); transform.GetComponent() .color = alpha; Invoke ("EnableCollision", 1);
We maken eerst een nieuw Kleur
object en wijs het de kleur van het spelobject toe en stel de alpha
waarde voor 0.5
om het semi-transparant te maken. Vervolgens hebben we toegang tot het game-object SpriteRenderer
, waardoor we de kleur kunnen aanpassen.
De laatste regel in dit codeblok wacht een seconde en roept vervolgens de EnableCollision
functie. Met deze functie worden de kleurwaarden van de koe opnieuw ingesteld, waardoor deze een botsing opnieuw kan detecteren. We zullen deze functie later in deze tutorial implementeren.
Wanneer de koe door een hand wordt geraakt, moet één ballon worden verwijderd. We noemen het Vernietigen
methode op een voorwerp met een ballonspel. Wij gebruiken de Vind
functie, omdat we geen verwijzing naar elk van de ballonnen hebben.
Deze functie doorzoekt de activa van de game en retourneert het game-object waarnaar we op zoek zijn, in dit geval een ballon.
/ * Verwijder ballon * / vernietig (GameObject.Find ("ballon")); balloons--;
Maar wacht, zijn er geen drie ballonnen in de scène? Dat is juist. echter, de Vind
functie retourneert de eerste overeenkomst die het kan vinden. Met andere woorden, het geeft het eerste gevonden ballongame-object als resultaat.
We verlagen ook het ballonnen
om ons te helpen weten wanneer de koe zijn hele leven heeft verloren.
Het spel is afgelopen als alle ballonnen zijn gepoft. Om dit te testen, controleren we of ballonnen
is gelijk aan 0
en een waarschuwing weergeven als het waar is. We hebben ook de zwaartekracht
's Y
eigendom aan 0
en pauzeer het spel door in te stellen tijdschaal
naar 0
.
De tijdschaal
property bepaalt hoe de tijd verstrijkt in de game-omgeving. Het kan worden gebruikt om het spel sneller of langzamer te maken op basis van de waarde. De standaard tijdschaal is 1.0
, als u de waarde verhoogt, worden de functies voor de framesnelheid versneld en als u deze verlaagt, worden ze langzamer. Instellen op 0
pauzeert het spel en voorkomt nieuwe botsingen.
/ * Game Over * / if (ballonnen == 0) GameObject alert = Instantiate (alertLose, new Vector3 (0, 0, 0), transform.rotation) als GameObject; gravity.y = 0; Time.timeScale = 0;
Wanneer de speler de andere kant van het level bereikt, moeten we de ster verwijderen en een melding weergeven dat het level is voltooid.
De als
statement controleert of de botsing in feite is met het object star game en speelt de audio die aan de koe is gekoppeld af als de naam correct is. Vervolgens verwijderen we de ster uit de scène voordat de waarschuwing wordt gemaakt. We hebben ook de zwaartekracht
's Y
eigendom aan 0
zoals we deden in de vorige stap.
/ * Star Collision * / if (other.name == "Star") audio.Play (); Vernietigen (other.gameObject); GameObject alert = Instantiate (alertWin, new Vector3 (0, 0, 0), transform.rotation) als GameObject; gravity.y = 0;
De EnableCollision
methode reset de alpha-waarde van het cow game-object nadat het door een hand is geraakt. Hierdoor kan het cow-game-object een nieuwe hit detecteren. Merk op dat de Kleur
object heeft een alpha
van 1
.
void EnableCollision () Kleur alpha = new Color (1, 1, 1, 1); transform.GetComponent() .color = alpha;
De vernieuwen
methode gebruikt de Toepassing
klasse om het huidige niveau opnieuw te laden. Maak een nieuw script met de naam Herstarten , voeg het volgende codeblok toe en plak het bij beide prefab-waarschuwingen die we eerder hebben gemaakt.
gebruikmakend van UnityEngine; met behulp van System.Collections; public class Restart: MonoBehaviour void Update () if (Input.GetButton ("Fire1")) Reload (); void Reload () Application.LoadLevel (Application.loadedLevel);
We testen eerst of de gebruiker op het scherm tikt met behulp van de Invoer
klasse en bel de vernieuwen
methode indien waar. De implementatie van de vernieuwen
methode is kort en eenvoudig. Alles wat we doen is het huidige niveau laden, elk object en variabele terugzetten naar de oorspronkelijke status.
Het is tijd om de game te testen. druk op Command-P om het spel in Unity te spelen. Als alles werkt zoals verwacht, bent u klaar voor de laatste stappen.
Als je tevreden bent met je spel, is het tijd om te selecteren Bouw instellingen van de het dossier menu en klik op de Speler instellingen knop. Dit zou de Speler instellingen in de Inspecteur paneel waar u de parameters voor uw toepassing kunt instellen.
Deze instellingen zijn toepassingsspecifiek en omvatten de maker of het bedrijf, de toepassingsresolutie, de weergavemodus, enzovoort. Deze instellingen zijn afhankelijk van de apparaten die u target en de winkels of markten waar u uw game op publiceert.
Zodra uw project correct is geconfigureerd, is het tijd om terug te gaan naar de Bouw instellingen en klik op de Bouwen knop. Dat is alles wat nodig is om uw spel te bouwen voor testen en / of distributie.
In deze zelfstudie hebben we geleerd hoe je microfoonbesturingselementen, interactie met de natuur, sprite-sheets en andere aspecten van game-ontwikkeling met Unity kunt implementeren. Ik moedig je aan om met het resultaat te experimenteren en het spel aan te passen zodat het je eigen spel wordt. Ik hoop dat je deze tutorial leuk vond en vond het nuttig.