Unity — доступ к автономному файлу .EXE из локального файлового менеджера.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Гость
 Unity — доступ к автономному файлу .EXE из локального файлового менеджера.

Сообщение Гость »

Код: Выделить всё

 'using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using System.IO;
using UnityEngine.Networking;

public class OpenFile : MonoBehaviour
{
private string path;
public Image image;
public ImageContainer imageContainer; // Reference to your ScriptableObject

// Specify the folder path for saved sprites
private string savedSpritesFolder = "Assets/loadingImag/";

public void OpenExplorer()
{
#if UNITY_WEBGL
// Call a JavaScript function to trigger file selection
CallJSOpenFileDialog();
#else
path = UnityEditor.EditorUtility.OpenFilePanel("Overwrite With Png", "", "png");
GetImage();
#endif
}

private void CallJSOpenFileDialog()
{
// Call a JavaScript function to open file dialog
Application.ExternalEval("OpenFileDialog()");
}

// JavaScript function to handle file selection
public void OnFileSelected(string filePath)
{
path = filePath;
GetImage();
}

private void Awake()
{
string folderPath = Application.dataPath + "/loadingImag/";

if (Directory.Exists(folderPath))
{
string[] files = Directory.GetFiles(folderPath);

foreach (string file in files)
{
if (File.Exists(file))
{
File.Delete(file);
Debug.Log("Deleted: " + file);
}
}

Debug.Log("All files in loadingImag folder have been deleted.");
}
else
{
Debug.LogWarning("The loadingImag folder does not exist.");
}
}

private void GetImage()
{
if (!string.IsNullOrEmpty(path))
{
StartCoroutine(UpdateImage());
}
}

private IEnumerator UpdateImage()
{
using (UnityWebRequest www = UnityWebRequestTexture.GetTexture("file:///" + path))
{
yield return www.SendWebRequest();

if (www.result == UnityWebRequest.Result.ConnectionError || www.result ==  UnityWebRequest.Result.ProtocolError)
{
Debug.LogError("Failed to load image: " + www.error);
}
else
{
Texture2D texture = DownloadHandlerTexture.GetContent(www);

// Create a sprite from the texture
Sprite sprite = ConvertTextureToSprite(texture);

// Assign the sprite to the Image component
image.sprite = sprite;

// Save changes to the ImageContainer asset
#if UNITY_EDITOR
UnityEditor.EditorUtility.SetDirty(imageContainer);
UnityEditor.AssetDatabase.SaveAssets();
UnityEditor.AssetDatabase.Refresh();
#endif

// Save the sprite as an asset in the specified folder
ImportTextureAsSprite(texture, savedSpritesFolder +      Path.GetFileNameWithoutExtension(path) + ".png");
}
}
}

Sprite ConvertTextureToSprite(Texture2D texture)
{
// Create a sprite from the texture
Rect rect = new Rect(0, 0, texture.width, texture.height);
Sprite sprite = Sprite.Create(texture, rect, new Vector2(0.5f, 0.5f));
return sprite;
}

void ImportTextureAsSprite(Texture2D texture, string assetPath)
{
// Save the texture asset
byte[] bytes = texture.EncodeToPNG();
File.WriteAllBytes(assetPath, bytes);
#if UNITY_EDITOR
UnityEditor.AssetDatabase.Refresh();

// Import the saved texture as a sprite
UnityEditor.TextureImporter importer = UnityEditor.AssetImporter.GetAtPath(assetPath) as         UnityEditor.TextureImporter;
importer.textureType = UnityEditor.TextureImporterType.Sprite;
importer.spriteImportMode = UnityEditor.SpriteImportMode.Single;
importer.spritePixelsPerUnit = 100;  // Отрегулируйте по мере необходимости
importer.alphaIsTransparency = true;
importer.SaveAndReimport();
#endif
 }`

Мне нужна помощь со сценарием Unity, предназначенным для открытия локального файлового менеджера пользователя и позволяющего ему выбрать изображение. Затем выбранное изображение должно отображаться в элементе пользовательского интерфейса изображения на холсте. Кроме того, я стремлюсь импортировать выбранное изображение в виде текстуры в спрайт, поместив его в указанную папку. Важно отметить, что в настоящее время эта функция работает исключительно в среде редактора Unity. Я с нетерпением жду решений, которые расширят эту возможность для автономных сборок EXE или развертываний WebGL. Будем очень признательны за любые идеи или рекомендации по адаптации сценария для этих контекстов.
Я успешно реализовал сценарий Unity, который открывает локальный файловый менеджер и позволяет пользователям выбирать изображение. Затем выбранное изображение отображается в элементе пользовательского интерфейса изображения на холсте, и сценарий импортирует изображение в виде текстуры в спрайт, помещая его в назначенную папку. Однако важно отметить, что эта функциональность в настоящее время ограничена редактором Unity.
Сейчас я изучаю варианты, позволяющие обеспечить беспрепятственную работу этого сценария в автономных сборках EXE или развертываниях WebGL. Я попробовал несколько подходов, но ни один из них пока не дал желаемых результатов. Мне нужны рекомендации или предложения о том, как адаптировать сценарий для этих сред, обеспечив такой же удобный выбор изображений и функциональность отображения.


Источник: https://stackoverflow.com/questions/781 ... le-manager
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Получить путь к автономному EXE?
    Anonymous » » в форуме C#
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Получить путь к автономному EXE?
    Anonymous » » в форуме C#
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Как программно получить путь к выбранному PDF/документу из файлового менеджера в Android
    Гость » » в форуме Android
    0 Ответы
    67 Просмотры
    Последнее сообщение Гость
  • Ошибка неопределенного символа _ZN5Baloo11QueryParserC1Ev при открытии файлового менеджера Dolphin
    Anonymous » » в форуме Linux
    0 Ответы
    40 Просмотры
    Последнее сообщение Anonymous
  • Как программно получить путь к выбранному PDF/документу из файлового менеджера в Android
    Anonymous » » в форуме Android
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»