Pubblicità

Come fare un semplice movimento 2D in Unity

Unity è un motore di gioco multipiattaforma sviluppato da Unity Technologies disponibile per Windows, MacOS e Linux, annunciato e rilasciato per la prima volta nel giugno 2005 alla Worldwide Developers Conference di Apple Inc. come motore di gioco esclusivo per Mac OS X. A partire dal 2018, il motore è stato esteso per supportare più di 25 piattaforme. Il motore può essere utilizzato per creare giochi tridimensionali , bidimensionali , di realtà virtuale e di realtà aumentata, nonché simulazioni e altre esperienze. Il motore è stato adottato da industrie al di fuori dei videogiochi, come cinema ,architettura, ingegneria e costruzione.
Chiunque può scaricare unity visitando https://unity3d.com/get-unity/download questo URL e avere la versione più recente di esso.

I fondamenti

Per vedere come deve essere eseguito uno script di movimento del giocatore 2D, dobbiamo iniziare un nuovo progetto 2D.

Dopo aver avviato un nuovo progetto, (Unity avrà del tempo per caricarsi), quindi dobbiamo importare il nostro modello 2D nella schermata Unity. Questa volta sto usando uno Sprite predefinito fornito da unity. Possiamo farlo facendo clic con il pulsante destro del mouse sulla finestra Gerarchia e selezionando un nuovo oggetto 2D.

Quindi dobbiamo aggiungere 2 componenti principali per assicurarci che tutto funzioni correttamente dopo. Questi due sono Rigidbody 2D e Box Collider 2D. Nella finestra/pannello di ispezione è presente un pulsante chiamato Aggiungi componenti. Fare clic su quello e possiamo selezionare quei due attributi per il nostro personaggio principale (square)

Cos’è un Rigidbody?

Un componente Rigidbody 2D pone un oggetto sotto il controllo del motore fisico. Molti concetti familiari dal componente Rigidbody standard vengono trasferiti a Rigidbody 2D; le differenze sono che in 2D, gli oggetti possono muoversi solo nel piano XY e possono ruotare solo su un asse perpendicolare a quel piano. L’aggiunta di un Rigidbody 2D consente a uno sprite di muoversi in modo fisicamente convincente applicando le forze dall’API di scripting. Quando il componente di collisione appropriato è anche collegato all’oggetto di gioco sprite, è influenzato dalle collisioni con altri oggetti di gioco in movimento. L’uso della fisica semplifica molte meccaniche di gioco comuni e consente un comportamento realistico con una codifica minima.

Trovi tutte le informazioni su https://docs.unity3d.com/ScriptReference/Rigidbody.html

Cos’è un Box collider?

Il Box Collider è una forma invisibile utilizzata per gestire le collisioni fisiche di un oggetto. Non è necessario che un collisore abbia esattamente la stessa forma della mesh dell’oggetto, un’approssimazione approssimativa è spesso più efficiente e indistinguibile nel gioco. Ci sono molte proprietà, che eredita dai membri, metodi pubblici e statici all’interno di questo oggetto.

Trovi tutte le informazioni su https://docs.unity3d.com/ScriptReference/BoxCollider2D.html

Cosa fare dopo ?

Prima di tutto impostare la scala di gravità su 0 su RigidBody 2d. Non vogliamo fluttuare fuori cubo/quadrato come lo spazio,

Andiamo allo scripting.

Possiamo aggiungere un nuovo script facendo clic sul pulsante Aggiungi componente e cercando uno script. Lo nomino come “prova”

voglio includere un mini codice per fare un “ciao mondo” su Unity:

using System.Collections; // richiama un pacchetto contenente interfacce e classi che definiscono raccolte di comandi.
using System.Collections.Generic;
using UnityEngine; // richiama un pacchetto contenente interfacce e classi default di Unity

// 
public class prova : MonoBehaviour // classe base che fa accedere a una serie di funzioni predefinite
{
    string ciao = "ciao mondo"; // variabile stringa 
    public Vector2 speed = new Vector2(10, 10); // variabile pubblica (modificabile nell'editor) responsabile per il movimento dell'oggetto


    void Start() // inizializza un comando appena parte che non resistuisce alcun valore(per il void)
    {
        Debug.Log(ciao); // fa apparire nella console il "ciao mondo" che abbiamo creato prima
    }

    void Update() // inizializza un comando ogni frame che non resistuisce alcun valore(per il void)
    {
        float inputX = Input.GetAxis("Horizontal"); // variabile in decimale, che restituisce il valore dell'asse virtuale(dato in Unity) orizzontale
        float inputY = Input.GetAxis("Vertical"); // variabile in decimale, che restituisce il valore dell'asse virtuale(dato in Unity) verticale

        Vector3 movement = new Vector3(speed.x * inputX, speed.y * inputY, 0); // il Vector3 si ottiene moltiplicando speed x/y con input x/y la z vale 0

        movement *= Time.deltaTime; // quantizza i secondi impiegati dal motore per elaborare il frame precedente

        transform.Translate(movement); //Sposta la trasformazione nella direzione di traslazione
    }
}

Non abbiamo bisogno di alcun metodo di Start per il movimento abbiamo solo bisogno del metodo di aggiornamento.

Vector2 : È la rappresentazione di vettori e punti 2D, utilizzati per rappresentare posizioni 2D, solo due assi x&y.
Vector3 : È la rappresentazione di vettori e punti 3D, utilizzati per rappresentare posizioni 3D, considerando gli assi x,y e z.


Poiché il progetto è 2D, dobbiamo solo creare variabili per l’asse X e Y. Per prima cosa ho creato la variabile di velocità come Vector2 (sai perché) e ho assegnato 50 come valore. È una variabile pubblica e X/Y verrà visualizzata nella sezione Ispettore e può essere personalizzata.

Quello che è successo qui è che ho creato 2 variabili e le ho assegnate ai due assi (X/Y). Parole come Orizzontale e Verticale devono essere scritte come sopra perché sono già assegnate in Unity.

Edit -> Project Settings -> Input Manager

Quindi possiamo semplicemente usare i tasti freccia o w/a/s/d per eseguire azioni con il tuo cubo. Dobbiamo moltiplicarli per la variabile di velocità.

Ho creato una variabile Vector3 chiamata movimento e include la moltiplicazione dell’asse. Puoi vedere uno 0 qui, perché non c’è l’asse Z.

Successivamente la variabile di movimento viene moltiplicata e assegnata nuovamente con una variabile denominata Time.deltaTime. Il tempo di completamento in secondi dall’ultimo fotogramma (Sola lettura). Questa proprietà fornisce il tempo tra il frame corrente e quello precedente.
Si usa Time.deltaTime per spostare un GameObject nella direzione y, a un numero di unità al secondo.

Trovi tutte le informazioni su https://docs.unity3d.com/ScriptReference/Time-deltaTime.html

Dopo dobbiamo far passare la variabile di movimento principale nella funzione transform.translate(). Che sposta la trasformazione nella direzione e distanza di traslazione. Se relativeTo è omesso o impostato su Space.Self, lo spostamento viene applicato rispetto agli assi locali della trasformazione. (gli assi x, y e z mostrati quando si seleziona l’oggetto all’interno della vista scena.) Se relativeTo è Space.World, il movimento viene applicato rispetto al sistema di coordinate globali.

https://docs.unity3d.com/ScriptReference/Transform.Translate.html

Questo è tutto:

https://linktr.ee/mycus
sprites di Touhou.

mycus
Author: mycus

- / 5
Grazie per aver votato!