Tanks
Denne oppgaven tar utgangspunkt i dette prosjektet på Unity sine sider.
Først så må vi starte Unity og velge et nytt prosjekt. Prosjektet kan man kalle hva man selv vil, vi kommer til å kalle det for Tanks i denne tutorialen. Når vi har åpnet Unity så må vi laste ned alle prosjekt filene, dette gjør vi ved å velge Window oppe på verktøylinjen og velger Asset Store. Inne i Asset Store så søker vi på Tanks Tutorial. Når vi har funnet prosjektet så klikker vi på Download og Import etter nedlastingen er ferdig.
1 Sette Opp Prosjektet
- Velg
File -> New Sceneoppe på verktøylinjen for å lage en ny Scene, lagre den nye scenen somMainiScenesmappen. - Slett lyskilden som heter
Directional Lighti hierarkiet fra scenen. - Dra
Prefabensom heter Level Art inn i hierarkiet. Denne ligger i mappenPrefabsi prosjektet:

- Fra
Windowmenyen, åpneLightingpanelet. På dette panelet så skrur vi av Auto helt nederst på vinduet og Baked GI. Under Precomputed Realtime GI så setter viRealtime Resolutiontil 0.5:

- Under Environment Lighting forandre
Ambient SourcefraSkyboxtilColorog bytt fargen til RGB verdiene (72,62,113). - Klikk Build nederst på Panelet.
- Lukk
Lightingpanelet, eller klikk påInspectorpanelet. - Velg
Main Camerafra hierarkiet og bytt posisjon til (-43,42,-25) - Bytt rotasjon til (40,60,0)
- Forandre kameraet sin
ProjectiontilOrtographic - Forandre kameraet sin
Clear FlagsfraSkyboxtilSolid Color. - Forandre
Backgroundfarge til RGB (80,60,50) - Lagre Scenen din.

Miniquiz
Hva kalles de tre koordinatene vi bruker til å si posisjonen til noe i Unity?
- ZXE
- BHD
- XYZ
- ABC
Hvilke 3 farger består RGB av?
- Rød, Gul, Brun
- Rosa, Grønn, Beige
- Rosa, Grønn, Burgunder
- Rød, Grønn, Blå
2 Lage En Tank
- Under mappen
Modelsfinner du en modell som heterTank. Dra denne inn i hierarkiet, på samme måte som vi gjorde medLevelArt. - Forandre
Layertil tanksen slik at den ligger påPlayerslayeret. I Dialogboksen velger duNo, for this object only

- Legg til en
Rigidbodytil tanksen. - Under
Constraintsinne iRigidbody, huk av forFreeze Positionpå Y-aksen, og huk av forFreeze Rotationpå X-aksen og Z-aksen. - Legg til en
Box Colliderpå tanksen og forandreCentertil (0, 0.85, 0) og forandre størrelsen til (1.5, 1.7, 1.6). - Legg til en
Audio Sourcetil tanksen vår og forandreAudio CliptilEngine Idle. Huk også av forLoop.

- Legg til en ekstra
Audio Sourcepå tanksen vår og slå avPlay On Awake. - Velg
Prefabsmappen i prosjektet vårt og dra tanksen ned til mappen, det som skjer er at vi lager enPrefabav tanksen vi har lagd til nå. EnPrefaber et ferdiglaget objekt som inneholder alt vi har lagt til tanksen vår til nå.

- Fra
Prefabsmappen, draDustTrailprefaben til tanksen vår i hierarkiet, slik at den blir enChildav tanks objektet vårt. - Dupliser
DustTrailved å bruke Ctrl + D slik at vi får toDustTrailpå tanksen vår. Gi den nyeDustTrailnavnetLeftDustTrailog den andre navnetRightDustTrail. - Sett posisjonen til
LeftDustTrailtil (-0.5, 0, -0.75) og posisjonen tilRightDustTrailtil (0.5, 0, -0.75)
Tid for litt Kode
- I
Scripts/Tankfolderen så finner vi et script som heterTankMovement, dra denne over på tanksen vår i hierarkiet. - Dobbelklikk på
TankMovementscriptet for å åpne scriptet i Visual Studio eller MonoDevelop. - I scriptet så har vi noen ferdiglagde funksjoner, disse er kommentert ut, så vi må fjerne kommentar tegnene
/* */ - Koden for scriptet ligger under, men vi vil gjerne tenke oss frem til hva vi vil gjøre først.
private void Update ()
{
// Store the value of both input axes.
m_MovementInputValue = Input.GetAxis (m_MovementAxisName);
m_TurnInputValue = Input.GetAxis (m_TurnAxisName);
EngineAudio ();
}
private void EngineAudio ()
{
// If there is no input (the tank is stationary)...
if (Mathf.Abs (m_MovementInputValue) < 0.1f && Mathf.Abs (m_TurnInputValue) < 0.1f)
{
// ... and if the audio source is currently playing the driving clip...
if (m_MovementAudio.clip == m_EngineDriving)
{
// ... change the clip to idling and play it.
m_MovementAudio.clip = m_EngineIdling;
m_MovementAudio.pitch = Random.Range (m_OriginalPitch - m_PitchRange, m_OriginalPitch + m_PitchRange);
m_MovementAudio.Play ();
}
}
else
{
// Otherwise if the tank is moving and if the idling clip is currently playing...
if (m_MovementAudio.clip == m_EngineIdling)
{
// ... change the clip to driving and play.
m_MovementAudio.clip = m_EngineDriving;
m_MovementAudio.pitch = Random.Range(m_OriginalPitch - m_PitchRange, m_OriginalPitch + m_PitchRange);
m_MovementAudio.Play();
}
}
}
private void FixedUpdate ()
{
// Adjust the rigidbodies position and orientation in FixedUpdate.
Move ();
Turn ();
}
private void Move ()
{
// Create a vector in the direction the tank is facing with a magnitude based on the input, speed and the time between frames.
Vector3 movement = transform.forward * m_MovementInputValue * m_Speed * Time.deltaTime;
// Apply this movement to the rigidbody's position.
m_Rigidbody.MovePosition(m_Rigidbody.position + movement);
}
private void Turn ()
{
// Determine the number of degrees to be turned based on the input, speed and time between frames.
float turn = m_TurnInputValue * m_TurnSpeed * Time.deltaTime;
// Make this into a rotation in the y axis.
Quaternion turnRotation = Quaternion.Euler (0f, turn, 0f);
// Apply this rotation to the rigidbody's rotation.
m_Rigidbody.MoveRotation (m_Rigidbody.rotation * turnRotation);
}
Hva er en Prefab?
- En Unity pakke for Grafikk
- Et ferdiglagd objekt som vi kan bruke i Unity
- Et bilde
- En ny smarttelefon