2013-04-11 3 views
8

मैं अपने समूह के ध्वनि डिजाइनर के लिए एक टूल बनाने की कोशिश कर रहा हूं जो उसे एकता में खेली गई ध्वनि फ़ाइल सुनने की अनुमति देगी।फ्लाई पर लोड की गई आवाज़ें कैसे खेलें

  • चेक अगर यह लोड करने योग्य
  • चेक अगर मात्रा सही है
  • चेक अगर छोरों ठीक से

और इतने पर ...

मेरे मुद्दा मिल रहा है कैसे कर सकते हैं एकता किसी फ़ोल्डर में कहीं भी बिछाने वाली ऑडियो फ़ाइलों को लोड करना प्रबंधित करें।

मुझे इसके बारे में बहुत से विषय बोलने लगे लेकिन कोई वास्तविक समाधान नहीं है कि आप एकता को बाह्य फ़ाइलों को गतिशील रूप से कैसे लोड कर सकते हैं।

उत्तर

7

आप .exe रूप में एक ही निर्देशिका से फ़ाइलों लोड करने के लिए चाहते हैं/.app आप इस का उपयोग कर सकते हैं: सभी फ़ाइलों के नाम पाने के लिए System.IO DirectoryInfo() का उपयोग

  • स्ट्रीम/फ़ाइलें लोड करने के लिए WWW वर्ग का उपयोग करते हुए पाया

यहाँ कोड:

using UnityEngine; 
using System.Collections; 
using System.Collections.Generic; 
using System.IO; 

public class SoundPlayer : MonoBehaviour { 

    string absolutePath = "./"; // relative path to where the app is running 

    AudioSource src; 
    List<AudioClip> clips = new List<AudioClip>(); 
    int soundIndex = 0; 

    //compatible file extensions 
    string[] fileTypes = {"ogg","wav"}; 

    FileInfo[] files; 

    void Start() { 
     //being able to test in unity 
     if(Application.isEditor) absolutePath = "Assets/"; 
     if(src == null) src = gameObject.AddComponent<AudioSource>(); 
     reloadSounds(); 
    } 

    void reloadSounds() { 
     DirectoryInfo info = new DirectoryInfo(absolutePath); 
     files = info.GetFiles(); 

     //check if the file is valid and load it 
     foreach(FileInfo f in files) { 
      if(validFileType(f.FullName)) { 
       //Debug.Log("Start loading "+f.FullName); 
       StartCoroutine(loadFile(f.FullName)); 
      } 
     } 
    } 

    bool validFileType(string filename) { 
     foreach(string ext in fileTypes) { 
      if(filename.IndexOf(ext) > -1) return true; 
     } 
     return false; 
    } 

    IEnumerator loadFile(string path) { 
     WWW www = new WWW("file://"+path); 

     AudioClip myAudioClip = www.audioClip; 
     while (!myAudioClip.isReadyToPlay) 
     yield return www; 

     AudioClip clip = www.GetAudioClip(false); 
     string[] parts = path.Split('\\'); 
     clip.name = parts[parts.Length - 1]; 
     clips.Add(clip); 
    } 
} 

[संपादित करें]

लोगों फ़ाइल प्रबंधन में सुधार करना चाहता है मैं this link

+0

की सलाह देते हैं तो, आप 'छोरों अगर ठीक से जाँच करें' करते हैं? यदि आप अपने प्रश्न का उत्तर देने जा रहे हैं, तो कृपया पूरी तरह से ऐसा करें। – Joetjah

+0

मुझे लगता है कि प्लेटफॉर्म-निर्भरता से बचने के लिए Path.Combine (http://msdn.microsoft.com/ru-ru/library/vstudio/fyy7a5kt(v=vs.90).aspx) का उपयोग करना बेहतर है। –

+0

@ जोतेजा ओपी ने कहा कि यह मुद्दा केवल यह पता लगाने के लिए था कि कैसे एकता ऑडियो फ़ाइलों को लोड करने का प्रबंधन कर सकती है – StackUnder

संबंधित मुद्दे