Unity3D: Skillnad mellan sidversioner

Från Wikiskola
Hoppa till navigering Hoppa till sök
 
(33 mellanliggande sidversioner av 2 användare visas inte)
Rad 1: Rad 1:
__NOTOC__
== Vad ska vi göra med Unity? ==
== Vad ska vi göra med Unity? ==
{{#ev:youtube |fXKyWWUuoo4 |340 |right |Unityspel av Milan Stefanovic.}}
 
{{#ev:youtube |GRSaqN8oS-Q |340 |right |Unityspel av Linn Nord.}}
{{#ev:youtube |GRSaqN8oS-Q |340 |right |Unityspel av Linn Nord.}}


Rad 9: Rad 11:
: Vi ska lära oss lite C#}}
: Vi ska lära oss lite C#}}


Unity är en avancerad spelmotor där vi kan göra spel. Vi kan använda objekt som vi konstruerat i SketchUp vilket är kul. Efter att vi har gått igenom hela tutorialen kan vi lägga in vår cadd av skolan och skapa vårt personliga spel. Sedan sätter bara fantasin gränser för vad du kan bygga vidare med Unity och SketchUp. Du kommer att lära dig en del programmering i C# på vägen men även Javascript om man vill..
Unity är en avancerad spelmotor där vi kan göra spel. Vi kan använda objekt som vi konstruerat i Fusion 360 vilket är kul. Efter att vi har gått igenom hela tutorialen kan vi bygga vidare och skapa vårt personliga spel. Sedan sätter bara fantasin gränser för vad du kan bygga vidare med Unity och egna caddade objekt. Du kommer att lära dig en del programmering i C# på vägen.
 
Här finns min demo - [http://www.tankesatt.se/wp-content/uploads/2016/01/Rulla-boll-i-TIS-Sto-Mac.app_.zip Rulla Boll TIS Sto Mac]..


Läs gärna detta blogginlägg om att [http://www.tankesatt.se/vi-kan-skapa-egna-spel/ Vi kan skapa spel].
Många kända spel har [https://en.wikipedia.org/wiki/List_of_Unity_games skapats med Unity]. Du kanske gör ett eget spel som blir spritt i framtiden.


== Ladda ner Unity ==
== Ladda ner Unity ==


[http://unity3d.com/get-unity Ladda ner här].
[http://unity3d.com/get-unity Ladda ner här]. Välj Individual - Personal.


Nedladdningen tar förstås tid på lektionen så ni får göra färdigt senare (i skolan eller hemma).
Nedladdningen tar förstås tid på lektionen så ni får göra färdigt senare (i skolan eller hemma).
== Andra bra kanaler ==
: [https://www.youtube.com/user/brackeys Brackeys]
: [https://www.youtube.com/channel/UCuHVjteDW9tCb8QqMrtGvwQ Thomas Brush]


== Hemarbete ==
== Hemarbete ==


Du kommer att gå igenom en tutorial för att lära dig grunderna i Unity3D. Det är samma tutorial som jag gjorde i det exempel som jag bloggat om. Denna tutorial består av sammanlagt nio filmer som du ska se.  
Du kommer att gå igenom en tutorial för att lära dig grunderna i Unity3D. Det är samma tutorial som jag gjorde i det exempel som jag bloggat om. Denna tutorial består av sammanlagt nio filmer som du ska se.  
=== Om att starta ett projekt ===
När man startar ett nytt projekt måste man ange sökvägen till mappen där man ska ha sitt projekt. Det händer på skol-PC att Unity inte hittar din mapp och du får ett felmeddelande.
Skriv då in sökvägen manuellt, exempelvis:
: C:\Users\håkan\Desktop\MittProjekt


=== Jobba på lektionen ===
=== Jobba på lektionen ===


Här finns hela tutorial, nio delar:
{{uppgruta| '''Gör tutorial: Roll a Ball'''
: [http://unity3d.com/learn/tutorials/projects/roll-a-ball/set-up?playlist=17141 Roll a Ball]
 
Här finns '''hela modulen''', med nio totorials (som i sin tur är uppdelat i mindre delar):
: [https://learn.unity.com/project/roll-a-ball-tutorial Roll a Ball]
 
Vi tittar tillsammans på ''Introduction'' och ''Del 1'' så att ni ska få ett hum om vad det handlar om. Observera att allt som sägs i filmerna finns i ett ''Transcript''. Det är att rekommendera att du skriver in all kod själv men om du kör fast kan du kopiera koden från sidan.
 
Din '''uppgift''' är att se film 1-8 noga och göra '''exakt''' som han visar i filmen. När du är klar med din tutorial kommer du att ha ett enkelt men fungerande spel.


Vi tittar tillsammans på:
I fas två utvecklar du spelet efter dina egna idéer och lämnar in något snyggt och spännande som du kan vara stolt över.
: Introduction
}}
: Del 1


=== Läxa  ===
=== Läxa  ===


Gör tutorial Del 1 och del 2 hemma.
Gör färdigt hela tutorialen på lektionerna eller hemma under veckan.


Tänk på att du kan behöva pausa filmen då och då för att verkligen kunna göra exakt det som han gör i filmen. På det här sättet lär du dig Unity på ett bra sätt..
Tänk på att du kan behöva pausa filmen då och då för att verkligen kunna göra exakt det som han gör i filmen. På det här sättet lär du dig Unity på ett bra sätt..


=== Ljussättning ===
== Utveckla vidare med kod för interaktivitet ==
 
=== Hoppa ===
[[Fil:Box collider.png|400px|höger]]
Skapa först den plattform som din spelare ska hoppa från. Skapa en ny tag och ge plattformen den taggen. I bilden och scriptet heter taggen '''J'''.
Markera sedan plattformen och i '''Box Collider'''-fönstret klicka i '''is Trigger''' rutan.
I ditt script '''PlayerController.cs''' ska din '''OnTriggerEnter''' metod se ut på följande sätt:
 


[https://blogs.unity3d.com/2015/02/18/working-with-physically-based-shading-a-practical-approach/ WORKING WITH PHYSICALLY-BASED SHADING: A PRACTICAL APPROACH]
{{Lista |
<pre>
void OnTriggerEnter(Collider other)
{
    if(other.gameObject.CompareTag("Pick Up"))
    {
        other.gameObject.SetActive(false);
        count++;
        SetCountText();
    }
    if(other.gameObject.CompareTag("J"))
    {
        rb.velocity += new Vector3(0, 8, 0);
    }   
}
</pre>
}}
{{#ev:youtube | 7KiK0Aqtmzc | 400 |right |Video om bättre hopp}}
'''Utveckling:''' Hopp-funktionen som ni har skapat är fysikaliskt korrekt, men hoppet kan kännas lite underligt. Se på ''Video om bättre hopp'' för att se hur du kan göra för att skapa ett hopp som ser bättre ut.
{{clear}}


=== Koden finns i javaScript ===
===Osynliga väggar===
[[Fil:Wall Marked and Mesh Renderer.png|800px|höger]]
För att motverka att spelaren hoppar utanför banan kan vi skapa osynliga väggar runt den. Det gör vi genom att först skapa fyra väggar utöver de vi redan skapat och formar dem så de täcker runt banan och markera dem (Se den första bilden).<br /> Avmarkera '''Mesh Renderer''' i inspectorn (Se den andra bilden) så att väggarna blir osynliga.   
{{clear}}
===Rotation===
{|
|-
| I '''steg 1''' ska du skapa ditt objekt som du vill rotera. På bilden i '''steg 1''' ska en kub roteras. <br /><br /> I '''steg 2''' ska du skapa ett Script till det objekt som du precis skapat. Det första du vill göra är skapa fyra stycken ''if-satser'' som kollar om knapparna är nedtryckta. I koden på bilden kollar scriptet om knapp '''H''', '''F''', '''T''' , '''G'''. Om du vill ha andra knappar så behöver du byta de understrykna bokstäverna i '''steg 2''' bilden. <br /><br /> I '''steg 3''' ska du lägga till rotationen på objektet. Det gör du genom att skriva till de markerade raderna i bilden. Variabeln '''Speed''' bestämmer hur snabbt rotationen sker, ju högre '''speed''' är ju snabbare roterar ditt objekt. Det kan vara så att du behöver ändra hur koden ser ut beroende på hur du har placerat din kamera.  <br /><br /> I rutan nedan kan du se och kopiera den kompletta koden för rotationen.
|| <gallery mode = "slideshow" widths = 400px heights = 400px>
Image:Rotation_objekt.png | Steg 1
Image:Rotation_input.png | Steg 2
Image:Rotation_rotation.png | Steg 3
</gallery>
|}
{{Lista |
<pre>
float speed = 30;


På [http://www.codeproject.com/Articles/867743/Unity-D-Ball-Roller CodeProject] finns en kort sammanfattning av hur Roll-a-Ball konstrueras i Unity3D. Där till kodsnuttar i JavaScript.
// Update is called once per frame
void Update () {
    if (Input.GetKey(KeyCode.H))
    {
        transform.Rotate(-Vector3.forward * speed * Time.deltaTime);
    }
    if (Input.GetKey(KeyCode.F))
    {
        transform.Rotate(Vector3.forward * speed * Time.deltaTime);
    }
    if (Input.GetKey(KeyCode.T))
    {
        transform.Rotate(Vector3.right * speed * Time.deltaTime);
    }
    if (Input.GetKey(KeyCode.G))
    {
        transform.Rotate(-Vector3.right * speed * Time.deltaTime);
    }
}
</pre>
}}


Om man kan Unity3D är det säkert möjligt att bygga spelet på en kvart halvtimme ungefär.


Här finns en guide med JavaScript för Unity (det är en speciell variant): [https://forum.unity3d.com/threads/newbie-guide-to-unity-javascript-long.34015/ Newbie guide to Unity Javascript (long)]
{{clear}}


== Ta in en ritning från SketchUp ==
== Ta in en ritning från SketchUp ==
{{#ev:youtube| vGkdNlpYgzs  |340 | right}}


Om du tar in en ritning på exempelvis skolan från SketchUp i ditt spel med kuberna från Roll-a-Ball-tutorialen så blir det roligare. Jag har bloggat om det i [http://www.tankesatt.se/vi-kan-skapa-egna-spel/ Vi kan skapa spel]. Hur du gör ser du i filmen nedan.
Om du tar in en ritning på exempelvis skolan från SketchUp i ditt spel med kuberna från Roll-a-Ball-tutorialen så blir det roligare. Jag har bloggat om det i [http://www.tankesatt.se/vi-kan-skapa-egna-spel/ Vi kan skapa spel]. Hur du gör ser du i filmen nedan.
Rad 63: Rad 142:
* Lägg ett block (förstora det du har från spelet) under hela skolan så klotet inte ramlar igenom
* Lägg ett block (förstora det du har från spelet) under hela skolan så klotet inte ramlar igenom
* I Unity, markera skolan, Add component, Physics, Mesh Collider
* I Unity, markera skolan, Add component, Physics, Mesh Collider
{{#ev:youtube| vGkdNlpYgzs  |340 | left }}


{{clear}}
{{clear}}
Rad 73: Rad 150:
# Klicka på ikonen av .dae filen i project - Assets och på inspector ser du en check box Generate colliders. Import settings
# Klicka på ikonen av .dae filen i project - Assets och på inspector ser du en check box Generate colliders. Import settings
# öppna mappen och dra över .dae till Hierarchy
# öppna mappen och dra över .dae till Hierarchy
=== Lägg till mer spelfunktionalitet ===
[https://unity3d.com/learn/tutorials/projects/2d-roguelike-tutorial/adding-ui-level-transitions Adding UI & Level Transitions] kan vara användbar om du vill bygga ett bättre spel.
Pröva gärna [https://unity3d.com/learn/tutorials/topics/multiplayer-networking/couch-wars-local-multiplayer-basics Couch Wars: Local Multiplayer Basics] från en sida med exempel på [https://unity3d.com/learn/tutorials/topics/multiplayer-networking Multiplayer Networking]
=== Destroy GameObject ===
[https://unity3d.com/learn/tutorials/topics/scripting/destroy Destroy GameObject]


== Inlämning ==
== Inlämning ==
Rad 117: Rad 184:


Därefter kan man länka till filerna från sidan i WordPress. Och då har du ditt spel spelklart för webben.
Därefter kan man länka till filerna från sidan i WordPress. Och då har du ditt spel spelklart för webben.
{{clear}}
==== Trimma WebGL så det blir bra kvalitet ====
{{#ev:youtube| 7nxKAtxGSn8|400| left}}
{{#ev:youtube| 7aP-sjFcVHY|400| right}}
{{clear}}


== Lär mer ==
== Lär mer ==


[https://cgcookie.com/course/c-bootcamp-for-unity/ C# Bootcamp for Unity]
=== Tutorials och kurser ===
 
: [https://cgcookie.com/course/c-bootcamp-for-unity/ C# Bootcamp for Unity]
 
=== Ljussättning ===
 
[https://blogs.unity3d.com/2015/02/18/working-with-physically-based-shading-a-practical-approach/ WORKING WITH PHYSICALLY-BASED SHADING: A PRACTICAL APPROACH]
 
=== Koden finns i javaScript ===
 
På [http://www.codeproject.com/Articles/867743/Unity-D-Ball-Roller CodeProject] finns en kort sammanfattning av hur Roll-a-Ball konstrueras i Unity3D. Där till kodsnuttar i JavaScript.
 
Om man kan Unity3D är det säkert möjligt att bygga spelet på en kvart halvtimme ungefär.
 
Här finns en guide med JavaScript för Unity (det är en speciell variant): [https://forum.unity3d.com/threads/newbie-guide-to-unity-javascript-long.34015/ Newbie guide to Unity Javascript (long)]
 
=== Lägg till mer spelfunktionalitet ===
 
[https://unity3d.com/learn/tutorials/projects/2d-roguelike-tutorial/adding-ui-level-transitions Adding UI & Level Transitions] kan vara användbar om du vill bygga ett bättre spel.
 
Pröva gärna [https://unity3d.com/learn/tutorials/topics/multiplayer-networking/couch-wars-local-multiplayer-basics Couch Wars: Local Multiplayer Basics] från en sida med exempel på [https://unity3d.com/learn/tutorials/topics/multiplayer-networking Multiplayer Networking]
 
=== Destroy GameObject ===
 
[https://unity3d.com/learn/tutorials/topics/scripting/destroy Destroy GameObject]

Nuvarande version från 28 maj 2021 kl. 08.02


Vad ska vi göra med Unity?

Unityspel av Linn Nord.


Mål för undervisningen Unity3D
Vi ska lära oss grunderna i Unity3D genom att gå igenom en tutorial Roll a Ball.
Vi ska lära oss lite C#


Unity är en avancerad spelmotor där vi kan göra spel. Vi kan använda objekt som vi konstruerat i Fusion 360 vilket är kul. Efter att vi har gått igenom hela tutorialen kan vi bygga vidare och skapa vårt personliga spel. Sedan sätter bara fantasin gränser för vad du kan bygga vidare med Unity och egna caddade objekt. Du kommer att lära dig en del programmering i C# på vägen.

Många kända spel har skapats med Unity. Du kanske gör ett eget spel som blir spritt i framtiden.

Ladda ner Unity

Ladda ner här. Välj Individual - Personal.

Nedladdningen tar förstås tid på lektionen så ni får göra färdigt senare (i skolan eller hemma).

Andra bra kanaler

Brackeys
Thomas Brush

Hemarbete

Du kommer att gå igenom en tutorial för att lära dig grunderna i Unity3D. Det är samma tutorial som jag gjorde i det exempel som jag bloggat om. Denna tutorial består av sammanlagt nio filmer som du ska se.

Om att starta ett projekt

När man startar ett nytt projekt måste man ange sökvägen till mappen där man ska ha sitt projekt. Det händer på skol-PC att Unity inte hittar din mapp och du får ett felmeddelande.

Skriv då in sökvägen manuellt, exempelvis:

C:\Users\håkan\Desktop\MittProjekt

Jobba på lektionen

Uppgift
Gör tutorial: Roll a Ball

Här finns hela modulen, med nio totorials (som i sin tur är uppdelat i mindre delar):

Roll a Ball

Vi tittar tillsammans på Introduction och Del 1 så att ni ska få ett hum om vad det handlar om. Observera att allt som sägs i filmerna finns i ett Transcript. Det är att rekommendera att du skriver in all kod själv men om du kör fast kan du kopiera koden från sidan.

Din uppgift är att se film 1-8 noga och göra exakt som han visar i filmen. När du är klar med din tutorial kommer du att ha ett enkelt men fungerande spel.

I fas två utvecklar du spelet efter dina egna idéer och lämnar in något snyggt och spännande som du kan vara stolt över.


Läxa

Gör färdigt hela tutorialen på lektionerna eller hemma under veckan.

Tänk på att du kan behöva pausa filmen då och då för att verkligen kunna göra exakt det som han gör i filmen. På det här sättet lär du dig Unity på ett bra sätt..

Utveckla vidare med kod för interaktivitet

Hoppa

Skapa först den plattform som din spelare ska hoppa från. Skapa en ny tag och ge plattformen den taggen. I bilden och scriptet heter taggen J. Markera sedan plattformen och i Box Collider-fönstret klicka i is Trigger rutan. I ditt script PlayerController.cs ska din OnTriggerEnter metod se ut på följande sätt:


Lista: (klicka expandera till höger)

void OnTriggerEnter(Collider other)
{
    if(other.gameObject.CompareTag("Pick Up"))
    {
        other.gameObject.SetActive(false);
        count++;
        SetCountText();
    }
    if(other.gameObject.CompareTag("J"))
    {
        rb.velocity += new Vector3(0, 8, 0); 
    }    
}


Video om bättre hopp

Utveckling: Hopp-funktionen som ni har skapat är fysikaliskt korrekt, men hoppet kan kännas lite underligt. Se på Video om bättre hopp för att se hur du kan göra för att skapa ett hopp som ser bättre ut.

Osynliga väggar

För att motverka att spelaren hoppar utanför banan kan vi skapa osynliga väggar runt den. Det gör vi genom att först skapa fyra väggar utöver de vi redan skapat och formar dem så de täcker runt banan och markera dem (Se den första bilden).
Avmarkera Mesh Renderer i inspectorn (Se den andra bilden) så att väggarna blir osynliga.

Rotation

I steg 1 ska du skapa ditt objekt som du vill rotera. På bilden i steg 1 ska en kub roteras.

I steg 2 ska du skapa ett Script till det objekt som du precis skapat. Det första du vill göra är skapa fyra stycken if-satser som kollar om knapparna är nedtryckta. I koden på bilden kollar scriptet om knapp H, F, T , G. Om du vill ha andra knappar så behöver du byta de understrykna bokstäverna i steg 2 bilden.

I steg 3 ska du lägga till rotationen på objektet. Det gör du genom att skriva till de markerade raderna i bilden. Variabeln Speed bestämmer hur snabbt rotationen sker, ju högre speed är ju snabbare roterar ditt objekt. Det kan vara så att du behöver ändra hur koden ser ut beroende på hur du har placerat din kamera.

I rutan nedan kan du se och kopiera den kompletta koden för rotationen.

Lista: (klicka expandera till höger)

float speed = 30;

// Update is called once per frame
void Update () {
    if (Input.GetKey(KeyCode.H))
    {
        transform.Rotate(-Vector3.forward * speed * Time.deltaTime);
    }
    if (Input.GetKey(KeyCode.F))
    {
        transform.Rotate(Vector3.forward * speed * Time.deltaTime);
    }
    if (Input.GetKey(KeyCode.T))
    {
        transform.Rotate(Vector3.right * speed * Time.deltaTime);
    }
    if (Input.GetKey(KeyCode.G))
    {
        transform.Rotate(-Vector3.right * speed * Time.deltaTime);
    }
}



Ta in en ritning från SketchUp

Om du tar in en ritning på exempelvis skolan från SketchUp i ditt spel med kuberna från Roll-a-Ball-tutorialen så blir det roligare. Jag har bloggat om det i Vi kan skapa spel. Hur du gör ser du i filmen nedan. Så här gör du

  • Markera hela din konstruktion i SketchUp
  • Export, 3D Model, Collada .dae
  • Import i Unity sker automatiskt om du sparar i assetmappen.
  • Lägg ett block (förstora det du har från spelet) under hela skolan så klotet inte ramlar igenom
  • I Unity, markera skolan, Add component, Physics, Mesh Collider

Ny om hur collider funkar

  1. lägg .dae-filen i en mapp så syns den i Projektmappen i Unity.
  2. Klicka på ikonen av .dae filen i project - Assets och på inspector ser du en check box Generate colliders. Import settings
  3. öppna mappen och dra över .dae till Hierarchy

Inlämning

Vi läger upp våra färdiga spel på en WordPresswebbplats.

Den tråkiga varianten

Inlämning Unityspelet

Lämna in en spelbar fil (.app).

Om filen är mindre än 10 MB: Lägg den på Progress, Teknik 1, F3 - Problemlösning.
Annars: Döp filen med ditt namn så jag vet vem som ska bedömas. Lägg den på min minnessticka.


Den roliga varianten

I korthet går det till så här:

  • I Unity: File - Build Settings
  • Scrolla ner och klicka på WebGL
  • Knapp med info: "Download WebGL module"
  • Starta om Unity
  • Installera WebGL
  • File - Build Settings - Platform Switch - WebGL
  • Build and Run.
  • Döp din fil med ditt namn och använd inte mellanslag eller speciella tecken

Det ger dig en index.html-fil och två mappar; Release samt TemplateData. Dessa filer ska du lämna in till mig. Låt alla filer och mappar ligga i en mapp med ditt namn.

Jag kommer då att ftp:a filerna till http://swiki.se/entreprenorskap/unityspel/

Därefter kan man länka till filerna från sidan i WordPress. Och då har du ditt spel spelklart för webben.

Trimma WebGL så det blir bra kvalitet

Lär mer

Tutorials och kurser

C# Bootcamp for Unity

Ljussättning

WORKING WITH PHYSICALLY-BASED SHADING: A PRACTICAL APPROACH

Koden finns i javaScript

CodeProject finns en kort sammanfattning av hur Roll-a-Ball konstrueras i Unity3D. Där till kodsnuttar i JavaScript.

Om man kan Unity3D är det säkert möjligt att bygga spelet på en kvart halvtimme ungefär.

Här finns en guide med JavaScript för Unity (det är en speciell variant): Newbie guide to Unity Javascript (long)

Lägg till mer spelfunktionalitet

Adding UI & Level Transitions kan vara användbar om du vill bygga ett bättre spel.

Pröva gärna Couch Wars: Local Multiplayer Basics från en sida med exempel på Multiplayer Networking

Destroy GameObject

Destroy GameObject