Raycasts: Unterschied zwischen den Versionen

Aus hyperdramatik
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
(15 dazwischenliegende Versionen von einem anderen Benutzer werden nicht angezeigt)
Zeile 1: Zeile 1:
Raycasts dienen dafür, eine unsichtbare Achse von einem bestimmten Punkt in die Welt zu schlagen. In VR sind sie nützlich, um den Blicken der Benutzerin zu folgen. In AR können sie benutzt werden um eine Achse von der Kamera des Benutzer in die reale Welt zu projizieren, reale Projekte zu berühren und auf dem Tablet interagierbar zu machen.
Raycasts dienen dazu, eine unsichtbare Linie(ray) von einem bestimmten Punkt auf dem Bildschirm in die virtuelle Welt zu projezieren (cast). Sie sind notwendig um in Code herauszufinden, ob jemand auf ein Objekt in der 3D Welt geklickt hat. In VR sind sie nützlich, um den Kopfbewegungen der Benutzerin zu folgen.  
Der Code dafür ist folgender:


<code>
== Anwendungsbeispiele & Tutorials ==
Anwendung und Tutorial von Raycasts zum Auswählen von Objekten[https://www.youtube.com/watch?v=_yf5vzZ2sYE]
 
Anwendung und Tutorial von Raycasts für Shooter[https://www.youtube.com/watch?v=THnivyG0Mvo]
 
Für das Spiel [[Be Bernd]] wurden Raycasts benutzt, um in der VR Objekte auszuwählen und interagierbar zu machen.
 
== Code ==
<source lang="csharp" line start="2" highlight="4-6">
// Dies ist der Code, um einen Raycast in die AR zu bringen und zu testen, ob er ein Game Object trifft
using System.Collections;
using System.Collections;
using System.Collections.Generic;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.UI;
public class YOURSCRIPTNAME : MonoBehaviour
//Bis hierhin werden die libraries, auf die Unity zurückgreift, benannt
{
public class hit : MonoBehaviour
//Der Name des Scripts ist hit, daher das hit hinter public class.
     public Text textDebug ;
     public Text textDebug ;
     // Start is called before the first frame update
     public Gameobject rayTest;
 
// Weil Testing in AR schwierig ist und jedes Mal einen neuen Build erfordert, wird hier ein Debug Textfeld angelegt, das im Editor noch verknüpft werden muss
     // Update is called once per frame
     // Update is called once per frame
     void Update()
     void Update()
     { if (Input.touchCount >0)
     { if (Input.touchCount >0)
         {
// .touchCount ist die genaueste Methode, um die folgende Funktionen abzurufen, da es auf jede zusätzliche Berührung reagiert.
         { textDebug.text = "TOUCHED";
// Debugging in
             PerformRaycast();
             PerformRaycast();
         }
         }
Zeile 20: Zeile 33:
         {
         {
             textDebug.text = "NO TOUCH";
             textDebug.text = "NO TOUCH";
            hitStatus = 0;
         }
         }
         if (Input.touchCount >0 && Input.GetTouch(0).phase==TouchPhase.Began)
         if (Input.touchCount >0 && Input.GetTouch(0).phase==TouchPhase.Began)
//Input.GetTouch(0).phase==TouchPhase.Began veranlasst einen einen neuen Raycast bei jeder neuen Berührung.
         {
         {
             textDebug.text = "RAYCAST";
             textDebug.text = "RAYCAST";
             PerformRaycast();
             PerformRaycast();
         }
         }
     }
 
</code>
    void PerformRaycast()
     {
        Vector3 ray = playerCamera.ScreenToWorldPoint(Input.GetTouch(0).position);
// Hiermit wird ein Vektor3 Variable erstellt, welche den berührten Punkt auf dem Tablet in die physische Welt überträgt.
        Ray myRay = playerCamera.ScreenPointToRay(Input.GetTouch(0).position);
//Erstellt einen Rayast vom berühreten Screenpunkt aus
        RaycastHit hit;
// Wird ein Objekt vom Raycast berührt, wird ein RaycastHit Object hit erstellt
       
        touchedObjectText.text = ray.ToString();
// Der Name des gehitteten Objects wird in einen String verwandelt
       
        rayTest.transform.position = myRay.origin;
        rayTest.transform.LookAt(myRay.direction);
//Hier wird ein Testobjekt erstellt, dass dem gesetzten Raycast entspricht- also eine Krücke, um zu sehen, wo der nicht sichtbare Raycast ist
 
        if (Physics.Raycast(myRay.origin, myRay.direction, out hit, Mathf.Infinity))
// Hier handelt es sich um einen boolean, der true ist, wenn er ein Game Object hittet. Weitere Details: [https://docs.unity3d.com/ScriptReference/Physics.Raycast.html]
        {
            touchedObjectText.text = "HIT!";
            Debug.DrawRay(ray, transform.TransformDirection(Vector3.forward) * hit.distance, Color.yellow);
            hitGameObject = hit.collider.gameObject;
            touchedObjectText.text =hitGameObject.name.ToString();   
        }
}
 
}
 
</source>

Aktuelle Version vom 21. April 2021, 16:37 Uhr

Raycasts dienen dazu, eine unsichtbare Linie(ray) von einem bestimmten Punkt auf dem Bildschirm in die virtuelle Welt zu projezieren (cast). Sie sind notwendig um in Code herauszufinden, ob jemand auf ein Objekt in der 3D Welt geklickt hat. In VR sind sie nützlich, um den Kopfbewegungen der Benutzerin zu folgen.

Anwendungsbeispiele & Tutorials

Anwendung und Tutorial von Raycasts zum Auswählen von Objekten[1]

Anwendung und Tutorial von Raycasts für Shooter[2]

Für das Spiel Be Bernd wurden Raycasts benutzt, um in der VR Objekte auszuwählen und interagierbar zu machen.

Code

// Dies ist der Code, um einen Raycast in die AR zu bringen und zu testen, ob er ein Game Object trifft
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
//Bis hierhin werden die libraries, auf die Unity zurückgreift, benannt
public class hit : MonoBehaviour
//Der Name des Scripts ist hit, daher das hit hinter public class.
    public Text textDebug ;
    public Gameobject rayTest;

// Weil Testing in AR schwierig ist und jedes Mal einen neuen Build erfordert, wird hier ein Debug Textfeld angelegt, das im Editor noch verknüpft werden muss
    // Update is called once per frame
    void Update()
    { if (Input.touchCount >0)
// .touchCount ist die genaueste Methode, um die folgende Funktionen abzurufen, da es auf jede zusätzliche Berührung reagiert. 
        { textDebug.text = "TOUCHED";
// Debugging in 
            PerformRaycast();
        }
        else
        {
            textDebug.text = "NO TOUCH";
        }
        if (Input.touchCount >0 && Input.GetTouch(0).phase==TouchPhase.Began)
//Input.GetTouch(0).phase==TouchPhase.Began veranlasst einen einen neuen Raycast bei jeder neuen Berührung. 
        {
            textDebug.text = "RAYCAST";
            PerformRaycast();
        }

    void PerformRaycast()
    {
        Vector3 ray = playerCamera.ScreenToWorldPoint(Input.GetTouch(0).position);
// Hiermit wird ein Vektor3 Variable erstellt, welche den berührten Punkt auf dem Tablet in die physische Welt überträgt. 
        Ray myRay = playerCamera.ScreenPointToRay(Input.GetTouch(0).position);
//Erstellt einen Rayast vom berühreten Screenpunkt aus
        RaycastHit hit;
// Wird ein Objekt vom Raycast berührt, wird ein RaycastHit Object hit erstellt
        
        touchedObjectText.text = ray.ToString();
// Der Name des gehitteten Objects wird in einen String verwandelt
        
        rayTest.transform.position = myRay.origin;
        rayTest.transform.LookAt(myRay.direction);
//Hier wird ein Testobjekt erstellt, dass dem gesetzten Raycast entspricht- also eine Krücke, um zu sehen, wo der nicht sichtbare Raycast ist

        if (Physics.Raycast(myRay.origin, myRay.direction, out hit, Mathf.Infinity))
// Hier handelt es sich um einen boolean, der true ist, wenn er ein Game Object hittet. Weitere Details: [https://docs.unity3d.com/ScriptReference/Physics.Raycast.html]
        {
            touchedObjectText.text = "HIT!";
            Debug.DrawRay(ray, transform.TransformDirection(Vector3.forward) * hit.distance, Color.yellow);
            hitGameObject = hit.collider.gameObject;
            touchedObjectText.text =hitGameObject.name.ToString();    
        }
 }

}