Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Ayuda con Drag and drop

Iniciado por Biarox1166, Junio 29, 2018, 02:35:18 AM

Tema anterior - Siguiente tema
Junio 29, 2018, 02:35:18 AM Ultima modificación: Junio 29, 2018, 02:37:52 AM por Biarox1166
Hola a todos, les vengo a pedir un poco de ayuda ya que tengo una script que funciona conjuntamente con otra script que instancia objetos, la primera se encarga del drag and drop, la cosa es uqe funciona perfecto pero está hecha para inputs de PC y yo necesito que se pueda hacer desde un celular. Estuve viendo en el manual de Unity y en internet en general cómo modificar esta script pero no puedo hacerlo, intenté detectar si la touchCount es mayor a cero, almacenar la posicion del primer touch, luego calcular los delta entre este y el objeto instanciado pero no me funciona. Despues lo traté de implementar con los TouchPhase pero no lo logro hacer funcar. Alguno me puede ayudar con el código o bien mostrarme un video que explique algo por el estilo en entornos 3D?
 
De antemano gracias : )
 

   private void Update()
    {
        if (objetoActual != null)
        {
            MoverObjetoAlMouse();
            RotacionPorScroll();
            SoltarObjeto();
        }
    }
    public void SetInstanceID(int id)
    {
        objetoActual = Instantiate(Prefabs[0]);
        objetoActual.GetComponentInChildren<Torre>().ID = id;
        renders.Clear();
        colores.Clear();
        materiales.Clear();
        SeteoDeColorOriginal();
    }
    private bool BotonDelMismoPrefab(int i)
    {
        return objetoActual != null && objetoActualIndex == i;
    }
    private void MoverObjetoAlMouse()
    {
        if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Moved)
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch(0).position);//Input.mousePosition);
 
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit, Mathf.Infinity, ZonaPosible))
            {
                objetoActual.transform.position = hit.point;
                objetoActual.transform.rotation = Quaternion.FromToRotation(Vector3.up, hit.normal);
                if (hit.normal == Vector3.up)
                {
                    if (!objetoActual.GetComponent<ObjetoPosicionado>().Bloqueado)
                    {
                        print("desbloqueado");
                        AsignacionDeColores(false, false);
                        PoderSoltar = true;
                    }
                    else
                    {
                        print("bloqueado por colision");
                        AsignacionDeColores(true, false);
                        PoderSoltar = false;
                    }
                }
                else
                {
                    print("bloqueado por no ser vertical");
                    AsignacionDeColores(true, false);
                    PoderSoltar = false;
                }
            }
            else
            {
                if (Physics.Raycast(ray, out hit))
                {
                    print("bloqueado por no coincidir el layer");
                    objetoActual.transform.position = hit.point;
                    objetoActual.transform.rotation = Quaternion.FromToRotation(Vector3.up, hit.normal);
                    AsignacionDeColores(true, false);
                    PoderSoltar = false;
                }
            }
        }
    }
    private void RotacionPorScroll()
    {
        if (Input.touchCount > 1)
        {
            rotacionMouseScroll += Input.mouseScrollDelta.y; //Aca no se bien cómo reemplazarlo  
            objetoActual.transform.Rotate(Vector3.up, rotacionMouseScroll * velocidadDeRotacion);
        }
    }
    private void SoltarObjeto()
    {
        if (Input.GetButtonDown("Fire1") && PoderSoltar)
        {
            AsignacionDeColores(false, true);
            Destroy(objetoActual.GetComponent<ObjetoPosicionado>().Newbc);
            objetoActual.GetComponent<ObjetoPosicionado>().TorreScript.enabled = true;
            objetoActual.GetComponent<ObjetoPosicionado>().Ani.enabled = true;
            foreach (Collider coll in objetoActual.GetComponent<ObjetoPosicionado>().Colls)
            {
                coll.enabled = true;
            }
            if(objetoActual.layer == 2)
            {
                objetoActual.layer = objetoActual.GetComponent<ObjetoPosicionado>().layersOriginales[0];
            }
            for (int i = 0; i < objetoActual.transform.childCount; i++)
            {
                if(objetoActual.transform.GetChild(i).transform.gameObject.layer == 2)
                {
                    objetoActual.transform.GetChild(i).transform.gameObject.layer = objetoActual.GetComponent<ObjetoPosicionado>().layersOriginales[i];
                }
            }
            objetoActual = null;
      rotacionMouseScroll = 0;
            if (usarAudio)
            {
                if (!GetComponent<AudioSource>().isPlaying)
                {
                    GetComponent<AudioSource>().PlayOneShot(DespligueSonido);
                }
            }
        }
        else
        {
            if (usarAudio)
            {
                if (Input.GetButtonDown("Fire1") && !PoderSoltar)
                {
                    if (!GetComponent<AudioSource>().isPlaying)
                    {
                        GetComponent<AudioSource>().PlayOneShot(BlockSound);
                    }
                }
            }
        }
    }
}

Probaste con el Input.Touch? En vez del Input.Mouse? Y si es así estás ahora mismo probándolo en un móvil?

yo uso tambien el input mouse para arrastrar en android y me funciona normal

Cita de: BAMF date=1530304654Probaste con el Input.Touch? En vez del Input.Mouse? Y si es así estás ahora mismo probándolo en un móvil?
   


Te referís a usarlo en esta línea?
 
Cita de: Biarox1166 date=1530232518Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch(0).position);
   


 
 
Cita de: jeico008 date=1530341847yo uso tambien el input mouse para arrastrar en android y me funciona normal
   


Sabes que no lo probé? Ahora voy a ver si me funciona así xD

Julio 01, 2018, 04:31:29 AM #4 Ultima modificación: Julio 01, 2018, 05:25:03 AM por Biarox1166
@jeico008 Tenías razón jajaja no se porque no lo había probado antes, pero si funciona. Gracias!!!
 
 

y si presionas con dos dedos es equivalente a click derecho
 
 

Etiquetas: