Creare il gioco Roll a Ball di UnityCreate Unity Roll a Ball game

Questa esercitazione illustra i passaggi principali di un' esercitazione su Roll a Ball di Unityleggermente modificata.This tutorial walks through the main steps for a slightly modified Unity Roll a Ball tutorial. Questo gioco di esempio è costituito da un oggetto "player" sferico controllato dall'utente dell'app e lo scopo del gioco è di raccogliere oggetti da collezione facendo scontrare l'oggetto player con questi oggetti da collezione.This sample game consists of a spherical 'player' object which is controlled by the app user and the objective of the game is to 'collect' collectible objects by colliding the player object with these collectible objects. Ciò presuppone una certa conoscenza di base dell'ambiente dell'editor di Unity.This assumes basic familiarity with Unity editor environment. In caso di problemi, vedere l'esercitazione completa.If you run into any issues then you should refer to the full tutorial.

Configurazione del giocoSetting up the game

I passaggi seguenti sono tratti dall' esercitazione di UnityThe steps below are from the Unity tutorial

  1. Aprire l'editor Unity e fare clic su New.Open Unity Editor and click New.

  2. Fornire nome del progetto & percorso, selezionare 3D e fare clic su Create project.Provide a Project name & Location, select 3D and click Create project.

  3. Salvare la scena predefinita appena creata come parte del nuovo progetto con il nome MiniGame all'interno di una nuova cartella _Scenes nella cartella Assets:Save the default scene just created as part of the new project as with the name MiniGame within a new _Scenes folder under Assets folder:

  4. Creare il campo di gioco selezionando 3D Object -> Plane e assegnare all'oggetto il nome GroundCreate a 3D Object -> Plane as the playing field and rename this plane object as Ground

  5. Reimpostare il componente di trasformazione per questo oggetto Ground in modo che si trovi in corrispondenza dell'origine.Reset the transform component for this Ground object so that it is at the Origin.

  6. Deselezionare Show Grid dal menu Gizmos per l'oggetto Ground.Uncheck Show Grid from Gizmos menu for the Ground object.

  7. Aggiornare il componente Scale per l'oggetto Ground con le dimensioni [X = 2, Y = 1, Z = 2].Update the Scale component for the Ground object to be [X = 2,Y = 1, Z = 2].

  8. Aggiungere un nuovo elemento al progetto andando su 3D Object -> Sphere e assegnare all'oggetto sferico il nome Player.Add a new 3D Object -> Sphere to the project and rename this sphere object as Player.

  9. Selezionare l'oggetto Player e fare clic su Reset Transform in modo analogo all'oggetto Plane.Select the Player object and click Reset Transform similar to the Plane object.
  10. Aggiornare il componente Transform -> Position -> Y Coordinate per Player Y assegnando il valore 0,5.Update Transform -> Position -> Y Coordinate component for the Player Y as 0.5.

  11. Creare nel progetto una nuova cartella denominata Materials dove verrà creato il materiale per colorare il giocatore.Create a new folder called Materials in the project where we will create the material to color the player.
  12. Creare un nuovo materiale chiamato Background in questa cartella.Create a new Material called Background in this folder.

  13. Aggiornare il colore del materiale aggiornando la proprietà Albedo .Update the color of the material by updating the Albedo property of it. È possibile selezionare i valori RGB [0,32,64].You can select the RGB values of [0,32,64].

  14. Trascinare questo materiale nella visualizzazione scena per applicare il colore all'oggetto Ground .Drag this material into the scene view to apply color to the Ground object.

  15. Aggiornare infine il Transform -> Rotation -> Y assegnando il valore 60 nell'oggetto Directional Light per maggiore chiarezza.Finally update the Transform -> Rotation -> Y to 60 on the Directional Light object for clarity.

Spostamento del playerMoving the player

I passaggi seguenti sono tratti dall' esercitazione di UnityThe steps below are from the Unity tutorial

  1. Aggiungere un componente RigidBody all'oggetto Player.Add a RigidBody component to the Player object.

  2. Creare una nuova cartella denominata Scripts nel progetto.Create a new folder called Scripts in the Project.
  3. Fare clic su Add Component-> New Script -> C# Script.Click Add Component-> New Script -> C# Script. Assegnargli il nome PlayerController e fare clic su Create and Add.Name it PlayerController, and click Create and Add. Verrà creato uno script che verrà associato all'oggetto Player.This will create and attach a script to the Player object.

  4. Spostare lo script nella cartella Scripts nel progetto.Move this script under the Scripts folder in the project.
  5. Aprire lo script per modificarlo nell'editor di script preferito, aggiornare il codice dello script con il codice seguente e salvarlo.Open the script for editing in your favorite script editor, update the script code with the following code and save it.

     using UnityEngine;
     using System.Collections;
    
     public class PlayerController : MonoBehaviour 
     {
         public float speed;
         private Rigidbody rb;
         void Start ()
         {
             rb = GetComponent<Rigidbody>();
         }
         void FixedUpdate ()
         {
             float moveHorizontal = Input.GetAxis ("Horizontal");
             float moveVertical = Input.GetAxis ("Vertical");
             Vector3 movement = new Vector3 (moveHorizontal, 0.0f, moveVertical);
             rb.AddForce (movement * speed);
         }
     }
    
  6. Si noti che lo script precedente usa una proprietà Speed .Note that the script above uses a Speed property. Nell'editor di Unity impostare la proprietà Speed su 10.In the Unity editor, update the speed property to 10.

  7. Selezionare Play nell'editor di Unity.Hit Play in the Unity Editor. Ora sarà possibile controllare con la tastiera la pallina che dovrebbe ruotare e muoversi.Now you should be able to control the ball using the keyboard and it should rotate and move around.

Spostamento della videocameraMoving the camera

I passaggi di seguito sono presi dall'esercitazione su Unity e limiteranno Main Camera all'oggetto Player.The steps below are from the Unity tutorial and will tie the Main Camera to the Player object.

  1. Aggiornare Transform.Position con i valori X = 0, Y = 10,5, Z = -10.Update the Transform.Position to be X = 0, Y = 10.5, Z=-10.
  2. Impostare Transform.Rotation su X = 45, Y = 0, Z= 0.Update the Transform.Rotation to be X = 45, Y = 0, Z = 0.

  3. Aggiungere un nuovo script denominato CameraController a MainCamera e spostarlo nella cartella Scripts.Add a new script called CameraController to the MainCamera and move it under the Scripts folder.

  4. Aprire lo script per la modifica e aggiungervi il codice seguente:Open up the script for editing and add the following code in it:

     using UnityEngine;
     using System.Collections;
    
     public class CameraController : MonoBehaviour {
    
         public GameObject player;
    
         private Vector3 offset;
    
         void Start ()
         {
             offset = transform.position - player.transform.position;
         }
    
         void LateUpdate ()
         {
             transform.position = player.transform.position + offset;
         }
     }
    
  5. Nell'ambiente di Unity trascinare la variabile Player nello slot Player per l'oggetto Main Camera per poter creare un'associazione tra di essi.In Unity environment - drag the Player variable into the Player slot for the Main Camera object so that the two are associated with one another.

  6. Se ora si preme Play nell'editor di Unity e si ruota l'oggetto Player Ball, si potrà osservare che la videocamera lo segue nel movimento.Now if you hit Play in the Unity editor and rotate the Player Ball object then you will see the Camera following it in the movement.

Configurazione dell'area di giocoSetting up the Play area

I passaggi seguenti sono tratti dall' esercitazione di Unity.The steps below are from the Unity tutorial. Verranno creati i muri che circondano il campo in modo che l'oggetto Player Ball non esca dall'area di gioco mentre è in movimento.We will create the Walls surrounding the Ground so that the Player Ball object doesn't drop off the play area in its movement.

  1. Fare clic su Create -> Create Empty -> Game Object e assegnare il nome WallsClick Create -> Create Empty -> Game Object and name it Walls

  2. In questo oggetto Walls creare un nuovo oggetto andando su 3D Object -> Cube e assegnare il nome "West wall".Under this Walls object - create a new 3D Object -> Cube and name it "West wall".

  3. Aggiornare Transform -> Position e Transform -> Scale per l'oggetto West Wall.Update the Transform -> Position and Transform -> Scale for this West Wall object.

  4. Duplicare West wall per creare un elemento East wall con la posizione e la scala di trasformazione aggiornate.Duplicate the West wall to create an East wall with the updated transform position and scale.

  5. Duplicare East wall in modo da creare un oggetto North wall con la posizione di trasformazione e le proporzioni aggiornate.Duplicate the East wall to create a North wall with the updated transform position & scale.

  6. Duplicare North wall in modo da creare un oggetto South wall con la posizione di trasformazione e le proporzioni aggiornate.Duplicate the North wall and create a South wall with the updated transform position & scale.

Creazione di oggetti da collezioneCreating Collectible objects

I passaggi seguenti sono tratti dall' esercitazione di Unity.The steps below are from the Unity tutorial. Verranno creati alcuni oggetti dall'aspetto interessante che costituiranno il set di oggetti da collezione che l'oggetto Player Ball deve raccogliere scontrandosi con essi.We will create some attractive looking objects which will form the set of collectible objects which the Player Ball object needs to 'collect' by colliding with them.

  1. Creare un nuovo oggetto 3D Cube e denominarlo Pickup.Create a new 3D Cube object and name it Pickup.
  2. Regolare Transform -> Rotation & Transform -> Scale dell'oggetto Pickup.Adjust the Transform -> Rotation & Transform -> Scale of the Pickup object.

  3. Creare e collegare un nuovo script C# chiamato Rotator all'oggetto Pickup.Create and attach a new C# Script called Rotator to the Pickup object. Verificare di inserire lo script nella cartella Scripts.Make sure to put the script under the Scripts folder.

  4. Aprire lo script per la modifica e aggiornarlo come segue:Open this script for editing and update it to be the following:

     using UnityEngine;
     using System.Collections;
    
     public class Rotator : MonoBehaviour {
    
         void Update () 
         {
             transform.Rotate (new Vector3 (15, 30, 45) * Time.deltaTime);
         }
     }
    
  5. Selezionare ora la modalità Play nell'editor di Unity per far ruotare l'oggetto Pickup sul proprio asse.Now hit the Play mode in the Unity Editor and your Pickup object show be rotating on its axis.
  6. Creare una nuova cartella denominata PrefabsCreate a new folder called Prefabs

  7. Trascinare l'oggetto Pickup e inserirlo nella cartella Prefabs.Drag the Pickup object and put it in the Prefabs folder.

  8. Creare un nuovo oggetto Empty Game chiamato Pickups.Create a new Empty Game object called Pickups. Reimpostarne la posizione sull'origine e quindi trascinare l'oggetto Pickup sotto l'oggetto gioco.Reset its position to origin and then drag the Pickup object under this game object.

  9. Duplicare l'oggetto Pickup e distribuirlo nell'oggetto Ground attorno all'oggetto Player aggiornando in modo appropriato i valori X e Z di Transform.Position.Duplicate the Pickup object and spread it on the Ground object around the Player object by updating the Transform.Position's X & Z values appropriately.

  10. Creare un nuovo materiale chiamato Pickup e impostarlo sul colore rosso aggiornando la proprietà Albedo tramite una procedura simile a quella seguita per l'aggiornamento dell'oggetto Ground.Create a new material called Pickup and update it to be Red in color by updating the Albedo property similar to what we did for updating the Ground object.

  11. Applicare il materiale a tutti e 4 gli oggetti Pickup.Apply the material to all the 4 pickup objects.

Raccolta degli oggetti PickupCollecting the Pickup objects

I passaggi seguenti sono tratti dall' esercitazione di Unity.The steps below are from the Unity tutorial. Verrà aggiornato il Player in modo che possa raccogliere gli oggetti Pickup scontrandosi con essi.We will update the Player so that it is able to 'collect' the pickup objects by colliding with them.

  1. Aprire lo script PlayerController collegato all'oggetto Player per la modifica e aggiornarlo come segue:Open up the PlayerController script attached to the Player object for editing and update it to the following:

     using UnityEngine;
     using System.Collections;
    
     public class PlayerController : MonoBehaviour {
    
         public float speed;
    
         private Rigidbody rb;
    
         void Start ()
         {
             rb = GetComponent<Rigidbody>();
         }
    
         void FixedUpdate ()
         {
             float moveHorizontal = Input.GetAxis ("Horizontal");
             float moveVertical = Input.GetAxis ("Vertical");
    
             Vector3 movement = new Vector3 (moveHorizontal, 0.0f, moveVertical);
    
             rb.AddForce (movement * speed);
         }
    
         void OnTriggerEnter(Collider other) 
         {
             if (other.gameObject.CompareTag ("Pick Up"))
             {
                 other.gameObject.SetActive (false);
             }
         }
     }
    
  2. Creare un nuovo tag chiamato Pick Up (deve corrispondere ai contenuti dello script)Create a new Tag called Pick Up (it must match what is in the script)

  3. Applicare questo Tag all'oggetto Pickup di Prefab.Apply this Tag to the Prefab Pickup object.

  4. Abilitare la casella di controllo IsTrigger per l'oggetto Prefab.Enable IsTrigger checkbox for the Prefab object.

  5. Aggiungere un Rigid body all'oggetto Pickup di Prefab.Add a Rigid body to Pickup Prefab object. Per ottimizzare le prestazioni, il collider statico usato verrà sostituito con un collider dinamico.For performance optimization we will update the static collider that we used to a Dynamic collider.

  6. Selezionare infine la proprietà IsKinematic dell'oggetto Prefab.Finally check the IsKinematic property for the prefab object.

  7. Premere Play nell'editor Unity e sarà possibile giocare a Roll a Ball spostando l'oggetto Player tramite i tasti della tastiera per indicare la direzione.Hit Play in the Unity editor and you will be able to play this Roll a Ball game by moving the Player object using your keyboard keys for direction input.

Aggiornamento del gioco per la riproduzione su dispositivo mobileUpdating the game for mobile play

Con le sezioni precedenti si è conclusa l'esercitazione di base di Unity.The sections above concluded the basic tutorial from Unity. Ora il gioco verrà modificato in modo che sia semplice da usare sui dispositivi mobili.Now we will modify the game to make it mobile device friendly. Si noti che finora per il test è stato usato l'input da tastiera.Note that we used keyboard input for the game so far for testing. Verrà ora modificato in modo da poter controllare il giocatore tramite il movimento del telefono, ad esempio usando l'accelerometro come input.Now we will modify it so that we can control the player by using the motion of the phone i.e. using Accelerometer as the input.

Aprire lo script PlayerController per modificare e aggiornare il metodo FixedUpdate in modo da usare il movimento dell'accelerometro per spostare l'oggetto Player.Open up the PlayerController script for editing and update the FixedUpdate method to use the motion from the accelerometer to move the Player object.

    void FixedUpdate()
    {
        //float moveHorizontal = Input.GetAxis("Horizontal");
        //float moveVertical = Input.GetAxis("Vertical");
        //Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
        rb.AddForce(Input.acceleration.x * Speed, 0, -Input.acceleration.z * Speed);
    }

Con questa esercitazione termina la creazione di un gioco di base con Unity, che può essere distribuito e usato sul dispositivo preferito.This tutorial concludes a basic game creation with Unity and you can deploy this on a device of your choice to play the game.