diff --git a/Assets/Scenes/FolderPicker.cs b/Assets/Scenes/FolderPicker.cs new file mode 100644 index 0000000..46012ce --- /dev/null +++ b/Assets/Scenes/FolderPicker.cs @@ -0,0 +1,115 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.InteropServices; +using UnityEngine; + +public static class FolderPicker +{ + + + public static string GetPath() + { + OpenDialogDir ofn2 = new OpenDialogDir(); + + ofn2.pszDisplayName = new string(new char[2000]); + ofn2.lpszTitle = "请选择至 package\\mu3_Data\\StreamingAssets\\assets"; + // ofn2.pidlRoot = IntPtr.Zero; + IntPtr pidlPtr = DllOpenFileDialog.SHBrowseForFolder(ofn2); + // return ""; + + char[] charArray = new char[2000]; + for (int i = 0; i < 2000; i++) + charArray[i] = '\0'; + + DllOpenFileDialog.SHGetPathFromIDList(pidlPtr, charArray); + string fullDirPath = new String(charArray); + fullDirPath = fullDirPath.Substring(0, fullDirPath.IndexOf('\0')); + + fullDirPath += "\\"; + + Debug.Log(fullDirPath); + return fullDirPath; + } + + public static string GetFilePath() + { + string filepath = ""; + OpenDialogFile pth = new OpenDialogFile(); + pth.structSize = Marshal.SizeOf(pth); + pth.filter = "All files (*.*)|*.*"; + pth.file = new string(new char[256]); + pth.maxFile = pth.file.Length; + pth.fileTitle = new string(new char[64]); + pth.maxFileTitle = pth.fileTitle.Length; + pth.initialDir = Application.dataPath; //默认路径 + pth.title = "请选择文件"; + pth.defExt = ""; + pth.flags = 0x00080000 | 0x00001000 | 0x00000800 | 0x00000200 | 0x00000008; + if (DllOpenFileDialog.GetSaveFileName(pth)) + // if (DllOpenFileDialog.GetOpenFileName(pth)) + { + filepath = pth.file; //选择的文件路径; + Debug.Log(filepath); + } + + return filepath; + } + +} + +[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] +public class OpenDialogFile +{ + public int structSize = 0; + public IntPtr dlgOwner = IntPtr.Zero; + public IntPtr instance = IntPtr.Zero; + public String filter = null; + public String customFilter = null; + public int maxCustFilter = 0; + public int filterIndex = 0; + public String file = null; + public int maxFile = 0; + public String fileTitle = null; + public int maxFileTitle = 0; + public String initialDir = null; + public String title = null; + public int flags = 0; + public short fileOffset = 0; + public short fileExtension = 0; + public String defExt = null; + public IntPtr custData = IntPtr.Zero; + public IntPtr hook = IntPtr.Zero; + public String templateName = null; + public IntPtr reservedPtr = IntPtr.Zero; + public int reservedInt = 0; + public int flagsEx = 0; +} + +[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] +public class OpenDialogDir +{ + public IntPtr hwndOwner = IntPtr.Zero; + public IntPtr pidlRoot = IntPtr.Zero; + public String pszDisplayName = null; + public String lpszTitle = null; + public UInt32 ulFlags = 0; + public IntPtr lpfn = IntPtr.Zero; + public IntPtr lParam = IntPtr.Zero; + public int iImage = 0; +} + +public class DllOpenFileDialog +{ + [DllImport("Comdlg32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)] + public static extern bool GetOpenFileName([In, Out] OpenDialogFile ofn); + + [DllImport("Comdlg32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)] + public static extern bool GetSaveFileName([In, Out] OpenDialogFile ofn); + + [DllImport("shell32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)] + public static extern IntPtr SHBrowseForFolder([In, Out] OpenDialogDir ofn); + + [DllImport("shell32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)] + public static extern bool SHGetPathFromIDList([In] IntPtr pidl, [In, Out] char[] fileName); +} \ No newline at end of file diff --git a/Assets/Scenes/FolderPicker.cs.meta b/Assets/Scenes/FolderPicker.cs.meta new file mode 100644 index 0000000..c0e2b36 --- /dev/null +++ b/Assets/Scenes/FolderPicker.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: add8a7c7b82cf764f97c8366cdc08527 +timeCreated: 1713283664 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/Main.cs b/Assets/Scenes/Main.cs index 12d85e7..f26a0ac 100644 --- a/Assets/Scenes/Main.cs +++ b/Assets/Scenes/Main.cs @@ -15,9 +15,10 @@ public class Main : MonoBehaviour private GameObject attachment; private RuntimeAnimatorController originAnimator; private SkinnedMeshRenderer charaFaceRender; + private MotionEffectManager charaMotion; private int faceOverride = 0; - private string basePath = "F:/Ongeki_Unity/ab/"; + private string basePath; public Dictionary> charaAssetsNames = new Dictionary>(); public Dictionary> weaponAssetsNames = new Dictionary>(); public Dictionary> attachmentAssetsNames = new Dictionary>(); @@ -28,6 +29,8 @@ public class Main : MonoBehaviour void Start() { + basePath = FolderPicker.GetPath(); + loadCommonAssets(); loadCharaCSV(); loadWeaponCSV(); @@ -117,9 +120,15 @@ public class Main : MonoBehaviour var assetNames = new List(); charaAssetsNames.TryGetValue(charaName, out assetNames); loadPrefab(charaName, assetNames, ref chara); + if (charaWeapon[charaName] != null) loadWeapon(charaWeapon[charaName]); originAnimator = chara.GetComponent().runtimeAnimatorController; charaFaceRender = chara.GetComponentsInChildren()[1]; + + charaMotion = chara.GetComponent(); + charaMotion.isAttached = true; + charaMotion.attachmentMotionIndex = 0; + charaMotion.initialize(); } #endregion @@ -384,6 +393,7 @@ public class Main : MonoBehaviour { setState(1); if (i == 1 || i == 2 || i == 3) setFace(1); + //if (i == 0 || i == 1 || i == 2 || i == 3) charaMotion.TriggerEffect("StartEffect_attack_a_001"); string[] names = { "Attack_A", "Attack_A_002", @@ -478,22 +488,7 @@ public class Main : MonoBehaviour t.isOn = !t.isOn; } - - - - - - - if (Input.GetMouseButtonDown(1)) - { - - //MotionEffectManager mem = chara.GetComponent(); - //mem.isAttached = true; - //mem.attachmentMotionIndex = 0; - //mem.initialize(); - //mem.TriggerEffect("StartEffect_attack_c_003"); - - } + // if (Input.GetMouseButtonDown(0)) { } } void LateUpdate() diff --git a/Assets/icon.png b/Assets/icon.png new file mode 100644 index 0000000..e915c33 Binary files /dev/null and b/Assets/icon.png differ diff --git a/Assets/icon.png.meta b/Assets/icon.png.meta new file mode 100644 index 0000000..1d27688 --- /dev/null +++ b/Assets/icon.png.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: db03af20c99b3cc478aea1152a0cd2bd +timeCreated: 1713282190 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset index d6f4e49..9c8a188 100644 Binary files a/ProjectSettings/ProjectSettings.asset and b/ProjectSettings/ProjectSettings.asset differ