Blog

unity3d-movimento-dito

Unity2D: implementare il movimento verso il mouse o il dito

Guide

Unity2D: implementare il movimento verso il mouse o il dito

Unity2D: implementare il movimento verso il mouse o il dito

Guida in italiano, programmare il movimento di un oggetto sullo schermo verso il mouse o verso il dito

Può capitare che nel vostro gioco vogliate muovere il vostro personaggio, o un qualsiasi altro oggetto, senza utilizzare Joypad o tastiera, con un altro tipo di movimento.
Ecco quindi che l’oggetto dovrà muoversi seguendo il mouse, oppure il vostro tocco nel caso di un gioco touch screen.

Come implementare questa funzione?

Di seguito si trovano gli esempi di codice per il mouse e per il tocco.
Il primo esempio per il mouse non fa altro che individuare se viene effettuato un click del tasto sinistro: a quel punto prende le coordinate del mouse sul mondo di gioco (diverse da quelle normali del suo transform!) e muove l’oggetto dello script verso quelle coordinate.

// Il metodo Update, anche se in questo caso è preferibile FixedUpdate()
void Update ()
	{
                // Se è premuto il testo sinistro del mouse
		if (Input.GetMouseButton (0))
                {
			// Inserisco la posizione del mouse sul mondo di gioco in una variabile
			Vector3 PosizioneToccoMouse = Camera.main.ScreenToWorldPoint (new Vector3 (Input.mousePosition.x, Input.mousePosition.y, Camera.main.nearClipPlane));
			// Imposto una variabile per la velocità
			float Velocita = Velocita_di_movimento * Time.deltaTime;
			// Muovo l'oggetto dello script verso la posizione del mouse toccata sullo schermo
			transform.position = Vector3.MoveTowards (transform.position, new Vector3 (PosizioneToccoMouse.x, PosizioneToccoMouse.y, 0), Velocita);
		}
	}

Il secondo esempio per il touch screen rileva se viene effettuato un tocco sullo schermo: a quel punto prende le sue coordinate sul mondo di gioco ( anche qui diverse da quelle normali del suo transform!) e muove l’oggetto dello script verso quelle coordinate.

// Il metodo Update, anche se in questo caso è preferibile FixedUpdate()
void Update ()
	{
               // Se si tocca lo schermo
		if (Input.touchCount > 0)
		{
			// Inserisco il tocco in una variabile
			Touch touch = Input.GetTouch(0);
			// Se il dito è sullo schermo....
			if (touch.phase == TouchPhase.Stationary || touch.phase == TouchPhase.Moved)
			{
				// Inserisco la posizione del tocco sul mondo di gioco in una variabile
				Vector3 PosizioneTouch = Camera.main.ScreenToWorldPoint(new Vector3(touch.position.x, touch.position.y, Camera.main.nearClipPlane));
				// Imposto una variabile per la velocità
				float Velocita = Velocita_di_movimento * Time.deltaTime;
				// Muovo il personaggio verso il punto dove tocca il dito
				transform.position = Vector3.MoveTowards(transform.position, new Vector3(PosizioneTouch.x, PosizioneTouch.y, 0), Velocita);
			}
		}
	}

Leave your thought here

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Copyrighted Image