using UnityEngine; | |
using UnityEditor; | |
using UnityEditor.Animations; | |
using System.Collections; | |
using System.Collections.Generic; | |
using System.IO; | |
using System.Text.RegularExpressions; | |
using System.Linq; | |
using DMM.MB.Battle.Effect; | |
//public class SdDataToEffectPrefabMaker : MonoBehaviour { | |
public class Ef_pngToParticleAnimation : EditorWindow { | |
//string FolderName="sd_0000_name"; | |
//Object SelectionObject; | |
TextAsset text; | |
Texture inputTexture; | |
Texture outTexture; | |
TextureImporter textureImporter; | |
string[] DirArr; | |
string[] SDCharaNameArr; | |
string[] Fix_DirArr; | |
string Fix_ef_png_filename; | |
string[] Fix_CharaNameArr; | |
string Fix_ef_charaName; | |
string CharaFolderName; | |
string CreatedFolder; | |
string ef_Dir; | |
string DirStr; | |
string ef_Id ; | |
string ef_charaId; | |
string ef_charaNam; | |
string ef_charaName; | |
string ef_png_filename; | |
AnimatorStateMachine BaseLayerStateMachine; | |
UnityEditor.Animations.AnimatorController AnimatorControllerRef; | |
AnimationClip AnimationClipRef; | |
List<GameObject> Sprite2dGameObjectRefList = new List<GameObject>(); | |
Material myMaterial; | |
private int selGridInt = 0; | |
private string[] selCaptions = new string[] { | |
"attack", | |
"skill", | |
}; | |
string AttackOrSkill; | |
void OnGUI () | |
{ | |
GUILayout.Label ("png To Particle Animation", EditorStyles.boldLabel); | |
/* | |
GUILayout.Space (10f); | |
csvAsset = EditorGUILayout.ObjectField ("CSV Text", csvAsset, typeof(TextAsset), false) as TextAsset; | |
if (csvAsset == null) { | |
GUILayout.Label ("Set CSV Data. Extension need .txt"); | |
} | |
GUILayout.Space (10f); | |
modelAsset = EditorGUILayout.ObjectField ("3D Model", modelAsset, typeof(GameObject), false) as GameObject; | |
if (modelAsset == null) { | |
GUILayout.Label ("Set FBX or other 3D model object."); | |
} | |
*/ | |
GUILayout.Space (10f); | |
selGridInt = GUILayout.SelectionGrid(selGridInt, selCaptions, 2, "Toggle"); | |
GUILayout.Space (10f); | |
inputTexture = EditorGUILayout.ObjectField ("png", inputTexture, typeof(Texture), false) as Texture; | |
if (inputTexture == null) { | |
GUILayout.Label ("Set png or other image object."); | |
} | |
//go = Selection.activeGameObject; | |
//FolderName = go.name; | |
//GUILayout.Label ("SD Data Folder To Effect Folder and Prefab", EditorStyles.boldLabel); | |
GUILayout.Space (20f); | |
if (GUILayout.Button ("png To Particle Animation", GUILayout.Width (300f))) { | |
pngToParticleAnimation (); | |
} | |
} | |
void pngToParticleAnimation(){ | |
//foreach (Object selectedObject in Selection.objects) { | |
// Debug.Log ("Crate selectedObject=" + selectedObject); | |
// SelectionObject = selectedObject; | |
// FolderName = SelectionObject.name; | |
//} | |
AttackOrSkill = selCaptions [selGridInt]; | |
Debug.Log ("AttackOrSkill=" + AttackOrSkill); | |
//string DirStr = AssetDatabase.GetAssetPath (texture); | |
DirStr = AssetDatabase.GetAssetPath (inputTexture); | |
Debug.Log ("DirStr=" + DirStr); | |
//Close (); | |
Debug.Log ("------MakeFolderStart------"); | |
string[] DirArr; | |
DirArr = DirStr.Split ("/" [0]); | |
string buildDir = DirArr [0]; | |
for (int i = 1; i < DirArr.Length - 1; i++) { | |
buildDir = buildDir + "/" + DirArr [i]; | |
} | |
ef_Dir = buildDir; | |
Debug.Log ("ef_Dir=" + ef_Dir); | |
ef_png_filename = DirArr [DirArr.Length - 1]; | |
Debug.Log ("ef_png_filename=" + ef_png_filename);//ef_60110_gina_png.png | |
string[] ef_png_filename_arr; | |
ef_png_filename_arr = ef_png_filename.Split ("_" [0]); | |
ef_Id = ef_png_filename_arr [1]; | |
Debug.Log ("ef_Id=" + ef_Id); | |
ef_charaId = ef_png_filename_arr [0] + "_" + ef_png_filename_arr [1]; | |
Debug.Log ("ef_charaId=" + ef_charaId); | |
ef_charaName = ef_png_filename_arr [0] + "_" + ef_png_filename_arr [1] + "_" + ef_png_filename_arr [2]+"_"+AttackOrSkill; | |
Debug.Log ("ef_charaName=" + ef_charaName); | |
// Create a simple material asset | |
myMaterial = new Material (Shader.Find("Mobile/Particles/Additive")); | |
//myMaterial.SetTexture ("Particle Texture",inputTexture); | |
myMaterial.mainTexture = inputTexture; | |
string MaterialPath = ef_Dir +"/"+ ef_png_filename_arr [0] + "_" + ef_png_filename_arr [1] + "_" + ef_png_filename_arr [2] + "_mat.mat"; | |
Debug.Log ("--------------MaterialPath="+MaterialPath+"---------------------"); | |
AssetDatabase.CreateAsset(myMaterial,MaterialPath); | |
//------------texture2d----------------------------------------------- | |
//texture2d.mo | |
//TextureImporterSettings textureImporterSettings; | |
//TextureImporter.SetTextureSettings (textureImporterSettings); | |
//TextureImporter.textureType = TextureImporterType.Sprite; | |
string texturePath = DirStr; | |
//TextureImporter importer | |
textureImporter = TextureImporter.GetAtPath (texturePath) as TextureImporter; | |
textureImporter.textureType = TextureImporterType.Sprite; | |
textureImporter.spriteImportMode = SpriteImportMode.Multiple; | |
textureImporter.filterMode = FilterMode.Point; | |
EditorUtility.SetDirty (textureImporter); | |
AssetDatabase.ImportAsset (texturePath, ImportAssetOptions.ForceUpdate); | |
//Texture texture | |
Texture outTexture = AssetDatabase.LoadAssetAtPath (texturePath, typeof(Texture)) as Texture; | |
//importer.spritePixelsPerUnit = Mathf.Max (texture.width / horizontalCount, texture.height / verticalCount); | |
textureImporter.spritePixelsPerUnit = 1.0f; | |
textureImporter.spritesheet = CreateSpriteMetaDataArray (outTexture); | |
EditorUtility.SetDirty (textureImporter); | |
AssetDatabase.ImportAsset (texturePath, ImportAssetOptions.ForceUpdate); | |
//------------texture2d----------------------------------------------- | |
sprite2dInstanciate (); | |
} | |
SpriteMetaData[] CreateSpriteMetaDataArray (Texture texture) | |
{ | |
List<SpriteMetaData> SpriteMetaDataList = new List<SpriteMetaData>(); | |
for (int i = 0; i < 6+1; i++) { | |
string namestr = texture.name + "_" + i; | |
Rect rectBox = new Rect (0, 0, 0, 0); | |
switch(i){ | |
case 0: | |
rectBox = new Rect (128,128, 128, 128);break; | |
case 1: | |
rectBox = new Rect (0,128, 128, 128);break; | |
case 2: | |
rectBox = new Rect (128,0, 128, 128);break; | |
case 3: | |
rectBox = new Rect (64,64, 64, 64);break; | |
case 4: | |
rectBox = new Rect (0,64, 64, 64);break; | |
case 5: | |
rectBox = new Rect (64,0, 64, 64);break; | |
case 6: | |
rectBox = new Rect (0, 0, 64, 64);break; | |
default: | |
break; | |
} | |
//rect = new Rect (spriteWidth * x, texture.height - spriteHeight * (y + 1), spriteWidth, spriteHeight); | |
SpriteMetaData spriteMetaData = new SpriteMetaData (); | |
spriteMetaData.name=namestr; | |
spriteMetaData.rect = rectBox; | |
SpriteMetaDataList.Add (spriteMetaData); | |
} | |
return SpriteMetaDataList.ToArray (); | |
} | |
void sprite2dInstanciate(){ | |
Debug.Log ("--------sprite2dInstanciate-----------"); | |
//string[] TextureDependencies = AssetDatabase.GetDependencies( DirStr); | |
// Create | |
//GameObject gameObject = new GameObject(); | |
string ef_instanceName = ef_charaName; | |
string ef_gameObjectName=ef_instanceName+".prefab"; | |
//AssetDatabase.CreateAsset(gameObject, CreateEffectFolderName+"/"+EffectFolderName+"/"+gameObjectName); | |
//string ef_gameObjectPath = ef_Dir+ "/" + ef_gameObjectName; | |
//################################################################################################ | |
string ef_gameObjectPath = getSavePath (ef_instanceName, "", ".prefab"); | |
Debug.Log ("ef_gameObjectPath getSavePath = "+ef_gameObjectPath); | |
Fix_DirArr = ef_gameObjectPath.Split ("/" [0]); | |
Fix_ef_png_filename = Fix_DirArr [Fix_DirArr.Length - 1]; | |
Fix_CharaNameArr= Fix_ef_png_filename.Split ("." [0]); | |
Fix_ef_charaName = Fix_CharaNameArr [0]; | |
ef_instanceName = Fix_ef_charaName; | |
ef_gameObjectName=ef_instanceName+".prefab"; | |
//################################################################################################ | |
GameObject ef_Instance = EditorUtility.CreateGameObjectWithHideFlags (ef_gameObjectName, HideFlags.HideInHierarchy); | |
//PrefabUtility.CreateEmptyPrefab (fe_gameObjectPath, ef_Instance); | |
GameObject ef_prefab=PrefabUtility.CreatePrefab (ef_gameObjectPath, ef_Instance); | |
//AddComponent | |
BasicEffectController ef_basicEffectController =ef_prefab.AddComponent<BasicEffectController> (); | |
ef_basicEffectController.useEndOfTime = true; | |
ef_basicEffectController.endOfTime = 1.5f; | |
//プレファブをインスタンシエイト | |
GameObject ef_InstanceAttachedPrefab=PrefabUtility.InstantiateAttachedAsset (ef_prefab)as GameObject; | |
ef_InstanceAttachedPrefab.name = ef_instanceName; | |
//プレハブをApplyする | |
PrefabUtility.ReplacePrefab (ef_InstanceAttachedPrefab, ef_prefab, ReplacePrefabOptions.ConnectToPrefab); | |
//Assetをリロードする。 | |
AssetDatabase.Refresh(ImportAssetOptions.ForceUpdate); | |
/**/ | |
//GameObject ef_Instance = EditorUtility.CreateGameObjectWithHideFlags (ef_instanceName, HideFlags.None); | |
//Debug.Log ("--------TextureDependencies-----="+TextureDependencies.Length+""); | |
Debug.Log ("--------textureImporter.spritesheet.Length-----------"+textureImporter.spritesheet.Length); | |
for (int i = 0; i < textureImporter.spritesheet.Length; i++) | |
{ | |
string sprit2dName=textureImporter.spritesheet [i].name; | |
Debug.Log ("--------sprit2dName-----------"+sprit2dName); | |
GameObject sprite_Instance = EditorUtility.CreateGameObjectWithHideFlags (sprit2dName, HideFlags.HideInHierarchy); | |
sprite_Instance.name = sprit2dName; | |
string sprit2dprefabPath=ef_Dir+ "/" + sprit2dName+"_prefab.prefab"; | |
//PrefabUtility.CreateEmptyPrefab (fe_gameObjectPath, ef_Instance); | |
//プレファブ作る | |
GameObject sprite_prefab=PrefabUtility.CreatePrefab (sprit2dprefabPath, sprite_Instance); | |
//SpriteRenderer sprite_SpriteRenderer = sprite_prefab.AddComponent<SpriteRenderer> (); | |
ParticleSystemRenderer sprite_ParticleSystemRenderer =sprite_prefab.AddComponent<ParticleSystemRenderer> (); | |
sprite_ParticleSystemRenderer.material = myMaterial; | |
ParticleSystem sprite_ParticleSystem =sprite_prefab.AddComponent<ParticleSystem> (); | |
/* | |
//string sprite2dAssetPass=ef_Dir+ "/" + sprit2dName; | |
string sprite2dAssetPass=ef_Dir+"/"+ef_png_filename; | |
Debug.Log ("sprite2dAssetPass= "+sprite2dAssetPass+" の中身は"); | |
Sprite mysprite= seachAseet (sprite2dAssetPass, sprit2dName) as Sprite; | |
Debug.Log ("mysprite="+mysprite); | |
sprite_SpriteRenderer.sprite=mysprite; | |
//マテリアルを設定 | |
sprite_SpriteRenderer.material = myMaterial; | |
*/ | |
Component[] sprite_ParticleSystem_compo=sprite_ParticleSystem.gameObject.GetComponents<Component>(); | |
Debug.Log("---------sprite_ParticleSystem_compo.Length----------"+sprite_ParticleSystem_compo.Length); | |
for(int p = 0; p < sprite_ParticleSystem_compo.Length; p++) | |
{ | |
Debug.Log("----sprite_ParticleSystem_comp["+p+"]"+sprite_ParticleSystem_compo[p].name+"---"); | |
} | |
/* | |
switch(i){ | |
case 0: | |
rectBox = new Rect (128,128, 128, 128);break; | |
case 1: | |
rectBox = new Rect (0,128, 128, 128);break; | |
case 2: | |
rectBox = new Rect (128,0, 128, 128);break; | |
case 3: | |
rectBox = new Rect (64,64, 64, 64);break; | |
case 4: | |
rectBox = new Rect (0,64, 64, 64);break; | |
case 5: | |
rectBox = new Rect (64,0, 64, 64);break; | |
case 6: | |
rectBox = new Rect (0, 0, 64, 64);break; | |
default: | |
break; | |
} | |
*/ | |
//プレファブをインスタンシエイト | |
GameObject spriteInstantiateAttachePrefab=PrefabUtility.InstantiateAttachedAsset (sprite_prefab)as GameObject; | |
spriteInstantiateAttachePrefab.name = sprit2dName; | |
//親を設定 | |
spriteInstantiateAttachePrefab.transform.parent = ef_InstanceAttachedPrefab.transform; | |
//リストに参照を保存。 | |
Sprite2dGameObjectRefList.Add (spriteInstantiateAttachePrefab); | |
//いらないプレファブ消す | |
AssetDatabase.DeleteAsset (sprit2dprefabPath); | |
//ef_Dir | |
} | |
//プレハブをApplyする | |
PrefabUtility.ReplacePrefab (ef_InstanceAttachedPrefab, ef_prefab, ReplacePrefabOptions.ConnectToPrefab); | |
//Assetをリロードする。 | |
AssetDatabase.Refresh(ImportAssetOptions.ForceUpdate); | |
} | |
public UnityEngine.Object seachAseet (string filepath,string seachName){ | |
UnityEngine.Object MyObject=new UnityEngine.Object();; | |
//Sprite mysprite = UnityEditor.AssetDatabase.LoadAssetsAtPath(sprite2dAssetPass, typeof(Sprite)) as Sprite; | |
UnityEngine.Object[] FolderAssetArr = UnityEditor.AssetDatabase.LoadAllAssetsAtPath (filepath); | |
//UnityEngine.Object[] FolderAssetArr = UnityEditor.AssetDatabase.LoadAllAssetRepresentationsAtPath (sprite2dAssetPass); | |
Debug.Log ("FolderAssetArr.Length="+FolderAssetArr.Length+"です。"); | |
for (int j = 0; j< FolderAssetArr.Length;j++) { | |
string AssetName=FolderAssetArr [j].name; | |
Debug.Log ("AssetName="+AssetName); | |
if (seachName == AssetName) { | |
Debug.Log ("HIT!!!!! seachName="+seachName+" AssetName="+AssetName+"-------OK"); | |
MyObject = FolderAssetArr [j]; | |
} | |
} | |
/* | |
if (MyObject == null) { | |
MyObject=new UnityEngine.Object(); | |
Debug.Log("エラー発生です。"); | |
} | |
*/ | |
return MyObject; | |
} | |
string[] labels = {"Data", "ScriptableObject"}; | |
void CreateAnimationClip(string filename){ | |
string path = getSavePath (filename,"",".anim"); | |
AnimationClip newClip = new AnimationClip(); | |
newClip.name = name; | |
AssetDatabase.CreateAsset(newClip, path); | |
// add label | |
AnimationClip obj = AssetDatabase.LoadAssetAtPath (path, typeof(AnimationClip)) as AnimationClip; | |
//sobj = AssetDatabase.LoadAssetAtPath (path, typeof(ScriptableObject)) as ScriptableObject; | |
AssetDatabase.SetLabels (obj, labels); | |
EditorUtility.SetDirty (obj); | |
AnimationClipRef = obj; | |
} | |
string getSavePath (string filename,string folderName,string filetype) | |
{ | |
string undot_filetype=filetype.Substring (1); | |
//string under_filetype="_"+undot_filetype; | |
Debug.Log("------- getSavePath ----- filename="+filename); | |
//string objectName = selectedObject.name; | |
//string objectName = selectedObject.name; | |
string objectName = filename; | |
//string objectName = selectedObject.name+"_AnimationClipEventData"; | |
if (filetype == ".asset") { | |
//objectName = selectedObject.name+"_"+AnimationNameStr+"_"+AnimationClipEventNameStr; | |
} | |
if (filetype == ".anim") { | |
//objectName =AnimationNameStr+"_event"; | |
} | |
//Debug.Log("------- getSavePath ----- objectName="+objectName); | |
//string dirPath = Path.GetDirectoryName (AssetDatabase.GetAssetPath (selectedObject)); | |
//////////// | |
string dirPath = ef_Dir; | |
//string dirPath = CharaDir+"/AnimationClipEventData"; | |
////////// | |
//string path = string.Format ("{0}/{1}.asset", dirPath, objectName); | |
//string path = dirPath+"/"+objectName+".asset"; | |
string path = dirPath+"/"+objectName+"_1"+"_"+undot_filetype+filetype; | |
Debug.Log ("------ getSavePath -----path="+path); | |
//string AnimationEventDir = dirPath + "/AnimationEvent"; | |
string MakeDir; | |
if (folderName == "") { | |
MakeDir = dirPath; | |
} else { | |
MakeDir = dirPath + "/" + folderName; | |
if (AssetDatabase.IsValidFolder (MakeDir)) { | |
Debug.Log (MakeDir + " ありました!"); | |
} else { | |
Debug.Log (MakeDir + " ないのでつくりますです!"); | |
string guid = AssetDatabase.CreateFolder (dirPath, folderName); | |
string newFolderPath = AssetDatabase.GUIDToAssetPath (guid); | |
Debug.Log (newFolderPath + " = newFolderPath 作りました!"); | |
Debug.Log (MakeDir + " = MakeDir 作りました!"); | |
} | |
//path= MakeDir+"/"+objectName+".asset"; | |
path= MakeDir+"/"+objectName+"_1"+"_"+undot_filetype+filetype; | |
} | |
Debug.Log ("------ getSavePath -----path="+path); | |
if (File.Exists (path)) { | |
Debug.Log ("------ getSavePath -----path=" + path + "あったので"); | |
for (int i = 1;; i++) { | |
//path = string.Format ("{0}/{1}({2}).asset", dirPath, objectName, i); | |
path = MakeDir + "/" + objectName + "_" + i + "_" + undot_filetype + filetype; | |
Debug.Log ("------ getSavePath -----path=" + path + "足しました。"); | |
if (!File.Exists (path)) { | |
break; | |
} | |
} | |
} else { | |
Debug.Log ("------ getSavePath -----path=" + path + "なかったのでそのままです。"); | |
} | |
Debug.Log("------ getSavePath --------- path="+path); | |
return path; | |
} | |
public void templateCode() | |
{ | |
} | |
/// <summary> | |
/// 指定したパスにディレクトリが存在しない場合 | |
/// すべてのディレクトリとサブディレクトリを作成します | |
/// </summary> | |
public System.IO.DirectoryInfo SafeCreateDirectory(string path,string foldername) | |
{ | |
string dirpathName = path +"/"+ foldername; | |
if (Directory.Exists(dirpathName)) | |
{ | |
Debug.Log ("そのフォルダはすでに存在してます。"); | |
return null; | |
} | |
return Directory.CreateDirectory(dirpathName); | |
} | |
//////////////////////////////////////////////////////////////////////////////// | |
#region Static | |
/// <summary> | |
/// Open the tool window | |
/// </summary> | |
[MenuItem("Tools/Effect/png To Particle Animation")] | |
static public void OpenWindow3 () | |
{ | |
EditorWindow.GetWindow<Ef_pngToParticleAnimation> (true, "png To particle", true); | |
} | |
#endregion | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment