Raycasts: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Fabian (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Fabian (Diskussion | Beiträge) |
||
| Zeile 3: | Zeile 3: | ||
== Raycast on touch == | == Raycast on touch == | ||
<source lang="csharp" line start="2" highlight="4-6"> | <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; | ||
Version vom 8. April 2020, 16:15 Uhr
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.
Raycast on touch
// 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();
}
}
}