facebook twitter hatena line email

「Unity/AssetBundle/AssetBundle作り方」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
(削除は以下の通り)
(=)
 
(同じ利用者による、間の6版が非表示)
行6: 行6:
 
公式:https://docs.unity3d.com/jp/460/ScriptReference/BuildPipeline.BuildAssetBundle.html
 
公式:https://docs.unity3d.com/jp/460/ScriptReference/BuildPipeline.BuildAssetBundle.html
  
Assets/Editor/ExportAssetBundles.cs
+
Assets/Scripts/Editor/ExportAssetBundles.cs
 
<pre>
 
<pre>
 
using System.Collections;
 
using System.Collections;
行34: 行34:
 
  ArgumentException: The output path "AssetBundleExport" doesn't exist
 
  ArgumentException: The output path "AssetBundleExport" doesn't exist
 
出力ディレクトリを、予め作っておく。
 
出力ディレクトリを、予め作っておく。
 +
 +
===コマンド実行で、Exceptionを吐く===
 +
dirが無いとか、かもしれないので確認。
 +
<pre>
 +
Aborting batchmode due to failure:
 +
executeMethod method ExportAssetBundles. ExportResource threw exception.
 +
</pre>
  
 
===Unrecognized assets cannot エラーが出る場合===
 
===Unrecognized assets cannot エラーが出る場合===
行41: 行48:
  
 
==Dir内のファイルを削除したいときは以下実行==
 
==Dir内のファイルを削除したいときは以下実行==
  FileUtil.DeleteDirFile("");
+
  FileUtil.DeleteDirFile("AssetBundleExport");
 +
 
 +
FileUtil.cs
 
<pre>
 
<pre>
 
using System.IO;
 
using System.IO;
 
public class FileUtil
 
public class FileUtil
 
{
 
{
     public static void DeleteDirFile(string targetDirectoryPath)
+
     public static void DeleteDirFile(string dirPath)
 
     {
 
     {
         if (!Directory.Exists(targetDirectoryPath))
+
         if (!Directory.Exists(dirPath))
 
         {
 
         {
 
             return;
 
             return;
 
         }
 
         }
         string[] filePaths = Directory.GetFiles(targetDirectoryPath);
+
         string[] filePaths = Directory.GetFiles(dirPath);
 
         foreach (string filePath in filePaths)
 
         foreach (string filePath in filePaths)
 
         {
 
         {
行58: 行67:
 
             File.Delete(filePath);
 
             File.Delete(filePath);
 
         }
 
         }
         string[] directoryPaths = Directory.GetDirectories(targetDirectoryPath);
+
         string[] dirPaths = Directory.GetDirectories(dirPath);
         foreach (string directoryPath in directoryPaths)
+
         foreach (string path in dirPaths)
 
         {
 
         {
             DeleteDirFile(directoryPath);
+
             DeleteDirFile(path);
 
         }
 
         }
 
     }
 
     }

2021年8月28日 (土) 01:40時点における最新版

スクリプトでのAssetBundleの作り方

  1. 適当なファイル(例:user.csv)を作る
  2. "user.csv"のファイルを選択し、inspector下のAssetBundleに"user.csv"を入れる。

UnityEditorでビルド実行

公式:https://docs.unity3d.com/jp/460/ScriptReference/BuildPipeline.BuildAssetBundle.html

Assets/Scripts/Editor/ExportAssetBundles.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

public class ExportAssetBundles
{
	[MenuItem("Tools/Build AssetBundle")]
	static void ExportResource()
	{
		BuildPipeline.BuildAssetBundles(
			"AssetBundleExport",
			BuildAssetBundleOptions.None,
			BuildTarget.WebGL
		);
	}
}
  1. AssetBundleExportのディレクトリを作成しておく
  2. Unityメインメニュー/Tools/Build AssetBundleを実行
  3. AssetBundleExportの下にファイル(例:user、user.manifest)が出来る

doesn't existエラーが出るとき

以下のようなエラーが出るとき

ArgumentException: The output path "AssetBundleExport" doesn't exist

出力ディレクトリを、予め作っておく。

コマンド実行で、Exceptionを吐く

dirが無いとか、かもしれないので確認。

Aborting batchmode due to failure:
executeMethod method ExportAssetBundles. ExportResource threw exception.

Unrecognized assets cannot エラーが出る場合

以下エラーが出る

Unrecognized assets cannot be included in AssetBundles: "Assets/user".

追加したファイルに拡張子が、ないかもしれないので、拡張子をつける。userだったら、user.csvとかuser.txtとか

Dir内のファイルを削除したいときは以下実行

FileUtil.DeleteDirFile("AssetBundleExport");

FileUtil.cs

using System.IO;
public class FileUtil
{
    public static void DeleteDirFile(string dirPath)
    {
        if (!Directory.Exists(dirPath))
        {
            return;
        }
        string[] filePaths = Directory.GetFiles(dirPath);
        foreach (string filePath in filePaths)
        {
            File.SetAttributes(filePath, FileAttributes.Normal);
            File.Delete(filePath);
        }
        string[] dirPaths = Directory.GetDirectories(dirPath);
        foreach (string path in dirPaths)
        {
            DeleteDirFile(path);
        }
    }
}

参考:https://kan-kikuchi.hatenablog.com/entry/DirectoryProcessor

参考

https://kan-kikuchi.hatenablog.com/entry/AssetBundle

https://orenda.co.jp/blog/1633/