Convertir 3D Raycast a Raycast2D

Tengo este código a continuación que podría controlar a un jugador tocado entre 3 jugadores. Pude implementarlo como una especie de “trampa” agregando un cubo 3D detrás de un sprite 2D ya que mi juego debería estar en 2D y me está costando mucho implementarlo en 2D. Estoy realmente confundido sobre cómo hacerlo en 2D porque realmente estoy confundido en los parámetros.

Aunque ya lo implementé por el modo mencionado anteriormente, todavía quiero implementarlo en 2D puro. Y como tengo este problema cuando el jugador seleccionado se mueve, el sprite se mueve más rápido.

public GameObject target = null; // Use this for initialization void Start () { } // Update is called once per frame void Update () { if(Input.touchCount > 0 || Input.GetTouch(0).phase == TouchPhase.Began) { Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch(0).position); Debug.DrawRay(ray.origin,ray.direction * 20,Color.red); RaycastHit hit; if(Physics.Raycast(ray, out hit,Mathf.Infinity)) { Debug.Log(hit.transform.gameObject.name); if(this.target != null){ SelectMove sm = this.target.GetComponent(); if(sm != null){ sm.enabled = false; } } target = hit.transform.gameObject; //Destroy(hit.transform.gameObject); selectedPlayer(); } } } void selectedPlayer(){ SelectMove sm = this.target.GetComponent(); if(sm == null){ target.AddComponent(); } sm.enabled = true; } 

use RaycastHit2D para hacer esto en lugar de RaycastHit luego cambie Physics.Raycast a Physics2D.Raycast . Los parámetros son diferentes, el código a continuación debería hacerlo. También es posible que tenga que cambiar && a || Dependiendo de tu lógica de juego.

Seleccione el Sprite y luego agregue Box Colider 2D desde el Editor. También puedes usar Circle Collider 2D para el Sprite si tu Sprite es redondo. Si no agrega ningún colisionador 2D al Sprite, Ray no detectará el objeto cuando se haga clic en él.

PARA DISPOSITIVOS MÓVILES.

 if ((Input.touchCount > 0) && (Input.GetTouch(0).phase == TouchPhase.Began)) { Vector2 cubeRay = Camera.main.ScreenToWorldPoint(Input.GetTouch(0).position); RaycastHit2D cubeHit = Physics2D.Raycast(cubeRay, Vector2.zero); if (cubeHit) { //We hit something Debug.Log(cubeHit.transform.gameObject.name); if (this.target != null) { SelectMove sm = this.target.GetComponent(); if (sm != null) { sm.enabled = false; } } target = cubeHit.transform.gameObject; //Destroy(cubeHit.transform.gameObject); selectedPlayer(); } } 

PARA ESCRITORIOS / EDITOR

 if (Input.GetMouseButtonDown(0)) { Vector2 cubeRay = Camera.main.ScreenToWorldPoint(Input.mousePosition); RaycastHit2D cubeHit = Physics2D.Raycast(cubeRay, Vector2.zero); if (cubeHit) { //We hit something Debug.Log(cubeHit.transform.gameObject.name); if (this.target != null) { SelectMove sm = this.target.GetComponent(); if (sm != null) { sm.enabled = false; } } target = cubeHit.transform.gameObject; //Destroy(cubeHit.transform.gameObject); selectedPlayer(); } }