Unity(iOS) 프로젝트의 네이티브 소스에서 리소스를 로드하는 방법
소개
Unity 프로젝트에서 iOS 네이티브 소스에서 이미지와 같은 리소스를 로드하는 방법을 소개합니다.
여기서 소개하는 방법은 방법이 잘 생겼는지는 모르지만 우선 실현은 할 수 있었다는 방법입니다. (Unity 초보자이므로 더 좋은 방법이 있으면 가르쳐주세요)
하고 싶은 일
방법 1 (직접 Images.xcassets에 넣기)
방법
이미지 로드. 이번에는 DataSet이 좋았기 때문에 DataSet으로 취급하고 있습니다.
if let data = NSDataAsset(name: "hogehoge")?.data {
let image = UIImage(data: data)
}
이것이 가장 간단하다고 생각합니다만, 매회 빌드 후에 화상을 넣지 않으면 안되기 때문에 수고가 걸립니다.
방법 2 (Documents 폴더에서 공유)
방법
Unity 측
Texture2D tex2d = Resources.Load("hogehoge") as Texture2D;
File.WriteAllBytes(Application.persistentDataPath+"/hogehoge.png",tex2d.EncodeToPNG());
네이티브 측
let documentPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
let imagePath = "\(documentPath)/hogehoge.png"
if let data = FileManager.default.contents(atPath: imagePath) {
let image = UIImage(data: data)
}
낭비적으로 문서 아래에 파일을 넣는 것은 어떨까요 ...
방법 3 (스크립트에서 Images.xcassets에 넣기)
방법
아래의 hogehoge.dataset을 Unity 프로젝트에 추가.
스크립트는 여기 를 참고.
아래 스크립트를 Unity 프로젝트에 넣는다 (Editor 폴더 아래라면 어디서나 좋은 것 같습니다)
using System.IO;
using UnityEngine;
using UnityEditor;
using UnityEditor.Callbacks;
public class XcodeSettingsPostProcesser
{
[PostProcessBuildAttribute (0)]
public static void OnPostprocessBuild(BuildTarget buildTarget, string pathToBuiltProject)
{
if(target != BuildTarget.iPhone) return;
CopyImages(pathToBuiltProject);
}
//Assets/Plugins/iOS配下の.datasetフォルダをXcodeプロジェクトのImages.xcassetsにコピーする
private static void CopyImages(string xcodeProjectPath)
{
var destDirName = Path.Combine(xcodeProjectPath, "Unity-iPhone/Images.xcassets/");
var path = Application.dataPath + "/Plugins/iOS"
var sourceDirNames = Directory.GetDirectories(path, "*.dataset", SearchOption.AllDirectories);
foreach(var sourceDirName in sourceDirNames)
{
var dirName = Path.GetFileName(sourceDirName);
CopyDirectory(sourceDirName, Path.Combine(destDirName, dirName));
}
}
public static void CopyDirectory(string sourceDirName, string destDirName)
{
//コピー先のディレクトリがないときは作る
if (!System.IO.Directory.Exists(destDirName))
{
System.IO.Directory.CreateDirectory(destDirName);
//属性もコピー
System.IO.File.SetAttributes(destDirName,
System.IO.File.GetAttributes(sourceDirName));
}
//コピー先のディレクトリ名の末尾に"\"をつける
if (destDirName[destDirName.Length - 1] !=
System.IO.Path.DirectorySeparatorChar)
destDirName = destDirName + System.IO.Path.DirectorySeparatorChar;
//コピー元のディレクトリにあるファイルをコピー
string[] files = System.IO.Directory.GetFiles(sourceDirName);
foreach (string file in files)
{
if(file.EndsWith(".meta")) continue; // metaファイルはコピーしない.
System.IO.File.Copy(file, destDirName + System.IO.Path.GetFileName(file), true);
}
//コピー元のディレクトリにあるディレクトリについて、再帰的に呼び出す
string[] dirs = System.IO.Directory.GetDirectories(sourceDirName);
foreach (string dir in dirs)
CopyDirectory(dir, destDirName + System.IO.Path.GetFileName(dir));
}
}
iOS 빌드 후 아래와 같이 이미지가 추가되었습니다.
이미지 로드
if let data = NSDataAsset(name: "hogehoge")?.data {
let image = UIImage(data: data)
}
방법 1의 Xcode에 이미지를 넣는 것을 자동화한 것이 이 방법. 3가지 중에서는 이 방법이 좋을까라고 생각합니다.
사이고에게
이미지만 보기만 해도 상당히 고생했는데...
네이티브 측에서 엉망이 되려고 생각하면 여러가지 궁리가 있는 것 같습니다.
참고
Unity iOS에서 자동으로 이미지 리소스 추가
Reference
이 문제에 관하여(Unity(iOS) 프로젝트의 네이티브 소스에서 리소스를 로드하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/am10/items/8cc5dbeeeea8d2ce92e4
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Unity iOS에서 자동으로 이미지 리소스 추가
Reference
이 문제에 관하여(Unity(iOS) 프로젝트의 네이티브 소스에서 리소스를 로드하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/am10/items/8cc5dbeeeea8d2ce92e4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)