Raycasts: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Fabian (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Fabian (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
| Zeile 32: | Zeile 32: | ||
PerformRaycast(); | 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); | |||
//if (Physics.Raycast(ray, playerCamera.transform.forward, out hit, Mathf.Infinity)) | |||
//macht ray bei Camerapunkt | |||
if (Physics.Raycast(myRay.origin, myRay.direction, out hit, Mathf.Infinity)) | |||
{ | |||
touchedObjectText.text = "HIT!"; | |||
Debug.DrawRay(ray, transform.TransformDirection(Vector3.forward) * hit.distance, Color.yellow); | |||
hitGameObject = hit.collider.gameObject; | |||
touchedObjectText.text =hitGameObject.name.ToString(); | |||
if (hitGameObject.name == "ToBeHit" && hitStatus == 0) { | |||
SendOSC.OscMsgStuhl(ledStatus); | |||
hitStatus = 1; | |||
if (ledStatus==0) { | |||
ledStatus = 1; | |||
} | |||
else { ledStatus = 0; } | |||
textDebug.text = "OSC"; | |||
} | |||
// Debug log this: hit.collider.gameObject.name; | |||
//zum material: | |||
//hitGameObject.GetComponent<Renderer>().material; | |||
} | |||
else | |||
{ | |||
//no hit! i repeat, no hit!! | |||
//touchedObjectText.text = "NO HIT"; | |||
} | |||
} | |||
} | } | ||
</source> | </source> | ||
Version vom 8. April 2020, 13:29 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
// Das ist ein Versuch
//
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 ;
// 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);
//if (Physics.Raycast(ray, playerCamera.transform.forward, out hit, Mathf.Infinity))
//macht ray bei Camerapunkt
if (Physics.Raycast(myRay.origin, myRay.direction, out hit, Mathf.Infinity))
{
touchedObjectText.text = "HIT!";
Debug.DrawRay(ray, transform.TransformDirection(Vector3.forward) * hit.distance, Color.yellow);
hitGameObject = hit.collider.gameObject;
touchedObjectText.text =hitGameObject.name.ToString();
if (hitGameObject.name == "ToBeHit" && hitStatus == 0) {
SendOSC.OscMsgStuhl(ledStatus);
hitStatus = 1;
if (ledStatus==0) {
ledStatus = 1;
}
else { ledStatus = 0; }
textDebug.text = "OSC";
}
// Debug log this: hit.collider.gameObject.name;
//zum material:
//hitGameObject.GetComponent<Renderer>().material;
}
else
{
//no hit! i repeat, no hit!!
//touchedObjectText.text = "NO HIT";
}
}
}