In deze tutorial leer je hoe je een mobiel 3D-spel maakt met C # en Unity. Het doel van het spel is om zoveel mogelijk punten te scoren. Je leert de volgende aspecten van Unity game-ontwikkeling:
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 3D.
In de volgende stap krijgt u de gebruikersinterface van Unity te zien. Stel het project in voor mobiele ontwikkeling door te kiezen Bouw instellingen van de het dossier menu en selecteer uw gewenste platform. Ik heb Android gekozen voor deze tutorial.
Het eerste dat we moeten doen na het selecteren van het platform dat we targeten, is het kiezen van de grootte van de illustraties die we in de game gebruiken. Ik heb de belangrijkste apparaten voor elk platform hieronder opgesomd en de schermresolutie en pixeldichtheid van het apparaat opgenomen.
Omdat Android een open platform is, zijn er veel verschillende apparaten, schermresoluties en pixeldichtheid. Een paar van de meest voorkomende staan hieronder vermeld.
Houd er rekening mee dat de code die voor deze zelfstudie wordt gebruikt, kan worden gebruikt om een van de bovenstaande platforms te targeten.
4. Grafieken exporteren
Afhankelijk van de apparaten die u target, moet u de illustratie van het spel mogelijk naar de aanbevolen grootte en resolutie converteren. U kunt dit doen in uw favoriete foto-editor. Ik heb de Grootte aanpassen ... functie onder de Hulpmiddelen menu in OS X's Voorbeeld toepassing.
Voordat we beginnen, klikt u op de 3D knop in de Tafereel paneel. U kunt ook de resolutie wijzigen die wordt weergegeven in de Spel paneel.
De interface van onze game is eenvoudig. De bovenstaande screenshot geeft je een idee van de illustraties die we gaan gebruiken en hoe de interface van het spel eruit zal zien. U kunt de illustratie en aanvullende bronnen vinden in de bronbestanden van deze zelfstudie.
U kunt een van de drie programmeertalen gebruiken wanneer u Unity gebruikt, C #, UnityScript, een variatie van JavaScript, en boe. Elke programmeertaal heeft zijn voors en tegens, en het is aan jou om te beslissen welke je voorkeur heeft. Mijn persoonlijke voorkeur gaat naar de programmeertaal C #, dus 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.
Ik zal een aantal geluiden gebruiken om de audiale ervaring van het spel te verbeteren. De geluidseffecten die in deze zelfstudie worden gebruikt, zijn verkregen van as3sfxr en Soungle.
Om onze game te maken, moeten we eerst onze 3D-modellen krijgen. Ik raad 3Docean aan voor modellen, texturen en meer van hoge kwaliteit, maar als je aan het testen bent of nog aan het leren bent, dan zijn gratis modellen misschien een goede plek om te beginnen.
De modellen in deze zelfstudie zijn gedownload van SketchUp 3D Warehouse, waar u een grote verscheidenheid aan allerhande modellen kunt vinden.
Omdat Unity de SketchUp-bestandsindeling niet herkent, moeten we SketchUp-bestanden converteren naar een bestandsindeling die Unity kan importeren. Begin met het downloaden van de gratis versie van SketchUp, SketchUp Make.
Open uw 3D-model in SketchUp Make and go select Exporteren> 3D-model van de het dossier menu en kies Collada (* .dae) uit de lijst met opties.
Kies een naam, selecteer een map en klik op Exporteren. Er worden een bestand en een map voor het 3D-model gemaakt. Het bestand bevat de 3D-objectgegevens en de map de texturen die door het model worden gebruikt. U kunt het model nu in Unity importeren, zoals in de volgende stap wordt uitgelegd.
Voordat we beginnen met coderen, moeten we onze activa toevoegen aan het Unity-project. 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 zijn klaar om de scène van ons spel te maken door objecten naar de te slepen Hiërarchie of Tafereel paneel.
Begin met het slepen en neerzetten van de achtergrond naar de Hiërarchie paneel. Het zou automatisch moeten verschijnen in de Tafereel paneel. Pas de .... aan Transformeren waarden in de Inspecteur zoals getoond in de volgende screenshot.
Het doel van het spel is om de bal door de hoepel te gooien. Sleep het van de Middelen paneel naar de Tafereel en verander zijn Transformeren eigenschappen zoals getoond in de screenshot hieronder.
Zoals je misschien al gemerkt hebt, is de basketbalserie iets te donker. Om dit te verhelpen, moeten we een toevoegen Licht naar onze scène. Ga naar GameObject> Maak een ander en selecteer Directional Light. Hiermee wordt een object gemaakt dat een lichtstraal produceert. Verander zijn Transformeren waarden zoals weergegeven in de volgende schermafbeelding, zodat deze de basketbalserie verlicht.
Met de basketbalring goed verlicht, is het tijd om een collider toe te voegen, zodat de bal niet door gaat wanneer deze het witte gebied raakt.
Klik op de Component toevoegen knop in de Inspecteur paneel, selecteer Natuurkunde> Box Collider, en verander de waarden zoals getoond in de volgende screenshot.
Je ziet een groene rand rond de basketbalring in de Tafereel paneel dat de vakman vertegenwoordigt die we zojuist hebben toegevoegd.
Als we een bal op de basketbalring gooien, wordt deze gestopt door de box-collider, maar deze stopt zonder te stuiteren zoals je zou verwachten in de echte wereld. Om dit te verhelpen hebben we een Materiaal van de natuurkunde.
Na het selecteren Creëer> Fysiek materiaal van de Middelen menu,je zou het moeten zien verschijnen in de Middelen paneel. Ik veranderde de naam in BounceMaterial.
Wijzig de eigenschappen in de Inspecteur paneel om overeen te komen met degenen in dit screenshot hieronder.
Selecteer vervolgens de doos-collider van de basketring en klik op het stipje rechts van de Materiaal tekst, zou een venster moeten verschijnen waar u de natuurkundig materiaal.
We zullen een andere collider gebruiken om te detecteren wanneer de bal door de ring gaat. Dit moet een trigger-collider zijn om ervoor te zorgen dat het de botsing detecteert zonder interactie met het fysieke lichaam.
Maak een nieuwe collider voor de borduurring zoals weergegeven in stap 15 en werk de waarden bij zoals weergegeven in de volgende schermafbeelding.
Hierdoor wordt de collider onder de ring geplaatst waar de bal niet naar boven kan gaan, wat betekent dat er een mand is gemaakt. Zorg ervoor dat u de Is Trigger checkbox om het als een trigger-collider te markeren.
Tijd om een rijder aan de ring zelf toe te voegen. Omdat we de bal nodig hebben om door het midden van de ring te gaan, kunnen we geen bol- of doos-botsing hebben, maar gebruiken we een Mesh Collider.
EEN Mesh Collider stelt ons in staat om de vorm van het 3D-object als een collider te gebruiken. Zoals de documentatie vermeldt, bouwt de Mesh Collider de botsingrepresentatie op uit het gaas dat aan het GameObject is bevestigd.
Selecteer de borduurring van de Hiërarchie paneel, klik op de driehoek links om de hiërarchie uit te breiden, uit te breiden group_17, en selecteer het element met de naam Ring.
Voeg een collider toe zoals we hebben gezien in stap 15, maar zorg ervoor dat je selecteert Mesh Collider. Unity detecteert vervolgens automatisch de vorm van het model en maakt er een collider voor.
Om een geluid te spelen wanneer de bal de borduurring raakt, moeten we deze eerst bevestigen. Selecteer het van de Hiërarchie of Tafereel weergave, klik op de Component toevoegen knop in de Inspecteur paneel en selecteer Geluidsbron in de audio sectie.
Haal het vinkje weg Speel op Awake en klik op de kleine stip rechts, onder het tandwielpictogram, om het geluid te selecteren dat je wilt spelen.
Laten we ons nu concentreren op het basketbal. Sleep het van de Middelen map en plaats deze in de scène. Maak je voorlopig geen zorgen over de positie van de bal, want we zetten hem om naar een prefab later.
Om de bal te laten detecteren wanneer deze de borduurring raakt, moeten we een onderdeel toevoegen, een Sphere Collider precies zijn. Selecteer de bal in de scène, open de Inspecteur paneel en klik Component toevoegen. Selecteer uit de lijst met componenten Sphere Collider van de Fysica sectie en werk de eigenschappen bij, zoals hieronder weergegeven.
Om een botsing met het basketbal te detecteren, moet ten minste een van de botsende voorwerpen een hebben star lichaam component eraan verbonden. Selecteer om een bal aan de bal toe te voegen Component toevoegen in de Inspecteur paneel en kies Fysica > star lichaam.
Laat de instellingen op hun standaardwaarden staan en sleep de bal van de Hiërarchie paneel naar de Middelen paneel om het naar een te converteren prefab.
Om de manden weer te geven die al door de speler zijn gemaakt, gebruiken we een 2D-versie van de basketbalserie. Sleep het vanuit het paneel Middelen en plaats het op de scène zoals hieronder weergegeven.
Onder de 2D-hoepel geven we het aantal manden weer dat de speler tot nu toe heeft gescoord. kiezen GameObject> Maak een ander> GUI-tekst om een tekstobject te maken, plaats het onderaan de basketbalring en verander de tekst in de Hiërarchie paneel naar 0.
U kunt een aangepast lettertype insluiten door het in de. Te importeren Middelen map en het wijzigen van de doopvont eigendom van de tekst in de Inspecteur.
De krachtmeter is een staaf die de kracht toont die wordt gebruikt om de bal te schieten. Dit voegt een ander moeilijkheidsniveau toe aan het spel. Versleep de sprites voor de krachtmeter van de Middelen paneel naar de Tafereel en plaats ze zoals getoond in de onderstaande schermafbeelding.
We voegen ook een indicator toe aan de interface die aangeeft hoeveel opnamen de speler nog heeft. Om deze stap te voltooien, volgt u dezelfde stappen die we hebben gebruikt om de huidige score van de speler weer te geven.
Het is eindelijk tijd om wat code te schrijven. Het eerste script dat we gaan maken is het Mand
script dat controleert of de bal door de ring gaat of op het bord valt.
Selecteer de borduurring en klik op de Component toevoegen knop in de Inspecteur paneel. kiezen Nieuw script en noem het Mand
. Vergeet niet om de taal in C # te veranderen. Open het nieuw gemaakte bestand en voeg het volgende codefragment toe.
gebruikmakend van UnityEngine; met behulp van System.Collections; public class Basket: MonoBehaviour openbare GameObject-score; // verwijzing naar het ScoreText-spelobject, ingesteld in de openbare AudioClip-mand van de redacteur; // verwijzing naar het basketgeluid ongeldig OnCollisionEnter () // als bal het board raakt audio.Play (); // speelt het trefferboard geluid void OnTriggerEnter () // als bal de basket collider raakt int currentScore = int.Parse (score.GetComponent (). tekst) + 1; // voeg 1 toe aan de score score.GetComponent (). text = currentScore.ToString (); AudioSource.PlayClipAtPoint (basket, transform.position); // speelmand geluid
In dit script stellen we twee openbare variabelen in die objecten op de vertegenwoordigen Tafereel en in de Middelen map. Ga terug naar de editor en klik op het kleine puntje rechts van de variabelen om de waarden te selecteren die in de opmerkingen worden beschreven.
We spelen een geluid wanneer de bal de basketbalring raakt en controleren of de bal door de ring gaat. De ontleden
methode zal de tekst van de GUI-tekst game-object naar een nummer, zodat we de score kunnen verhogen en vervolgens opnieuw instellen als tekst met toString
. Aan het eind spelen we de mand
geluid.
De Schieten
klas behandelt de rest van de spelinteractie. We zullen de inhoud van het script breken om het gemakkelijker te verteren.
Begin met het selecteren van Camera en klik op de Component toevoegen knop in de Inspecteur paneel. kiezen Nieuw script en noem het Schieten
.
In het volgende codefragment heb ik de variabelen vermeld die we zullen gebruiken. Lees de opmerkingen in het codefragment ter verduidelijking.
gebruikmakend van UnityEngine; met behulp van System.Collections; public class Shoot: MonoBehaviour openbare GameObject-bal; // verwijzing naar de bal prefab, ingesteld in editor private Vector3 throwSpeed = new Vector3 (0, 26, 40); // Deze waarde is een zekere basket, we zullen dit aanpassen met de Forcemeter Public Vector3 ballPos; // startende balpositie private bool thrown = false; // als een bal is gegooid, wordt voorkomen dat 2 of meer ballen privé zijn GameObject ballClone; // we gebruiken niet het originele prefab openbare GameObject availableShotsGO; / / ScoreText game object referentie private int availableShots = 5; openbare GameObject-meter; // verwijzingen naar de openbare GameObject pijl van de force meter; private float arrowSpeed = 0.3f; // Moeilijkheid, hogere waarde = snellere pijlbeweging privé bool right = true; // gebruikt om de beweging van de pijl om te keren public GameObject gameOver; // game over tekst
Vervolgens maken we de Begin
methode waarin we de zwaartekracht instellen -20
om de bal sneller te laten vallen.
void Start () / * Gravity verhogen * / Physics.gravity = new Vector3 (0, -20, 0);
Om interacties met de physics engine te verwerken, implementeren we de FixedUpdate
methode. Het verschil tussen deze methode en de reguliere Bijwerken
methode is dat FixedUpdate
wordt uitgevoerd op basis van natuurkundige stappen in plaats van elk frame, wat problemen kan veroorzaken als het apparaat traag is vanwege een tekort aan geheugen, bijvoorbeeld.
In de FixedUpdate
methode, verplaatsen we de pijl van de krachtmeter met behulp van de rechts
variabele om te detecteren wanneer de beweging van de pijl moet worden omgekeerd.
void FixedUpdate () / * Verplaats Meter Arrow * / if (arrow.transform.position.x < 4.7f && right) arrow.transform.position += new Vector3(arrowSpeed, 0, 0); if (arrow.transform.position.x >= 4.7f) right = false; if (right == false) arrow.transform.position - = new Vector3 (arrowSpeed, 0, 0); if (arrow.transform.position.x <= -4.7f) right = true;
Het basketbal wordt gegooid wanneer de speler op het scherm tikt. Telkens wanneer op het scherm wordt getikt, controleren we eerst of er al een bal in de lucht hangt en of de speler opnames beschikbaar heeft. Als aan deze vereisten is voldaan, werken we de waarden bij, maken we een nieuwe instantie van de bal en gooien we deze met behulp van de addForce
methode.
/ * Schiet bal op Tap * / if (Input.GetButton ("Fire1") &&! Throw & & availableShots> 0) thrown = true; availableShots--; availableShotsGO.GetComponent (). text = availableShots.ToString (); ballClone = Instantiate (ball, ballPos, transform.rotation) als GameObject; throwSpeed.y = throwSpeed.y + arrow.transform.position.x; throwSpeed.z = throwSpeed.z + arrow.transform.position.x; ballClone.rigidbody.AddForce (throwSpeed, ForceMode.Impulse); audio.Play (); // play shoot sound
In het volgende codeblok testen we of de bal de grond bereikt en verwijdert wanneer hij die bereikt. We bereiden ons ook voor op de volgende worp door de variabelen opnieuw in te stellen.
/ * Verwijder de bal wanneer deze de grond raakt * / if (ballClone! = Null && ballClone.transform.position.y < -16) Destroy(ballClone); thrown = false; throwSpeed = new Vector3(0, 26, 40);//Reset perfect shot variable
Nadat de bal is verwijderd, controleren we of de speler nog schoten heeft. Als dit niet het geval is, beëindigen we het spel en bellen we herstarten
.
/ * Controleer of out of shots * / if (availableShots == 0) arrow.renderer.enabled = false; Instantiëren (gameOver, nieuwe Vector3 (0.31f, 0.2f, 0), transform.rotation); Invoke ("herstart", 2);
herstarten
De herstarten
methode wordt twee seconden uitgevoerd nadat de speler geen opnamen meer maakt en het spel herstart door aan te roepen LoadLevel
.
void restart () Application.LoadLevel (Application.loadedLevel);
Het is tijd om de game te testen. druk op Command-P om het spel in Unity te spelen. Als alles naar behoren werkt, 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.
De instellingen zijn van toepassing en omvatten de maker of het bedrijf, de toepassingsresolutie en de weergavemodus, weergavemodus, apparaatcompatibiliteit, enz. De instellingen verschillen afhankelijk van het platform en de apparaten die uw toepassing target en houden ook de vereisten aan van de winkel die u publiceert in gedachten.
Met de illustratie die je eerder hebt gemaakt, kun je nu een leuk pictogram en een splash-afbeelding voor je spel maken. Unity toont u de vereiste formaten, die afhankelijk zijn van het platform waarvoor u bouwt.
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 over 3D-modellen, mesh-colliders, natuurkundematerialen, botsingsdetectie en andere aspecten van de ontwikkeling van Unity-spellen. 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.