Я создаю игру, используя 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#
Место общения программистов C#
-
Anonymous
1728330728
Anonymous
Я создаю игру, используя 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[i];
// 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);
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79063456/how-to-access-app-data-files-on-the-meta-quest[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия