Aquana Geschrieben 20. November 2019 Melden Share Geschrieben 20. November 2019 Hallo, Ich versuche über eine Script ein noch unbekannte Gameobject anzusprechen bzw wenn es von einem ray getroffen wird das es der noch leeren public Gameobject Stelle hinzugefügt wird. Das klappt schon. Doch dann möchte ich die DIstance von dem aktuellen Objekt abgefragt wird. // Transform ist null weil es um unbekannte Gameobjecte geht public Transform other=null; float abstand; float länge=10; void Update() { //Starh wird ausgestrahlt RaycastHit hit; Debug.DrawRay(transform.position, transform.TransformDirection(Vector3.forward) * länge, Color.red); if (Physics.Raycast(transform.position,transform.TransformDirection(Vector3.forward),out hit,länge)&& hit.collider.tag.Equals("Player")) { //unbekannte Gameobject wird Transform zugefügt other = GameObject.FindWithTag("Player").transform; // frage die Distance ab float dist = Vector3.Distance(other.transform.position, transform.position); //schreibe die DIstance print(dist); } ; Doch jetzt kommt das Problem. Obwohl das richtige Gameobject jetzt in der Spalte ist, wird anscheinend dennoch der Abstand von dem Object abgefragt was auch den gleichen namen hat (2* Sphere), das zuletzt in der Hierachy steht. Aber so wie ich das gemacht habe, dachte ich das das aktuelle Object angesprochen wurde und damit auch die Position. Mich würde eine Antwort darauf freuen warum das nicht so geht wie ich dachte. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Felix K. Geschrieben 20. November 2019 Melden Share Geschrieben 20. November 2019 Hi. Ändere mal folgendes und probiere erneut. RaycastHit hit; Debug.DrawRay(transform.position, transform.TransformDirection(Vector3.forward) * länge, Color.red); if (Physics.Raycast(transform.position,transform.TransformDirection(Vector3.forward),out hit,länge) && hit.collider.tag.Equals("Player")){ //unbekannte Gameobject wird Transform zugefügt //other = GameObject.FindWithTag("Player").transform;// Info: Entfernen! Man muss nicht danach suchen. //Es kann aus der Raycast hit variable ausgelesen werden. other = hit.collider.transform // Nutze Das! // frage die Distance ab float dist = Vector3.Distance(other.transform.position, transform.position); //schreibe die DIstance print(dist); // Info: Debug.print geht auch. } Grüße Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Aquana Geschrieben 21. November 2019 Autor Melden Share Geschrieben 21. November 2019 okay, danke. Dabei war ich der festen Überzeugung als ich auf Play gedrückt habe und die namen jeweils umgeschrieben habe (um zu sehen das auch die richtige Objecte in der Publicspalte sind) das es die vom ray anviesierten Objecte waren. Da scheine ich wohl irgend etwas in der Hierachy durcheinander gehauen zu haben. Ich dachte der Unterschied von FindGameobjectwithtag zu Findwithtag wäre das es nur das eine anvisierte aussucht. EIne FRage habe ich noch. Macht es einen UNterschied ob man other = hit.collider.transform oder other =(hit.transform) schreibt? Ich habe jetzt keinen feststellen können aber manchmal zeigt sich der Unterschied erst wenn man es unbedingt braucht. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
dirk Geschrieben 21. November 2019 Melden Share Geschrieben 21. November 2019 Nö. https://docs.unity3d.com/ScriptReference/RaycastHit-transform.html Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.