2016-04-05 3 views
0

Ich habe diesen Code unten, der einen berührten Spieler unter 3 Spielern kontrollieren konnte. Ich konnte es durch eine Art "Schummeln" implementieren, indem ich einen 3D-Würfel hinter einem 2D-Sprite anfügte, da mein Spiel in 2D sein sollte und es mir schwer fällt, es in 2D umzusetzen. Ich bin wirklich verwirrt, wie man es in 2D macht, weil ich die Parameter wirklich verwechsle.Convert 3D Raycast zu Raycast2D

Obwohl ich es bereits oben erwähnt implementiert habe, möchte ich es immer noch in reinem 2D implementieren. Und weil ich dieses Problem habe, wenn sich der ausgewählte Spieler bewegt, bewegt sich das Sprite schneller.

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<SelectMove>(); 
       if(sm != null){ sm.enabled = false; } 
      } 
      target = hit.transform.gameObject; 
      //Destroy(hit.transform.gameObject); 
      selectedPlayer(); 
     } 
    } 
} 

void selectedPlayer(){ 
    SelectMove sm = this.target.GetComponent<SelectMove>(); 
    if(sm == null){ 
     target.AddComponent<SelectMove>(); 
    } 
    sm.enabled = true; 
} 
+0

Sie suchen die 3D-Touch-Code 2D zu übersetzen? – Programmer

+0

Ich meine, wie könnte ich es übersetzen? – kmf

+0

Ich fand diesen Code in der Einheit Doku: 'öffentlichen statischen RaycastHit2D Raycast (Vector2 Ursprung, Vector2 Richtung, Floatabstand = Mathf.Infinity, int layerMask = DefaultRaycastLayers, float minDepth = -Mathf.Unendlichkeit, float maxDepth = Mathf.Infinity); 'und im Beispielcode hat es nur 2 Parameter:' RaycastHit2D hit = Physics2D.Raycast (transform.position, -Vector2.up); '. Ich bin nicht wirklich gut darin, Dokumentationen zu verstehen. – kmf

Antwort

0

Verwendung RaycastHit2D dies statt RaycastHit tun dann Physics.Raycast-Physics2D.Raycast ändern. Die Parameter sind unterschiedlich, der Code unten sollte es tun. Sie müssen möglicherweise auch && zu || abhängig von Ihrer Spiellogik ändern.

Wählen Sie die Sprite dann fügen Sie Box Colider 2D aus dem Editor. Sie können auch Circle Collider 2D für den Sprite verwenden, wenn Ihr Sprite rund ist. Wenn Sie dem Sprite keinen 2D-Collider hinzufügen, erkennt ray das Objekt nicht, wenn Sie darauf klicken.

FÜR MOBILE GERÄTE

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<SelectMove>(); 
        if (sm != null) { sm.enabled = false; } 
       } 
       target = cubeHit.transform.gameObject; 
       //Destroy(cubeHit.transform.gameObject); 
       selectedPlayer(); 
      } 
    } 

für Desktop-Computer/HERAUSGEBER

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<SelectMove>(); 
        if (sm != null) { sm.enabled = false; } 
       } 
       target = cubeHit.transform.gameObject; 
       //Destroy(cubeHit.transform.gameObject); 
       selectedPlayer(); 
      } 
     } 
+0

Ich habe dieses andere Sprite, wo es ein Skript angehängt hat, es bewegt sich automatisch nach links und rechts. Wenn ich dann irgendwo klicke, wird der Name der Konsole zurückgegeben. Ich habe es deaktiviert, so dass es mir nur das Sprite hinterlassen hat, das ich hinzugefügt habe (mit dem Skript). Ich habe es angeklickt, aber es hat nicht funktioniert. Ich schlage es und es bewegt sich nicht. – kmf

+0

Sie sagten "Konvertieren von 3D Raycast zu Raycast2D". Das ist es, was der veröffentlichte Code tut. Da Sie gesagt haben, dass der Name in der Konsole zurückgegeben wird, bedeutet dies, dass die Konvertierung in 2D-Teil funktioniert. Sie haben derzeit Probleme mit Ihrem Spiellogikcode. Sie haben auch nicht beschrieben, was Sie archivieren möchten. Alles, was Sie sagen, ist, dass es nicht funktioniert .... – Programmer

+0

Wenn Sie das Problem hatten, den 3D-Code in 2D zu konvertieren, wie in Ihrem Frage- und Fragekommentar beschrieben, ist der obige Code, wie Sie es tun. – Programmer