- Home /
Wie bestimme ich eine minimale Distanz zweier Objekte?
Hallo, ich programmiere ein Spiel in dem unter anderem Bots mitkämpfen. Diese werden im 30 sekündigem Takt erstellt und bewegen sich dann auf den nächsten Gegner zu. Mein Problem ist das irgentwann alle Bots auf einem Fleck stehen, deshalb möchte ich eine minimale Distanz der Bots zueinander bestimmen. Ich würde mich sehr freuen wenn ihr mir da ein bisschen weiterhelfen könntet, Danke.
Die Funktion die du wahrscheinlich suchst ist diese hier
http://docs.unity3d.com/ScriptReference/Vector3.Distance.html
Damit bekommst du die Distanz zwischen 2 Positionen (Vecor3) heraus. (Auf der Seite findest du auch ein bespiel)
Wenn du zukünftig weitere Fragen hast währe es von vorteil das du sie in englisch stellst da die meisten user dieser Seite nur englisch sprechen werden und die eventuell sonst lange auf eine Antwort warten musst.
Erstmal vielen dank für die antworten. Die funktion Vector3.Distance kannte ich bereiz, allerdings ann man keinen Abstand festlegen. Den Collider habe ich bereits ausprobiert aber dabei kommt es oft z einem sehr unschönen herumgebugge. Gibt es vielleicht eine Funktion, die mir weiterhilf ?
Ich empfehle, dich in Sachen "Boids" schlau zu machen. Im übrigen unterstürtzt die Pro version von Aron Granberg's Astar Pathfinding Project (~100 USD) Local Avoidance.
Hier ist der Code:
using UnityEngine; using System.Collections;
public class servent : $$anonymous$$onoBehaviour {
public float duration = 20;
public GameObject wp;
public GameObject wp1;
public GameObject wp2;
// Use this for initialization
void OnTriggerEnter (Collider col) {
if (transform.tag == "Untagged") {
if (col.name == "wptC") {
transform.tag = "st";
}
if (col.name == "wpmC") {
transform.tag = "sm";
}
if (col.name == "wpbC") {
transform.tag = "sb";
}
}
eject ();
}
void eject (){
if (transform.tag == "st") {
wp = GameObject.FindWithTag ("wpt1");
wp1 = GameObject.FindWithTag ("wpt2");
wp2 = GameObject.FindWithTag ("wpt3");
}
if(transform.tag == "sm") {
wp = GameObject.FindWithTag("wpm1");
wp1 = GameObject.FindWithTag("wpm2");
wp2 = GameObject.FindWithTag("wpm3");
}
if(transform.tag == "sb") {
wp = GameObject.FindWithTag("wpb1");
wp1 = GameObject.FindWithTag("wpb2");
wp2 = GameObject.FindWithTag("wpb3");
}
}
void Update () {
float dist = Vector3.Distance(wp.transform.position,transform.position);
float dist1 = Vector3.Distance(wp1.transform.position,transform.position);
if(dist <= 0.5f){
wp = wp1;
}
if(dist1 <= 0.5f){
wp = wp2;
}
gameObject.transform.position = Vector3.Lerp(gameObject.transform.position, wp.transform.position, 1/(duration*(Vector3.Distance(gameObject.transform.position, wp.transform.position))));
}
}
Your answer
Follow this Question
Related Questions
Tracking distance after Instantiate 2 Answers
Making a 2d "radar" for space game 2 Answers
dynamic rotation distance 1 Answer
I need help about raycast and edges 2 Answers