Я создаю игру, используя Unity, и в игре я анализирую MIDI-файлы и использую данные для создания уровня. моя проблема в том, что он работает как на единстве, так и на сборке Windows. Однако, когда я строю для квеста, это не работает.
Изменяется ли путь при сборке для мета-квеста? или это проблема с разрешением?
Я получаю к нему доступ так: помещаю все свои MIDI-файлы в папку «StreamingAssets» и пытаюсь получить к ним доступ оттуда. Моя логика заключается в том, чтобы прочитать заголовки MIDI-файлов, добавить их в меню внутри игры, и когда игрок нажимает на один из них, он читает его и создает для них уровень, когда он нажимает кнопку воспроизведения.
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using TMPro;
using UnityEngine.UI;
using UnityEngine.Android; // For permission handling on Android
using UnityEngine.Networking; // For reading from StreamingAssets on Android
public class MidiFileLoader : MonoBehaviour
{
public List midiFilePaths = new List(); // Store all MIDI file paths
public GameObject buttonPrefab; // Assign a UI Button prefab with a Text component
public Transform buttonContainer; // A parent object in the UI where buttons will be placed
void Start()
{
// Request permission for external storage on Android
if (Application.platform == RuntimePlatform.Android)
{
RequestStoragePermissions();
}
StartCoroutine(LoadMidiFiles()); // Use coroutine for loading MIDI files
}
// Coroutine to load MIDI files from StreamingAssets
private IEnumerator LoadMidiFiles()
{
string midiFilesFolder = Path.Combine(Application.streamingAssetsPath, "MidiFiles");
// Load files from "Piano" and "Drums" subfolders
string pianoFolder = Path.Combine(midiFilesFolder, "Piano");
string drumsFolder = Path.Combine(midiFilesFolder, "Drums");
if (!MidiReader.instance.isDrums)
{
yield return StartCoroutine(LoadMidiFilesFromFolder(pianoFolder));
}
else
{
yield return StartCoroutine(LoadMidiFilesFromFolder(drumsFolder));
}
PopulateMenu();
}
// Coroutine to load MIDI files from a folder
private IEnumerator LoadMidiFilesFromFolder(string folderPath)
{
// On Android, use UnityWebRequest to load files from StreamingAssets
string url = Path.Combine(Application.streamingAssetsPath, folderPath);
if (Application.platform == RuntimePlatform.Android)
{
UnityWebRequest request = UnityWebRequest.Get(url);
yield return request.SendWebRequest();
if (request.result == UnityWebRequest.Result.Success)
{
string[] filePaths = request.downloadHandler.text.Split('\n'); // Parse file paths
foreach (string path in filePaths)
{
if (path.EndsWith(".mid"))
{
midiFilePaths.Add(path);
}
}
}
else
{
Debug.LogError("Failed to load files from: " + url);
}
}
else
{
// For platforms other than Android, use standard file system access
if (Directory.Exists(folderPath))
{
string[] files = Directory.GetFiles(folderPath, "*.mid");
midiFilePaths.AddRange(files);
}
}
}
// This method will populate the menu with the MIDI file paths
void PopulateMenu()
{
for (int i = 0; i < midiFilePaths.Count; i++)
{
string path = midiFilePaths;
// Instantiate the button inside the buttonContainer
GameObject newButton = Instantiate(buttonPrefab, buttonContainer);
// Set the button text to the MIDI file name
newButton.GetComponentInChildren().text = Path.GetFileNameWithoutExtension(path);
// Add a listener to the button to load the selected file when clicked
Button buttonComponent = newButton.GetComponent();
buttonComponent.onClick.AddListener(() =>
{
Debug.Log("Button clicked for: " + path);
MidiReader.instance.StartReading(path);
});
}
}
// Request external storage permissions on Android
private void RequestStoragePermissions()
{
if (!Permission.HasUserAuthorizedPermission(Permission.ExternalStorageRead))
{
Permission.RequestUserPermission(Permission.ExternalStorageRead);
}
// Optional: Check for write permission if needed
if (!Permission.HasUserAuthorizedPermission(Permission.ExternalStorageWrite))
{
Permission.RequestUserPermission(Permission.ExternalStorageWrite);
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... meta-quest
Как получить доступ к файлам данных приложения в мета-квесте? ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение