Ejemplo n.º 1
0
        public void ExportUsdz(string filePath, bool deleteUsdDirectory)
        {
            InitUsd.Initialize();

            var currentDir   = Directory.GetCurrentDirectory();
            var usdFileName  = Path.GetFileName(filePath);
            var usdzFileName = Path.GetFileNameWithoutExtension(usdFileName) + ".usdz";

            string usdzDirectroy;

            if (string.IsNullOrEmpty(this.exportDirectory))
            {
                usdzDirectroy = currentDir;
            }
            else
            {
                usdzDirectroy = Path.GetFullPath(this.exportDirectory);
            }
            var usdzFilePath = Path.Combine(usdzDirectroy, usdzFileName);

            try
            {
                // 画像の検索パスを合わせるためにカレントディレクトリを変更する
                // 後で戻し忘れるとUnityが壊れるので注意
                Directory.SetCurrentDirectory(Path.GetDirectoryName(filePath));

                var assetPath = new SdfAssetPath(usdFileName);
                var success   = UsdCs.UsdUtilsCreateNewARKitUsdzPackage(assetPath, usdzFilePath);
                if (!success)
                {
                    Debug.LogError("usdzファイルの出力に失敗しました");
                    return;
                }

                Debug.Log($"出力完了: '{usdzFilePath}'");
            }
            finally
            {
                // 変更していたディレクトリを戻す
                Directory.SetCurrentDirectory(currentDir);

                if (deleteUsdDirectory)
                {
                    var d = Path.GetDirectoryName(filePath);
                    // 違うディレクトリを消してしまうとやばいのでチェック
                    if (Path.GetFileName(d).StartsWith("temp-"))
                    {
                        var di = new DirectoryInfo(d);
                        di.Delete(true);
                    }
                }
            }
        }
Ejemplo n.º 2
0
        protected override void EndRecording(RecordingSession session)
        {
            context.scene.EndTime = session.recorderTime * session.settings.FrameRate;
            context.scene.Save();
            context.scene.Close();

            if (Settings.ExportFormat == UsdRecorderSettings.Format.USDZ)
            {
                try
                {
                    Directory.SetCurrentDirectory(usdzTemporaryDir.FullName);
                    var assetPath = new SdfAssetPath(usdcFileName);
                    var success   = UsdCs.UsdUtilsCreateNewARKitUsdzPackage(assetPath, usdzFileName);

                    if (!success)
                    {
                        Debug.LogError("Couldn't export to the usdz file: " + usdzFilePath);
                        return;
                    }

                    // needed if we export into temp folder first
                    File.Copy(usdzFileName, usdzFilePath, overwrite: true);
                }
                finally
                {
                    // Clean up temp files.
                    Directory.SetCurrentDirectory(currentDir);
                    if (usdzTemporaryDir != null && usdzTemporaryDir.Exists)
                    {
                        usdzTemporaryDir.Delete(recursive: true);
                    }
                }
            }

            context       = null;
            Input.Context = null;

            base.EndRecording(session);
        }