Raycasts: Unterschied zwischen den Versionen

Aus hyperdramatik
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
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";
        }
    }

}