Unity3D Entfernung zwischen zwei Objekten messen?
Hallo zusammen,
Ich programmiere zurzeit ein kleines Survival-Spiel in Unity3D und möchte ein simples Craftingsystem einfügen. Das System ist so aufgebaut, dass wenn man zB. ein Stock und ein Stein nebeneinander auf den Boden legt daraus eine Axt wird. Nun habe ich aber das Problem, dass ich es nicht gebacken bekomme die Entfernung zwischen den Beiden Objekten ( Also Stock und Stein) zu messen.
Hat jemand Tipps oder Vorschläge wie man das bewerkstelligen kann?
Danke im Vorraus
PS: Bitte in C# und nicht in JAVA
3 Antworten
sollte so klappen, bin aber da nichtmehr so fit xD
float dist = Vector3.Distance(other.position, transform.position);
durch die ObjectID bzw. den Namen der zwei Objekte.
Im obigen Beispiel heißt das erste Objekt [other] und das zweite [transform].
Von beiden wird die Property [position] für die Berechnung verwendet.
Ich bekomme dauernd Errors raus:
Code1:
void Update (){
var Stein = GameObject.Find("Stein");
var Stock = GameObject.Find("Stock");
float dist = Vector3.Distance(Stein.position, Stock.position);
Error: Type `UnityEngine.GameObject[]' does not contain a definition for `position' and no extension method `position' of type `UnityEngine.GameObject[]' could be found. Are you missing an assembly reference?
Code2 (Habe ich selbst "entwickelt"):
void Update() {
if(Vector3.Distance(GameObject.Find("Stein").transform.position, GameObject.Find("Stock").transform.position){
//weiterer Code hier
}
Error: Cannot implicitly convert type `float' to `bool'
Das komische ist, dass mein Code bei anderen Messungen eigentlich Funktioniert und ich ihn schon öfters eingesetzt habe.
Kannst du mir verraten, was für Anfängerfehler ich gemacht habe?:)
jap deine Method
var Stein = GameObject.Find("Stein");
gibt ein Object ARRAY zurück also Stein[1-n]
quick and dirty probier mal
float dist = Vector3.Distance(Stein[0].position, Stock[0].position);
du solltest für eine Produktiv-Lösung aber irgendwie einen anderen Weg finden genau DIESEN Stein und DIESEN Stock zu finden.
ach verdammt, wie gesagt ist schon lange her... vergiss das ARRAY Ding <-- kompletter Blödsinn.
also deine eigene Entwicklung ist absolut KORREKT
sollte es eher so aussehen:
void Update() {
float Distance = Vector3.Distance(GameObject.Find("Stein").transform.position, GameObject.Find("Stock").transform.position);
if (Distance <= ){
//mach etwas cooles ;)
}
}
du hattest in deinem Beispiel im If() keinen Vergleich.
Hab wenig Erfahrung mit Geometrie in C#, aber sieht mir auch richtig aus (other und transform sind die beiden Objekte)
Oder der manuelle weg ;)
Vector3 A;
Vector3 B;
Vector3 C = A-B;
float distance = C.x^2+C.y^2+C.z^2;
float distance = ✓distance;
Ps: Der Code zeigt nur die Logic ist aber nicht copy/paste bar
if(Vector3.Distance(stein.position, stock.position) <= 0,3f)
{
//baue axt
//entfern stein und stock
}
Problem dabei ist aber, es ist nich dynamisch.
Und wie soll das Script wissen welche Objekte es finden und messen soll? Wie soll ich die Objekte "erkennbar" machen?