diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/UnityPath.cs b/Assets/UniGLTF/Runtime/UniGLTF/IO/UnityPath.cs index c7cffbb75..70876d1f5 100644 --- a/Assets/UniGLTF/Runtime/UniGLTF/IO/UnityPath.cs +++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/UnityPath.cs @@ -22,7 +22,7 @@ namespace UniGLTF { #if UNITY_EDITOR #region UnityPath - + public string Value { get; @@ -60,7 +60,7 @@ namespace UniGLTF var packageInfo = GetPackageInfo(packageDirectory); if (packageInfo == null) return false; - + // Local and Embedded packages are editable if (packageInfo.source == PackageSource.Local || packageInfo.source == PackageSource.Embedded) return true; @@ -87,7 +87,7 @@ namespace UniGLTF return GetPackageInfo(Path.GetDirectoryName(path)); } - + /// /// List of packages loaded in unity /// @@ -147,18 +147,18 @@ namespace UniGLTF return !string.IsNullOrEmpty(Value); } } - + public PathType PathType { get { if (string.IsNullOrEmpty(Value)) return PathType.Unsuported; - + var directory = Path.GetDirectoryName(Value); if (string.IsNullOrEmpty(directory)) return PathType.Unsuported; var rootDirectoryName = directory.Split(Path.DirectorySeparatorChar); - + switch (rootDirectoryName[0]) { case "Assets": @@ -279,7 +279,14 @@ namespace UniGLTF /// public static UnityPath FromUnityPath(string unityPath) { - if (String.IsNullOrEmpty(unityPath) || unityPath == ".") + if (unityPath == null) + { + return new UnityPath + { + Value = null + }; + } + if (unityPath == "" || unityPath == ".") { return new UnityPath { @@ -312,7 +319,7 @@ namespace UniGLTF { throw new NotImplementedException(); } - return Path.GetFullPath(Value).Replace("\\", "/"); + return Path.GetFullPath(Value == "" ? "." : Value).Replace("\\", "/"); } } @@ -343,7 +350,7 @@ namespace UniGLTF { return new UnityPath(""); } - + if (fullPath.FastStartsWith($"{BaseFullPath}/Assets")) { return new UnityPath(fullPath.Substring(BaseFullPath.Length + 1)); @@ -434,7 +441,7 @@ namespace UniGLTF { if (IsNull) { - throw new NotImplementedException(); + return; } if (HasParent) @@ -519,7 +526,7 @@ namespace UniGLTF } #endif } - + public enum PathType { Assets, diff --git a/Assets/UniGLTF/Tests/UniGLTF/UniGLTFTests.cs b/Assets/UniGLTF/Tests/UniGLTF/UniGLTFTests.cs index c424eb7f7..14692ee7f 100644 --- a/Assets/UniGLTF/Tests/UniGLTF/UniGLTFTests.cs +++ b/Assets/UniGLTF/Tests/UniGLTF/UniGLTFTests.cs @@ -161,10 +161,23 @@ namespace UniGLTF [Test] public void UnityPathTest() { + // 不正なパス + var nullPath = UnityPath.FromUnityPath(null); + Assert.IsTrue(nullPath.IsNull); + Assert.IsFalse(nullPath.IsUnderWritableFolder); + Assert.AreEqual(UnityPath.FromUnityPath(null), nullPath); + + // Application.dataPath のひとつ上 + var dataPath = UnityPath.FromUnityPath(""); + Assert.IsFalse(dataPath.IsNull); + Assert.IsFalse(dataPath.IsUnderWritableFolder); + Assert.AreNotEqual(nullPath, dataPath); + + // Application.dataPath のひとつ上 var root = UnityPath.FromUnityPath("."); Assert.IsFalse(root.IsNull); Assert.IsFalse(root.IsUnderWritableFolder); - Assert.AreEqual(UnityPath.FromUnityPath("."), root); + Assert.AreEqual(dataPath, root); var assets = UnityPath.FromUnityPath("Assets"); Assert.IsFalse(assets.IsNull); @@ -178,7 +191,7 @@ namespace UniGLTF Assert.IsTrue(assetsChildHoge.IsUnderWritableFolder); Assert.IsTrue(assetsHoge.IsUnderWritableFolder); Assert.AreEqual(assetsChildHoge, assetsHoge); - + var packages = UnityPath.FromUnityPath("Packages"); Assert.IsFalse(packages.IsNull); @@ -192,7 +205,7 @@ namespace UniGLTF Assert.IsFalse(packages.IsUnderWritableFolder); Assert.IsFalse(packagesNUnit.IsUnderWritableFolder); Assert.AreEqual(packagesChildNUnit, packagesNUnit); - + var packagesChildHoge = packages.Child("Hoge"); var packagesHoge = UnityPath.FromUnityPath("Packages/Hoge"); Assert.IsFalse(packagesChildHoge.IsUnderWritableFolder);