Unity2D: implementare il movimento verso il mouse o il dito
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); } } }