LoginSignup
2
1

More than 5 years have passed since last update.

AssetBundleGraphToolを使用して自動で親オブジェクトの座標、傾きが0,0,0であるか判定して変更する処理のつくりかた

Last updated at Posted at 2017-08-17

はじめに
AssetBundleGraphToolはAssetBundleを書き出す以外にもいろいろと応用できる便利ツールなのだが情報が少なすぎるので無いよりはましだろうって気持ちで投稿
本人も手探りで触っているので間違っていたら教えてください

登場する専門用語
AssetBundleGraphTool:Unityが用意したアセットツール これを利用すると視覚的にわかりやすい自動化ツールをつくれる 
ノード:AssetBundleGraphで使用するブロック部の呼称

やり方
1.「UnityAssetBundleGraph」をもってくる
ダウンロード先はこちら

2.解凍してプロジェクトフォルダに配置
今回使用したのは1.3
「UnityEngine.AssetBundleGraph」の名前は変更するとエラーが出る

↓以下Unityでの操作↓
3.AssetBundleを開く
メニューのWindow→AssetBundleGraph→OpenGraohEditor

4.GameObjectを読み込むノードを配置
LoadAssets→LoadBySearchFilter
設定は下の画像
1.JPG

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の中身だけ追記した

スクリプトをつくったら下画像のように設定
2.JPG

あとはBuildボタンを押すと処理
自動でPrefabの親を全てサーチして座標、傾きを0に変更してくれる

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1