はじめに
AssetBundleGraphToolはAssetBundleを書き出す以外にもいろいろと応用できる便利ツールなのだが情報が少なすぎるので無いよりはましだろうって気持ちで投稿
本人も手探りで触っているので間違っていたら教えてください
登場する専門用語
AssetBundleGraphTool:Unityが用意したアセットツール これを利用すると視覚的にわかりやすい自動化ツールをつくれる
ノード:AssetBundleGraphで使用するブロック部の呼称
やり方
1.「UnityAssetBundleGraph」をもってくる
[ダウンロード先はこちら]
(https://bitbucket.org/Unity-Technologies/assetbundlegraphtool/downloads/)
2.解凍してプロジェクトフォルダに配置
今回使用したのは1.3
「UnityEngine.AssetBundleGraph」の名前は変更するとエラーが出る
↓以下Unityでの操作↓
3.AssetBundleを開く
メニューのWindow→AssetBundleGraph→OpenGraohEditor
4.GameObjectを読み込むノードを配置
LoadAssets→LoadBySearchFilter
設定は下の画像
5.GamePbjectを加工するノードを配置し3でつくったノードと繋ぐ
ModifyAssets→ModifyAssetsDirectly
なおここでスクリプトを書く必要があるので下からコピペ
作る場所はどこでも良い
using UnityEngine;
using UnityEditor;
using System;
using System.Collections.Generic;
using UnityEngine.AssetBundles.GraphTool;
[CustomModifier("ZeroCheck", typeof(GameObject))]
public class ModifierByZeroCheck : IModifier
{
[SerializeField] private bool doSomething;
//関数Modifyを実行するかどうか判定 ノードに含まれているのだけ探索する
public bool IsModified(UnityEngine.Object[] assets)
{
foreach (var asset in assets)
{
// Componetを全て読み込む仕様なので目当てのComponetだけ実行するようにIF文
if (asset as Transform)
{
var obj = asset as Transform;
if (!obj)
continue;
if (obj.root.gameObject.name == obj.gameObject.name && obj.position != Vector3.zero)
{
obj.root.position = new Vector3(0, 0, 0);
Debug.Log("CHANGED POSITION: " + asset.name + " to zero positon");
}
if (obj.root.rotation != Quaternion.identity)
{
obj.root.rotation = Quaternion.identity;
Debug.Log("CHANGED POSITION: " + asset.name + " to zero rotation");
}
}
}
return false;
}
// IsModifiedがtrueだと実行
public void Modify(UnityEngine.Object[] assets)
{
// Do Nothing
}
// Draw inspector gui
public void OnInspectorGUI(Action onValueChanged)
{
EditorGUILayout.HelpBox("親の座標、傾きをすべて0にする", MessageType.Info);
}
}
UnityメニューのWindow→AssetBundleGraph→CreateNodeScript→ModifierScript からテンプレートが生成したものに関数IsModifiedの中身だけ追記した
あとはBuildボタンを押すと処理
自動でPrefabの親を全てサーチして座標、傾きを0に変更してくれる