• Benvenuto in Making Videogames!
  • Dai sfogo alla tua fantasia!
  • Crea il tuo Videogioco!
Benvenuto ospite! Login Registrati




Valutazione discussione:
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5
Teletrasportare un oggetto su unity 3d?
#1
Salve a tutti, sto creando un gioco per smartphone ma mi servirebbe teletrasportare l'oggetto dove l'utente clicca... non so veramente come fare e che script scrivere... aiuti? Huh
 
Rispondi
#2
non conosco affatto le librerie smartphone
 
Rispondi
#3
non mi intendo di unity per mobile ma non c'e la Touch.position? di preciso cosa stai facendo? poi sei in 3d o 2d?
 
Rispondi
#4
sono in 2d... ho messo che un aeroplano va avanti e vorrei che con il click si teletrasportasse nel punto selezionato... come faccio?
 
Rispondi
#5
mhh in 2D su un smartphone, la butto li
Codice:
Vector3 arrivo = Camera.main.ScreenToWorldPoint([b]Input.mousePosition[/b]);
arrivo.z = 0; // non serve
gameObject.transform.position = arrivo; //in generale la trasform dell'oggetto che muovi

Cambia Input.mousePosition con Touch.position e vedi che succede, purtroppo non ho gli strumenti per sviluppare su cellulari.

Il punto chiave è la ScreenToWorldPoint che trasforma le coordinate del mouse X,Y su schermo con origine in basso a sinistra in coordinate world. Ottenute le nuove wX,wY usi la Trasform.poition che istantaneamente sposta l'oggetto alle nuove coordinate world.

http://docs.unity3d.com/ScriptReference/Transform.html
http://docs.unity3d.com/ScriptReference/...Point.html
http://docs.unity3d.com/ScriptReference/Touch.html
 
Rispondi
#6
Io uno script per teletrasportare il player l'ho creato per il mio gioco e sono veramente 2 righe di codice... Hi usato UK JavaScript mi sembra. Però il mio teletrasporto funziona solo in determinate aree della mappa già prestabilite. Per la conversione dello script a mobile dovrebbe pensarci il compiler di unity
 
Rispondi
#7
grazie ora provo... un altra cosa, e come faccio a fare che piu' tengo premuto piu' il personaggio va in su (asse y)? magari mettendo un limite anche
 
Rispondi
#8
mhh direi di muovermi verso il Touch.Phase o forse il Touch.deltatime (che però credo serva alla velocità quando il dito touch è in movimento).
http://docs.unity3d.com/ScriptReference/...phase.html
Forse preferisci il C#
Codice:
void Update ()
{
   int nrTocchi = Input.touchCount;
   if(nrTocchi > 0)
   {
      for (int i = 0; i < nrTocchi; i++)
      {
         Touch miotocco = Input.GetTouch(i);
         TouchPhase miafase = miotocco.phase;
         switch(miafase)
         {
            case TouchPhase.Began:
               print("Nuovo tocco in " + miotocco.position + " , dito nr." + miotocco.fingerId);
               break;
            case TouchPhase.Moved:
               print("dito nr. " + miotocco.fingerId + " mosso di " + miotocco.deltaPosition);
               break;
            case TouchPhase.Stationary:
               print("dito nr. " + miotocco.fingerId + " fermo " + miotocco.position);
               break;
            case TouchPhase.Ended:
               print("dito nr. " + miotocco.fingerId + " uscito in " + miotocco.position);
               break;
            case TouchPhase.Canceled:
               print("dito nr. " + miotocco.fingerId + " finito");
                break;
            }
        }
   }
}
 
Rispondi
#9
Ma da quel codice devo aggiungere tipo questa cosa per farlo muovere?

using UnityEngine;
using System.Collections;

public class Controller : MonoBehaviour {

private float hspeed, vspeed; // velocità orrizzontale e verticale
private const float SPEED = 2; // velocità massima del movimento

void Start () {
// Inizialmente il personaggio non si muove -> le velocità sono = 0!
hspeed = 0;
vspeed = 0;

}

void Update () {

if (Input.GetKey ("left")) {
hspeed = -SPEED;
} else if (Input.GetKey("right")) {
hspeed = SPEED;
} else {
hspeed = 0;
}

rigidbody2D.velocity = new Vector3(hspeed, rigidbody2D.velocity.y, 0);

}
}
 
Rispondi
#10
Qui ti riferisci alla seconda domanda vero? perché qui non teletrasporta ma muove di velocità lineare y (ma la rigidbody2d.velocity non è un vector2? boh? ).

Però qui usi la GetKey, non so come funziona con i touch degli smartphone. Comunque se vuoi che finché si tiene premuto il tasto "su" la velocità insista di SPEED, allora ti serve il Input.GetKeyDown e Input.GetKeyUp per sapere quando inizia e finisce di premere il tasto.

http://docs.unity3d.com/ScriptReference/...ocity.html
http://docs.unity3d.com/ScriptReference/...yDown.html
http://docs.unity3d.com/ScriptReference/...KeyUp.html
http://unity3d.com/learn/tutorials/modul...nd-get-key

Poi forse è ancora meglio la getAxis con cui ti prendi fin da subito il -1 +1 e non devi decidere se ha premuto a destra o a sinistra Big Grin
http://unity3d.com/learn/tutorials/modul...g/get-axis
 
Rispondi
#11
Si un getaxis sembra appropriato:
using UnityEngine;
using System.Collections;

public class ABC : MonoBehaviour
{
public float range;
public GUIText textOutput;


void Update ()
{
float h = Input.GetAxis("Horizontal");
float xPos = h * range;

transform.position = new Vector3(xPos, 2f, 0);
textOutput.text = "Value Returned: "+h.ToString("F2");
}
}

Però il personaggio non si muove.. cosa devo aggiungere? (non me ne intendo molto di script)
 
Rispondi
#12
lo script è associato all'asset che vuoi muovere vero? il nome ABC lo cambierei in qualcosa di piu sensato cone playermoviment . altra cosa "h" è public quindi se è uno script associato ad un asset dovrebbe essere visibile nell'ispector, quanto vale "h"? se no devi usare la start() per inizializzare h con qualcosa e verrà eseguita al primo frame assoluto
 
Rispondi
#13
ok... cmq abc l'ho messo temporaneo per vedere se funzionava xD
 
Rispondi
#14
ok Big Grin ma alla fin fine cosa stai facendo? un Lander? perché devi tenere premuto per stare in alto? flappybird? Big Grin
 
Rispondi
#15
Ma a me proprio non vaaaaa!!! Allora ricapitolando: devo fare un giochino in 2d e vorrei fare che piu' il soggetto clicca piu' il personaggio va in alto, se io smetto di cliccare il soggetto deve smettere di andare in alto e cadere... però non riesco a fare come ti ho detto... per caso non puoi farlo tu da 0 per me (lo script che piu' tengo premuto piu' va in alto)? perché a me non viene... attenzione NON voglio l'effetto flappy bird che devo continuare a cliccare, quello sono capace pure io
 
Rispondi
#16
Quindi un oggetto che tenderebbe a cadere ma se clicco su di esso e tengo premuto questo va su? Ovviamente la pressione deve insistere sempre sul pezzo quindi il dito (lo faccio col mouse) deve comunque seguire il pezzo?
 
Rispondi
#17
Prendi due sprite
Il lander: http://opengameart.org/content/eye-lander
un backgroud: http://opengameart.org/content/background-dark-city

Crea un nuovo progetto 2D (non faccio 2D in Unity quindi mi sono limitato a usare il progetto di unity)

Crea le solite 4 cartelle (perché siamo personcine precise Big Grin ) Scripts, Textures, Prebas, Scenes
Ficca le due immagini in \Textures\ poi trascinale sulla scena avendo cura di scalare lo sfondo e di mettere il player ad una z= -1 così va sopra a tutto un pò pecoreccio ma meglio di niente.

Aggiungi al player un RigidBody2D (altrimenti tocca a gestire tutta la fisica a manella via codice) se non vuoi che l'oggetto cada toglie la gravità.

Crea un nuovo script per il player, chiamalo PlayerController (o come vuoi). O lo aggiungi direttamente dall'inspector con il player attivo oppure crealo nella cartella Script e poi trascinalo sul player.

Scrivi questo codice:
Codice:
using UnityEngine;
using System.Collections;

public class PlayerController : MonoBehaviour {

    public Vector2 v2muovi = new Vector2(0f,0f);
    public float horizontalSpeed = 0.0f;
    public float verticalSpeed = 0.0f;

    // Use this for initialization
    //void Start () {
    //
    //}
    
    // Update is called once per frame
    void Update ()
    {
        //prendo assi e ottengo il (-1..+1) poi moltiplico per la velocità
        float h = horizontalSpeed * Input.GetAxis("Horizontal");
        float v = verticalSpeed * Input.GetAxis("Vertical");
        //azzero la forza altrimenti diventa un missile
        rigidbody2D.velocity=Vector2.zero;
        //il mio vettore pari alle
        v2muovi.x=h;
        v2muovi.y=v;
        //applica la forza di vettore 2D (v,h)
        rigidbody2D.AddForce(v2muovi);
    }
}

Preimposta da Unity V2muovi a 0,0 e 50 per la velocità hor e vert a me va decentemente.
 
Rispondi
#18
Bene perfetto, ora ti chiedendo un ultimo favore... come faccio a far muovere l'oggetto orizzontalmente ad una velocità fissa?
 
Rispondi
#19
Ma deve sempre andare in orizzontale e da un lato?
Elimina tutta la roba che riguarda horizontal e insisti di un tot sulla x
Per es. così va a destra fisso:
.
.
//il mio vettore pari alle
v2muovi.x=50f;
v2muovi.y=v;
//applica la forza di vettore 2D (v,h)
rigidbody2D.AddForce(v2muovi);
.
.

Altrimenti se vuoi che premendo un tasto vada a dx o sx di velocità fissa penso vada bene il codice che avevi con SPEED e hspeed, questo inverte la velocità dx/sx:

using UnityEngine;
using System.Collections;

public class PlayerController : MonoBehaviour {

public Vector2 v2muovi = new Vector2(0f,0f);
public float horizontalSpeed = 0.0f;
public float verticalSpeed = 0.0f;
float h=0f;
// Use this for initialization
//void Start () {
//
//}

// Update is called once per frame
void Update ()
{
//prendo assi e ottengo il (-1..+1) poi moltiplico per la velocità

//float h = horizontalSpeed * Input.GetAxis("Horizontal");
if (Input.GetKeyDown("left"))
{
h = -50f;
}
if (Input.GetKeyDown("right"))
{
h = 50f;
}


float v = verticalSpeed * Input.GetAxis("Vertical");
//azzero la forza altrimenti diventa un missile
rigidbody2D.velocity=Vector2.zero;
//il mio vettore pari alle
v2muovi.x=h;
v2muovi.y=v;
//applica la forza di vettore 2D (v,h)
rigidbody2D.AddForce(v2muovi);
}
}

Chiedo scusa mi sono scordato di fornire l'esempio è che non trovavo più l'account di mediafire Tongue

Poca roba ma se a qualcun'altro agli inizi servisse eccolo QUI
 
Rispondi
#20
Ok però tutte a me succedono???? ho fatto un immagine lunga per il percorso, ma quando lo metto i nunity, quell'immagine si vede malissimo!! che faccio?
 
Rispondi
#21
forse il fattore di scala?
 
Rispondi
#22
in che senso? praticamente si vede tutto a quadretti giganteschi se zoomo la telecamera o ingrandisco l'immagine.. ma fuori da unity si vede benissimo
 
Rispondi
#23
ma che dimensioni ha questa immagine? le impostazioni dello schermo?
 
Rispondi
#24
la dimensione è 6000x2100 ma ho notato che se la spezzo in piu' parti non si rovina l'immagine
 
Rispondi
#25
In effetti credo che sia proprio così che devi fare. Big Grin Dovrebbero essere tante sezioni, specie se l'immagine è tile-zabile
prendi questo come spunto http://pixelnest.io/tutorials/2d-game-un...nd-camera/

E' anche questione di memoria.. 6000x2100 pix a 32bit ciascuno una volta espansi sono..mhhh... Sad ahh! 403.200.000bit cioè circa 50.400.000bytes..50MB.

Cercherei di dividerla in 3 righe da 700 e almeno 10 colonne da 600. Una cosa del genere:
AAAAAAAAAA
BBBBBBBBBB
CCCCCCCCCC
Ancora meglio andrebbe considerata la visione dei soli sprite adiacenti a quello dove ti trovi:

Quando sarai più ferrato passerei direttamente ad un tilemap editor ad hoc come:
http://www.mapeditor.org
http://tilestudio.sourceforge.net
http://tide.codeplex.com
e scriptarti un renderer (ce ne dovrebbero essere anche a pagamento nell'asset store).
 
Rispondi
#26
grazie milleee!!!!!
 
Rispondi
  


Discussioni simili
Discussione Autore Risposte Letto Ultimo messaggio
  Applicare o aggiungere texture ad oggetto Nexal 6 194 18-01-2018, 10:07 AM
Ultimo messaggio: Nexal
  aiuto unity 3d pulsante h per help carlomanzino 3 289 18-05-2017, 04:23 PM
Ultimo messaggio: alessiobb3b
  Movimento oggetto 2D nel canvas Aconeron 1 204 25-04-2017, 08:50 PM
Ultimo messaggio: Aconeron
  Unity lentissimo su maos yosemite antolepore 1 296 25-09-2016, 10:24 AM
Ultimo messaggio: antolepore
  Un piccolo aiuto per Unity 3D? Biagino 1 419 22-04-2016, 09:17 AM
Ultimo messaggio: Master Gabriel
Wink Problemi di assi su Unity alessiobb3b 9 778 12-01-2016, 10:28 PM
Ultimo messaggio: alessiobb3b
  Luci pesanti su gioco VR per Android con Unity Refref1990 1 710 13-08-2015, 11:20 PM
Ultimo messaggio: eoasier
  Come potrei creare dialoghi su Unity 3D? Biagino 3 1,202 13-09-2014, 01:08 PM
Ultimo messaggio: Chip
  Domanda su animazioni in Unity.. Biagino 5 1,388 07-09-2014, 02:20 PM
Ultimo messaggio: Blackg96
  Problema Unity 3D/ Sketchup xSprinthardx 4 1,232 23-03-2014, 12:35 PM
Ultimo messaggio: Black96

Vai al forum:


Browsing: 1 Ospite(i)