motionact Geschrieben 29. Januar 2018 Melden Share Geschrieben 29. Januar 2018 Hallo zusammen, ich möchte mit einer Taste (Bsp.: Leertaste) gleichzeitig eine Video- und eine Tonspur starten. Mit Hilfe dieses Tutorials konnte ich schon mal die Tonspur starten. Leider lässt sich das nicht auf Videofiles übertragen. Hat jemand eine Idee, was ich machen muss? Habe leider keine Scripting Kenntnisse. Das Script aus dem Video habe ich direkt unter diesem Videolink aufgeführt. Freue mich über hilfreiche Antworten. Danke! Das ist das Script zum Auslösen der Tonspur: using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayTheShow : MonoBehaviour { public AudioSource someSound; // Use this for initialization void Start () { } // Update is called once per frame void Update () { if (Input.GetKeyDown(KeyCode.Space)){ someSound.Play(); } } } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Elharter Geschrieben 29. Januar 2018 Melden Share Geschrieben 29. Januar 2018 Naja geh es doch so an, das du dabei auch etwas lernst. Das heißt: 1. www.google.de > "unity video abspielen" eingeben 2. Ergebnis suchen...... siehe da: https://docs.unity3d.com/ScriptReference/Video.VideoPlayer.html Dort wird erklärt wie du generell mal ein Video zum abspielen bewegst. Danach packst du das ganze in eine Funktion und rufst diese in deinem Update() auf. Ob das am Ende zielführend und so ist, wie du das willst wirst du dann sehen. lg Michael Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
motionact Geschrieben 29. Januar 2018 Autor Melden Share Geschrieben 29. Januar 2018 Das weiß ich doch schon. Leider habe ich dort nur die Möglichkeit festzulegen, ob nach dem Spielstart das Video sofort gestartet werden soll oder nicht. Ich möchte aber das Spiel starten und erst bei Betätigung der entsprechenden Taste das Video und Audiofile abspielen lassen. Mit dem Ton hat es ja schon funktioniert, siehe erster Eintrag. Das selbe will ich nun auch mit dem Video machen, leider komme ich da nicht weiter. lg André Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 29. Januar 2018 Melden Share Geschrieben 29. Januar 2018 vor 3 Minuten schrieb motionact: Leider habe ich dort nur die Möglichkeit festzulegen, ob nach dem Spielstart das Video sofort gestartet werden soll oder nicht. Wie kommst du darauf? @Elharter hat's dir doch schon gesagt: vor 46 Minuten schrieb Elharter: Danach packst du das ganze in eine Funktion und rufst diese in deinem Update() auf. Ob das am Ende zielführend und so ist, wie du das willst wirst du dann sehen. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 29. Januar 2018 Melden Share Geschrieben 29. Januar 2018 Hier mal schnell zusammengestrickt: // Examples of VideoPlayer function using UnityEngine; public class Example : MonoBehaviour { private UnityEngine.Video.VideoPlayer videoPlayer; void Start() { // Will attach a VideoPlayer to the main camera. GameObject camera = Camera.main.gameObject; // VideoPlayer automatically targets the camera backplane when it is added // to a camera object, no need to change videoPlayer.targetCamera. videoPlayer = camera.AddComponent<UnityEngine.Video.VideoPlayer>(); // Play on awake defaults to true. Set it to false to avoid the url set // below to auto-start playback since we're in Start(). videoPlayer.playOnAwake = false; // By default, VideoPlayers added to a camera will use the far plane. // Let's target the near plane instead. videoPlayer.renderMode = UnityEngine.Video.VideoRenderMode.CameraNearPlane; // This will cause our scene to be visible through the video being played. // videoPlayer.targetCameraAlpha = 0.5F; // Set the video to play. URL supports local absolute or relative paths. // Here, using absolute. videoPlayer.url = "/Users/graham/movie.mov"; } // Update is called once per frame void Update () { if (Input.GetKeyDown(KeyCode.Space)) { videoPlayer.Play(); } } } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
motionact Geschrieben 29. Januar 2018 Autor Melden Share Geschrieben 29. Januar 2018 Danke, leider bekomme ich Errors angezeigt. Anbei habe ich mal ein Screenshot vom Inspector mitgeliefert, damit ihr sehen könnt wie es bei mir ausschaut. Wenn ich also eine "Funktion" erstellen möchte, ist damit gemeint, dass ich ein C# Script erstelle und dieses am Ende dem Objekt hinzufüge, wo sich auch der VideoPlayer und Audio Source Component befindet, richtig? Ich benutze kein Url als Video, sondern ein Videofile direkt von der Festplatte. Wie binde ich das in das Script mit ein? Nochmal zur Info: Ich habe keine Scripting Erfahrung und arbeite auch erst seit kurzem mit Unity. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 29. Januar 2018 Melden Share Geschrieben 29. Januar 2018 Ja, das ist korrekt. Welche Unityversion verwendest du? Der Videoplayer hängt schon am Objekt oder? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
motionact Geschrieben 29. Januar 2018 Autor Melden Share Geschrieben 29. Januar 2018 vor 2 Minuten schrieb Zer0Cool: Ja, das ist korrekt. Welche Unityversion verwendest du? Der Videoplayer hängt schon am Objekt oder? Richtig am Objekt, ich benutze Unity2017.3.0f3 Personal. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Elharter Geschrieben 29. Januar 2018 Melden Share Geschrieben 29. Januar 2018 Poste mal die Fehlermeldungen die du bekommst..... Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 29. Januar 2018 Melden Share Geschrieben 29. Januar 2018 Habe es gerade mal getestet, ist leider nicht so einfach wie gedacht. Wenn man den Videoplayer auf die "NearPlane" einstellt wird überhaupt nichts angezeigt, daher habe ich nun das Skript auf UI umgestellt. Ich habe nun ein Skript erstellt, welches funktioniert. Das Video wird in eine Rendertextur gelegt und diese wird über die UI angezeigt. Die UI habe ich so eingestellt, daß das Video mittig zentriert in der Größe der Rendertextur angezeigt wird. Du musst allerdings folgende Sachen zusätzlich anlegen: eine Rendertextur anlegen: im Projektfolder rechte Maustaste -> Create -> Rendertexture Größe der Rendertexture einstellen, möglichst auf die Größe des Videos anpassen, z.b. 1024x1024 ein UI-Element anlegen: GameObject -> UI -> RawImage Das Skript auf deinen VideoPlayer ziehen und folgendes zuweisen - beim VideoPlayer "PlayOnAwake" ausstellen - die Rendertexture - die UI-RawImage using UnityEngine.UI; using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayTheShow : MonoBehaviour { public RawImage uiRawImage; public RenderTexture image; public AudioSource someSound; private UnityEngine.Video.VideoPlayer videoPlayer; void Awake() { // Player zuweisen videoPlayer = GetComponent<UnityEngine.Video.VideoPlayer>(); // Play on awake defaults to true. Set it to false to avoid the url set // below to auto-start playback since we're in Start(). videoPlayer.playOnAwake = false; // UI ausblenden uiRawImage.gameObject.SetActive(false); } void Start() { // Rendertexture zuweisen videoPlayer.renderMode = UnityEngine.Video.VideoRenderMode.RenderTexture; videoPlayer.targetTexture = image; // Kamera zuweisen videoPlayer.targetCamera = Camera.main; // UI Einstellen uiRawImage.rectTransform.anchoredPosition = new Vector2(0, 0); uiRawImage.rectTransform.sizeDelta = new Vector2(image.width, image.height); uiRawImage.texture = image; // This will cause our scene to be visible through the video being played. // videoPlayer.targetCameraAlpha = 0.5F; } // Update is called once per frame void Update() { if (Input.GetKeyDown(KeyCode.Space)) { //someSound.Play(); uiRawImage.gameObject.SetActive(true); videoPlayer.Play(); } } } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
motionact Geschrieben 29. Januar 2018 Autor Melden Share Geschrieben 29. Januar 2018 Achso, das wird hier jetzt nicht auf einer Plane abgespielt, sondern auf der Skybox. Meine Assets sind also das Videofile, Render Texture und Skybox Material. Es handelt sich hier um ein 360° Video was auf die Skybox projiziert wird. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 29. Januar 2018 Melden Share Geschrieben 29. Januar 2018 Wäre mal eine wichtige Info am Anfang gewesen Das ist mit "Boardmitteln" von Unity auch eher komplex. Hier ein Projekt wo so etwas gemacht wird:https://blogs.unity3d.com/2017/07/27/how-to-integrate-360-video-with-unity/ Hier wird auch mit einer Rendertextur gearbeitet und diese Textur wird dann einer Skybox mit ensprechendem Shader zugewiesen. Aber wie gesagt, das sprengt hier den Umfang. Lad dir am besten das Projekt aus dem Link herunter und wenn das läuft tausch halt dein Videofile aus. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 29. Januar 2018 Melden Share Geschrieben 29. Januar 2018 Aber im Endeffekt sollte es so gehen: Du musst ein Skyboxmaterial erstellen und dem Skript zuweisen. Das Skyboxmaterial muss auf den Shader "Skybox/Panoramic" eingestellt sein. Das Material musst du dann noch als Skybox der Szene setzen: Window->Lightning -> Szene -> Skyboxmaterial using UnityEngine.UI; using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayTheShow : MonoBehaviour { //public RawImage uiRawImage; public Material skyBoxMaterial; public RenderTexture image; public AudioSource someSound; private UnityEngine.Video.VideoPlayer videoPlayer; void Awake() { // Player zuweisen videoPlayer = GetComponent<UnityEngine.Video.VideoPlayer>(); // Play on awake defaults to true. Set it to false to avoid the url set // below to auto-start playback since we're in Start(). videoPlayer.playOnAwake = false; // UI ausblenden //uiRawImage.gameObject.SetActive(false); } void Start() { // Rendertexture zuweisen videoPlayer.renderMode = UnityEngine.Video.VideoRenderMode.RenderTexture; videoPlayer.targetTexture = image; // Kamera zuweisen videoPlayer.targetCamera = Camera.main; // Skybox einstellen skyBoxMaterial.SetTexture("_MainTex", image); // UI Einstellen //uiRawImage.rectTransform.anchoredPosition = new Vector2(0, 0); //uiRawImage.rectTransform.sizeDelta = new Vector2(image.width, image.height); //uiRawImage.texture = image; } // Update is called once per frame void Update() { if (Input.GetKeyDown(KeyCode.Space)) { //someSound.Play(); //uiRawImage.gameObject.SetActive(true); videoPlayer.Play(); } } } Ob dein Video aber den Erwartungen des Skyboxshaders entspricht bleibt fraglich ... Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
motionact Geschrieben 29. Januar 2018 Autor Melden Share Geschrieben 29. Januar 2018 Super perfekt, funktioniert jetzt einwandfrei. Danke! Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Elharter Geschrieben 30. Januar 2018 Melden Share Geschrieben 30. Januar 2018 Der @Zer0Cool ist der Wahnsinn oder? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
motionact Geschrieben 1. Februar 2018 Autor Melden Share Geschrieben 1. Februar 2018 Man kann doch sicher auch das Video wieder zurücksetzen auf Anfang ohne dass es erneut startet? Also gemeint ist: 1. Leertaste drücken > Video startet 2. erneut Leertaste drücken > Video stoppt und wird auf Null gesetzt 3. erneut Leertaste drücken > Video startet wieder und so weiter ... Hatte mich mal selber daran versucht und das bisherige Script ergänzt mit Hilfe von Google und Youtube(siehe Bild im Anhang). Leider reagiert Unity auf die neuen Eingaben nicht. Hat jemand eine Idee was ich ins Script schreiben muss? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 1. Februar 2018 Melden Share Geschrieben 1. Februar 2018 War nur eine Zeile ... Ich hab mal die Awake-Methode entfernt, hatte sie verwendet, da "Play on Awake" nicht reagiert (also wenn man es im Inspektor setzt und im Skript deaktiviert wird es ignoriert), aber hat auch in der Awake-Methode nicht geklappt, daher entfernt. using UnityEngine.UI; using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayTheShow : MonoBehaviour { //public RawImage uiRawImage; public Material skyBoxMaterial; public RenderTexture image; public AudioSource someSound; private UnityEngine.Video.VideoPlayer videoPlayer; void Start() { // Player zuweisen videoPlayer = GetComponent<UnityEngine.Video.VideoPlayer>(); // Play on awake defaults to true. Set it to false to avoid the url set // below to auto-start playback since we're in Start(). videoPlayer.playOnAwake = false; // UI ausblenden //uiRawImage.gameObject.SetActive(false); // Rendertexture zuweisen videoPlayer.renderMode = UnityEngine.Video.VideoRenderMode.RenderTexture; videoPlayer.targetTexture = image; // Kamera zuweisen videoPlayer.targetCamera = Camera.main; // Skybox einstellen skyBoxMaterial.SetTexture("_MainTex", image); // UI Einstellen //uiRawImage.rectTransform.anchoredPosition = new Vector2(0, 0); //uiRawImage.rectTransform.sizeDelta = new Vector2(image.width, image.height); //uiRawImage.texture = image; } // Update is called once per frame void Update() { if (Input.GetKeyDown(KeyCode.Space)) { if (videoPlayer.isPlaying) { videoPlayer.Stop(); } else { //someSound.Play(); //uiRawImage.gameObject.SetActive(true); videoPlayer.Play(); } } } } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
motionact Geschrieben 1. Februar 2018 Autor Melden Share Geschrieben 1. Februar 2018 Nach dem zweiten Tastendruck friert das Bild nur ein, lässt sich das auch sofort zurücksetzen? Aber das Neustarten des Videos funktioniert so wie es soll. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 1. Februar 2018 Melden Share Geschrieben 1. Februar 2018 War etwas tricky, aber so sollte es gehen: using UnityEngine.UI; using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayTheShow : MonoBehaviour { //public RawImage uiRawImage; public Material skyBoxMaterial; public RenderTexture image; public AudioSource someSound; private UnityEngine.Video.VideoPlayer videoPlayer; private bool stopNextCycle = false; void Start() { // Player zuweisen videoPlayer = GetComponent<UnityEngine.Video.VideoPlayer>(); // Play on awake defaults to true. Set it to false to avoid the url set // below to auto-start playback since we're in Start(). videoPlayer.playOnAwake = false; // UI ausblenden //uiRawImage.gameObject.SetActive(false); // Rendertexture zuweisen videoPlayer.renderMode = UnityEngine.Video.VideoRenderMode.RenderTexture; videoPlayer.targetTexture = image; // Kamera zuweisen videoPlayer.targetCamera = Camera.main; // Skybox einstellen skyBoxMaterial.SetTexture("_MainTex", image); // UI Einstellen //uiRawImage.rectTransform.anchoredPosition = new Vector2(0, 0); //uiRawImage.rectTransform.sizeDelta = new Vector2(image.width, image.height); //uiRawImage.texture = image; } // Update is called once per frame void Update() { if (stopNextCycle && videoPlayer.frame == 1) { videoPlayer.Stop(); stopNextCycle = false; } if (Input.GetKeyDown(KeyCode.Space)) { if (videoPlayer.isPlaying) { videoPlayer.frame = 0; stopNextCycle = true; } else { //someSound.Play(); //uiRawImage.gameObject.SetActive(true); videoPlayer.Play(); } } } } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
motionact Geschrieben 1. Februar 2018 Autor Melden Share Geschrieben 1. Februar 2018 Da scheint irgendwo ein Fehler zu sein. Sobald ich das Game starten will, wird es automatisch wieder gestoppt. Ich komme quasi gar nicht rein in das Game. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
motionact Geschrieben 13. Februar 2018 Autor Melden Share Geschrieben 13. Februar 2018 Jetzt möchte ich eine in Unity animierte Lichtquelle und eine importierte FBX Animation mit der Leertaste auslösen. Zwei Scripte habe ich erstellt, die auch soweit funktionieren bis ich am Ende der Animation nochmal auf die Leertaste drücke, machen beide Animationen verschiedenes. Hier komme ich gerade nicht weiter. Das Script zu der in Unity animierten Lichtquelle. Was passiert: Nach Drücken der Leertaste startet die Animation und läuft im Loop Modus. Nach erneutem Drücken der Taste gibt es keine Reaktion. Was soll passieren: Nach Drücken der Leertaste startet die Animation und soll bis zum Ende durchlaufen. Nach erneutem Drücken der Taste soll die Animation wieder gestartet werden. Wenn ich während der laufenden Animation auf die Leertaste drücke, soll die Animation gestoppt und bei einem weiteren Drücken erneut ausgelöst werden. __________________________________ using System.Collections; using System.Collections.Generic; using UnityEngine; public class animController : MonoBehaviour { public Animator anim; // Use this for initialization void Start () { anim = GetComponent<Animator>(); } // Update is called once per frame void Update () { if (Input.GetKeyDown (KeyCode.Space)) { anim.Play("Light"); } } } ________________________________________________________ Das Script zu der importierten FBX Animation. Was passiert: Nach Drücken der Leertaste startet die Animation und läuft bis zum Ende durch. Nach erneutem Drücken der Taste gibt es keine Reaktion. Was soll passieren: Nach Drücken der Leertaste startet die Animation und soll bis zum Ende durchlaufen. Nach erneutem Drücken der Taste soll die Animation wieder gestartet werden. Wenn ich während der laufenden Animation auf die Leertaste drücke, soll die Animation gestoppt und bei einem weiteren Drücken erneut ausgelöst werden. _______________________________________________________________ using System.Collections; using System.Collections.Generic; using UnityEngine; public class Man_AnimController : MonoBehaviour { public Animator manAnim; // Use this for initialization void Start () { manAnim = GetComponent<Animator>(); } // Update is called once per frame void Update () { if (Input.GetKeyDown("space")) { manAnim.Play("Mann Bewegung"); } } } ________________________________________________________ Ich hoffe ihr könnt mir da nochmal helfen. Vielen Dank!! 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.