Jump to content
UnitySpain
Biarox1166

Ayuda con Drag and drop

Recommended Posts

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);
                    }
                }
            }
        }
    }
}
Edited by Biarox1166

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
On 29/6/2018 at 17:37, BAMF said:

Probaste 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?

On 28/6/2018 at 21:35, Biarox1166 said:

Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch(0).position);

 

hace 15 horas, jeico008 said:

yo 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

Share this post


Link to post
Share on other sites

×
×
  • Create New...