Captian Hook Geschrieben 30. August 2011 Melden Share Geschrieben 30. August 2011 Hallo zusammen, Ich möchte gerne aus einem Unity Script heraus eine externe Application starten, z.B erreichen eines Punktes soll bei einem Windows PC das Programm "Hearts" starten. Gibt es in bei Unity diese Möglichkeit? Vielen Dank Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Tiles Geschrieben 30. August 2011 Melden Share Geschrieben 30. August 2011 Sieht nicht so aus. In der Unity Manual findet sich nur ein Hinweis auf Command line Optionen die den Editor betreffen. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
damuddamc Geschrieben 30. August 2011 Melden Share Geschrieben 30. August 2011 Hi, schau dir mal System.Diagnostics an.. damit müsste es gehn... hab damit zwar selbst nur google im standart Webbrowser geöffnet aber alle anderen Programme sollten auch irgendwie funktionieren! Hier mal zum testen mit google: using UnityEngine; using System.Collections; using System.Diagnostics; public static class CallExternProgramm { public static void CallGoogle(string t) { Process.Start("http://google.com/search?q=" + t); } } Aufruf dann von egal wo: CallExternProgramm.CallGoogle("Unity3D"); Gruß Stephan Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
V_Software Geschrieben 30. August 2011 Melden Share Geschrieben 30. August 2011 Hier hab ich ein kleines Script erstellt am Beispiel von Hearts. Es startet die Anwendung gleich in der Start Funktion, aber wenn du es als eigene Klasse/ Funktion definierst, kannst es ja dann überall starten wo du möchtest. Ich habe Kommentare hinzugefügt, die es erklären using UnityEngine; using System.Collections; using System.Diagnostics; public class StarteExterneApp : MonoBehaviour { // Use this for initialization void Start () { // Anwendungen die gestartet werden müssen, benötigen eine Instanz der Process Klasse // In diesem Fall speichern wir sie als "Anwendung" Process Anwendung = new Process(); //Funktioniert mit "mshearts.exe" da es sich im Systemverzeichnis befindet, willst du hingegen //eine spezielle Anwendung starten musst du natürlich auch den Pfad dazu eingeben Anwendung.StartInfo.FileName = "mshearts.exe"; // wie bei jeder Anwendung die man normal startet kann man auch diese Argumente übergeben // Ich hab es hier jetzt auskommentiert, da es kein Sinn gibt bei Hearts Argumente zu übergeben //Anwendung.StartInfo.Arguments = "Argumente etc."; // Und schließlich starten wir die Anwendung Anwendung.Start(); } // Update is called once per frame void Update () { } } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Captian Hook Geschrieben 31. August 2011 Autor Melden Share Geschrieben 31. August 2011 Danke für den Code als Beispiel. Ich nehme an es ist ein C#Script in Unity? Wie kann ich diese Script bei sepziellen Anläßen starten, z.B Player hat Pos x,y,z erreicht? (Ist das was mit TriggerEvent?) Danke nochmal! Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 1. September 2011 Melden Share Geschrieben 1. September 2011 Da gibt es viele verschiedene Möglichkeiten. Du kannst einen Trigger aufstellen oder in Update nachfragen, wo man ist. Alles eine Frage des Gamedesigns. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
V_Software Geschrieben 1. September 2011 Melden Share Geschrieben 1. September 2011 Ja das Beispiel war in C# Wenn du z.b die Position des Players ( oder generell eines GameObjects das eine Rigidbody Komponente hat) überprüfen willst, dann macht es wirklich Sinn ein Trigger zu verwenden. Andernfalls muss sich der Player an exakt der Position befinden die du überprüfst, was manchmal nicht leicht sein könnte für den Player wenn du exakt die X,Y und Z Werte überprüfst. Um eine einfachere Lösung zu haben, erstell einfach ein unsichtbares Objekt (z.b. Cube mit MeshRender deaktivieren) aktiviere "isTrigger" im Editor und kannst das Script das ich geschrieben hab einfach an dem dran hängen, mit einer einzigen Veränderung: ersetze Start() mit OnTriggerEnter(Collider other) der Rest kann gleich bleiben. Das funktioniert nur wenn der Player (oder sonstiges GameObject) das diesen unsichtbaren "Würfel" berührt, eine Rigidbody Komponente hat. Das dürfte meistens der Fall sein. Der Vorschlag es in der Update() Funktion aufzurufen ist auch machbar, aber dann funktioniert es nur wenn der Player sich wirklich genau in der Position befindet und je nach Player (je nach Form) kann es vorkommen, dass du dann denkst es funktioniert nicht obwohl es doch der Fall ist. Deswegen ist wohl ein Trigger Event zu benutzen sinnvoller. Kannst auch statt OnTriggerEnter auch OnTriggerExit benutzen was das gleiche auslöst wenn du den Trigger verlassen hast. OnTriggerStay wär auch ne Möglichkeit aber dann würde es immer wieder die Anwendung starten solang der Player dort steht, früher oder später würde sich dann der PC beschweren^^ 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.