Last active
August 29, 2015 14:25
-
-
Save whaison/a9d6a6c0c857a391cfab to your computer and use it in GitHub Desktop.
Ef_pngToParticleAnimation2.cs(ParticleSystem Maker) with FindAllPropatiesAndWrite.cs(Prefab YAML EDITOR)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using UnityEngine; | |
using UnityEditor; | |
using UnityEditor.Animations; | |
using System.Collections; | |
using System.Collections.Generic; | |
using System.IO; | |
using System.Text.RegularExpressions; | |
using System.Linq; | |
//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>(); | |
List<GameObject> PrefabRefList = new List<GameObject>(); | |
GameObject ef_InstanceAttachedPrefab; | |
GameObject ef_prefab; | |
Material myMaterial; | |
private int selGridInt = 0; | |
private string[] selCaptions = new string[] { | |
"attack", | |
"skill", | |
}; | |
string AttackOrSkill; | |
int countTime; | |
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 ("01 : png To Particle Animation", GUILayout.Width (300f))) { | |
pngToParticleAnimation (); | |
countTime = 0; | |
} | |
countTime++; | |
GUILayout.Label ("Counting..."+countTime.ToString(), EditorStyles.boldLabel); | |
/* | |
GUILayout.Space (20f); | |
if (GUILayout.Button ("02 : prefab Particle System YAML EDIT", GUILayout.Width (300f))) { | |
SlowStart (); | |
} | |
GUILayout.Space (20f); | |
if (GUILayout.Button ("03 : set parent prefab ", GUILayout.Width (300f))) { | |
setPrefabAndDelete(); | |
} | |
*/ | |
//setPrefabAndDelete(){ | |
} | |
//bool bool_pngToParticleAnimation=false; | |
//bool bool_SlowStart=false; | |
//bool bool_setPrefabAndDelete=false; | |
void pngToParticleAnimation(){ | |
Sprite2dGameObjectRefList = new List<GameObject>(); | |
PrefabRefList = new List<GameObject>(); | |
//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] + "_particle_mat.mat"; | |
Debug.Log ("--------------MaterialPath="+MaterialPath+"---------------------"); | |
if (File.Exists (MaterialPath)) { | |
myMaterial= AssetDatabase.LoadAssetAtPath(MaterialPath, typeof(Material)) as Material; | |
} else { | |
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); | |
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; | |
//プレファブをインスタンシエイト | |
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> (); | |
PrefabRefList.Add(sprite_prefab); | |
//プレファブをインスタンシエイト | |
GameObject spriteInstantiateAttachePrefab=PrefabUtility.InstantiateAttachedAsset (sprite_prefab)as GameObject; | |
spriteInstantiateAttachePrefab.name = sprit2dName; | |
//シーンセーブ | |
EditorApplication.SaveScene(); | |
//プレハブをApplyする | |
PrefabUtility.ReplacePrefab (spriteInstantiateAttachePrefab, sprite_prefab, ReplacePrefabOptions.ConnectToPrefab); | |
//Assetをリロードする。 | |
AssetDatabase.Refresh(ImportAssetOptions.ForceUpdate); | |
//リストに参照を保存。 | |
Sprite2dGameObjectRefList.Add (spriteInstantiateAttachePrefab); | |
} | |
//シーンセーブ | |
EditorApplication.SaveScene(); | |
//プレハブをApplyする | |
PrefabUtility.ReplacePrefab (ef_InstanceAttachedPrefab, ef_prefab, ReplacePrefabOptions.ConnectToPrefab); | |
//Assetをリロードする。 | |
AssetDatabase.Refresh(ImportAssetOptions.ForceUpdate); | |
//Invoke("SlowStart",2); | |
SlowStart (); | |
} | |
public void SlowStart(){ | |
for (int i = 0; i < PrefabRefList.Count; i++) | |
{ | |
PassObject Obj=new PassObject(); | |
switch(i){ | |
case 0: | |
//rectBox = new Rect (128,128, 128, 128);break; | |
Obj.tilesX="2"; | |
Obj.tilesY="2"; | |
Obj.frameOverTime="0.25"; | |
break; | |
case 1: | |
//rectBox = new Rect (0,128, 128, 128);break; | |
Obj.tilesX="2"; | |
Obj.tilesY="2"; | |
Obj.frameOverTime="0"; | |
break; | |
case 2: | |
//rectBox = new Rect (128,0, 128, 128);break; | |
Obj.tilesX="2"; | |
Obj.tilesY="2"; | |
Obj.frameOverTime="0.75"; | |
break; | |
case 3: | |
//rectBox = new Rect (64,64, 64, 64);break; | |
Obj.tilesX="4"; | |
Obj.tilesY="4"; | |
Obj.frameOverTime="0.5"; | |
break; | |
case 4: | |
//rectBox = new Rect (0,64, 64, 64);break; | |
Obj.tilesX="4"; | |
Obj.tilesY="4"; | |
Obj.frameOverTime="0.5625"; | |
break; | |
case 5: | |
//rectBox = new Rect (64,0, 64, 64);break; | |
Obj.tilesX="4"; | |
Obj.tilesY="4"; | |
Obj.frameOverTime="0.75"; | |
break; | |
case 6: | |
//rectBox = new Rect (0, 0, 64, 64);break; | |
Obj.tilesX="4"; | |
Obj.tilesY="4"; | |
Obj.frameOverTime="0.8125"; | |
break; | |
default: | |
break; | |
} | |
FindAllPropatiesAndWrite.InitSaveOption(Obj,PrefabRefList[i]); | |
} | |
setPrefabAndDelete (); | |
} | |
public void setPrefabAndDelete(){ | |
for (int i = 0; i < Sprite2dGameObjectRefList.Count; i++) | |
{ | |
//親を設定 | |
Sprite2dGameObjectRefList[i].transform.parent = ef_InstanceAttachedPrefab.transform; | |
} | |
for (int d = 0; d < PrefabRefList.Count; d++){ | |
//いらないプレファブ消す | |
string AssetPathStr=AssetDatabase.GetAssetPath(PrefabRefList[d]); | |
AssetDatabase.DeleteAsset (AssetPathStr); | |
//ef_Dir | |
} | |
//シーンセーブ | |
EditorApplication.SaveScene(); | |
//プレハブをApplyする | |
PrefabUtility.ReplacePrefab (ef_InstanceAttachedPrefab, ef_prefab, ReplacePrefabOptions.ConnectToPrefab); | |
//Assetをリロードする。 | |
AssetDatabase.Refresh(ImportAssetOptions.ForceUpdate); | |
bool bool_pngToParticleAnimation=true; | |
bool bool_SlowStart=false; | |
bool bool_setPrefabAndDelete=false; | |
} | |
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