Teletrasportare un oggetto su unity 3d? - Versione stampabile +- Creare Videogiochi - Game Developer (https://www.making-videogames.net/giochi) +-- Forum: Unity3D Italia (https://www.making-videogames.net/giochi/Forum-Unity3D-Italia) +--- Forum: Richieste di Aiuto per Unity 3D (https://www.making-videogames.net/giochi/Forum-Richieste-di-Aiuto-per-Unity-3D) +--- Discussione: Teletrasportare un oggetto su unity 3d? (/thread-Teletrasportare-un-oggetto-su-unity-3d) |
Teletrasportare un oggetto su unity 3d? - zodanilbello - 10-12-2014 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? RE: Teletrasportare un oggetto su unity 3d? - Blackg96 - 11-12-2014 non conosco affatto le librerie smartphone RE: Teletrasportare un oggetto su unity 3d? - Chip - 11-12-2014 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? RE: Teletrasportare un oggetto su unity 3d? - zodanilbello - 11-12-2014 sono in 2d... ho messo che un aeroplano va avanti e vorrei che con il click si teletrasportasse nel punto selezionato... come faccio? RE: Teletrasportare un oggetto su unity 3d? - Chip - 11-12-2014 mhh in 2D su un smartphone, la butto li Codice: Vector3 arrivo = Camera.main.ScreenToWorldPoint([b]Input.mousePosition[/b]); 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/Camera.ScreenToWorldPoint.html http://docs.unity3d.com/ScriptReference/Touch.html RE: Teletrasportare un oggetto su unity 3d? - eoasier - 11-12-2014 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 RE: Teletrasportare un oggetto su unity 3d? - zodanilbello - 12-12-2014 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 RE: Teletrasportare un oggetto su unity 3d? - Chip - 12-12-2014 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/Touch-phase.html Forse preferisci il C# Codice: void Update () RE: Teletrasportare un oggetto su unity 3d? - zodanilbello - 12-12-2014 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); } } RE: Teletrasportare un oggetto su unity 3d? - Chip - 12-12-2014 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/Rigidbody2D-velocity.html http://docs.unity3d.com/ScriptReference/Input.GetKeyDown.html http://docs.unity3d.com/ScriptReference/Input.GetKeyUp.html http://unity3d.com/learn/tutorials/modules/beginner/scripting/get-button-and-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 http://unity3d.com/learn/tutorials/modules/beginner/scripting/get-axis RE: Teletrasportare un oggetto su unity 3d? - zodanilbello - 12-12-2014 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) RE: Teletrasportare un oggetto su unity 3d? - Chip - 12-12-2014 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 RE: Teletrasportare un oggetto su unity 3d? - zodanilbello - 13-12-2014 ok... cmq abc l'ho messo temporaneo per vedere se funzionava xD RE: Teletrasportare un oggetto su unity 3d? - Chip - 13-12-2014 ok ma alla fin fine cosa stai facendo? un Lander? perché devi tenere premuto per stare in alto? flappybird? RE: Teletrasportare un oggetto su unity 3d? - zodanilbello - 13-12-2014 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 RE: Teletrasportare un oggetto su unity 3d? - Chip - 13-12-2014 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? RE: Teletrasportare un oggetto su unity 3d? - Chip - 14-12-2014 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 ) 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; Preimposta da Unity V2muovi a 0,0 e 50 per la velocità hor e vert a me va decentemente. RE: Teletrasportare un oggetto su unity 3d? - zodanilbello - 14-12-2014 Bene perfetto, ora ti chiedendo un ultimo favore... come faccio a far muovere l'oggetto orizzontalmente ad una velocità fissa? RE: Teletrasportare un oggetto su unity 3d? - Chip - 14-12-2014 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 Poca roba ma se a qualcun'altro agli inizi servisse eccolo QUI RE: Teletrasportare un oggetto su unity 3d? - zodanilbello - 17-12-2014 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? RE: Teletrasportare un oggetto su unity 3d? - Chip - 17-12-2014 forse il fattore di scala? RE: Teletrasportare un oggetto su unity 3d? - zodanilbello - 18-12-2014 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 RE: Teletrasportare un oggetto su unity 3d? - Chip - 18-12-2014 ma che dimensioni ha questa immagine? le impostazioni dello schermo? RE: Teletrasportare un oggetto su unity 3d? - zodanilbello - 19-12-2014 la dimensione è 6000x2100 ma ho notato che se la spezzo in piu' parti non si rovina l'immagine RE: Teletrasportare un oggetto su unity 3d? - Chip - 20-12-2014 In effetti credo che sia proprio così che devi fare. Dovrebbero essere tante sezioni, specie se l'immagine è tile-zabile prendi questo come spunto http://pixelnest.io/tutorials/2d-game-unity/background-and-camera/ E' anche questione di memoria.. 6000x2100 pix a 32bit ciascuno una volta espansi sono..mhhh... 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). RE: Teletrasportare un oggetto su unity 3d? - zodanilbello - 04-01-2015 grazie milleee!!!!! |