APIの変更点

2020-04-21 17:12:49 +0900 +0900

Import

  • VRMをインポートするために(UniGLTF.ImporterContext.Load)使用されるクラスVRM.VRMImporterContextは削除されました。UniVRMインポーターはVRMデータ(UniVRM10.VrmLoader.CreateVrmModel)をVrmLib.Modelに保存してからUnityに構築します
  • UniVRM10.UnityBuilder.ToUnityAssetVrmLib.ModelからUnity Assetにデータを転送します。0.XXの UniGLTF.ImporterContext.ShowMeshesToUnityAssetのboolパラメータに変更されました
  • UniVRM10.ComponentBuilder.Build10はVRM GameObjectに対してMeta, BlendShape, LookAtなどのコンポーネントをセットアップします

Example

    using System;
    using System.IO;
    using UnityEngine;

    public class MyClass : MonoBehaviour
    {
        // ...

        /**
         * VRMインポート
         *
         * @return vrmオブジェクト
         */
        public GameObject Import()
        {
            // ファイルパス
            var path = "../YourModel.vrm";
            var model = UniVRM10.VrmLoader.CreateVrmModel(path);

            // UniVRM-0.XXのコンポーネントを構築する
            var assets = UniVRM10.RuntimeUnityBuilder.ToUnityAsset(model, showMesh: false);

            // showRenderer = false のときに後で表示する例
            foreach (var renderer in assets.Renderers)
            {
                renderer.enabled = true;             
                // カリングを避ける
                if (renderer is SkinnedMeshRenderer skinned)
                {
                    skinned.updateWhenOffscreen = true;
                }
            }

            UniVRM10.ComponentBuilder.Build10(model, assets);
            var vrmObject = assets.Root;        

            return vrmObject;
        }

        // ...
    }

Export

  • VRMをエクスポートするために(UniGLTF.gltfExporter.Export)使用されるクラスVRM.VRMExporterは削除されました。UniVRMエクスポーターはVRMデータ(RuntimeVrmConverter.ToModelFrom10)をVRM GameObjectからVrmLib.Modelに転送してVRMファイルに保存します
  • Vrm10.ModelExtensions.ToGlbはデータをVrmLib.Modelからglbに転送します。.glbファイルは.vrmと交換可能です。UnityとGLTF間の座標変換は VrmLib.ModelExtensionsForCoordinates.ConvertCoordinateです

Example

    using System;
    using System.IO;
    using UnityEngine;

    public class MyClass : MonoBehaviour
    {
        // ...

        /**
         * VRMエクスポート
         */
        public void Export()
        {
            // ファイルパス
            var importPath = "../YourModel.vrm";
            var importedModel = UniVRM10.VrmLoader.CreateVrmModel(importPath);
            var assets = UniVRM10.RuntimeUnityBuilder.ToUnityAsset(importedModel);
            UniVRM10.ComponentBuilder.Build10(importedModel, assets); 
            
            // 1.0でエクスポート
            var exporter = new UniVRM10.RuntimeVrmConverter();
            var model = exporter.ToModelFrom10(assets.Root);

            // 右手系に変換
            VrmLib.ModelExtensionsForCoordinates.ConvertCoordinate(model, VrmLib.Coordinates.Gltf);
            var exportedBytes = Vrm10.ModelExtensions.ToGlb(model);
            
            // 1.0モデルを書き出す
            var path = "vrm10.vrm";
            File.WriteAllBytes(path, exportedBytes);
        }

        // ...
    }

LookAt

  • LookAt関連クラスVRM.VRMLookAtBoneApplyerVRM.VRMLookAtBlendShapeApplyerVRM.VRMLookAtHeadUniVRM10.VRMBlendShapeProxyに統合されました
  • VRM.LookAtTypeUniVRM10.VRMBlendShapeProxy.LookAtTypesに変更されました
  • VRMLookAtHead.TargetVRMBlendShapeProxy.Gazeに置き換えられました
  • UniVRM10.VRMBlendShapeProxy.LookAtTargetTypesを追加しました。自動で頭に対するyaw・pitch角度を取得するか、yaw・pitch角度をセットするの選択肢があります

Example

    using System;
    using System.IO;
    using UnityEngine;
    using UniVRM10;

    public class MyClass : MonoBehaviour
    {
        [SerializeField]
        private GameObject _vrmModel;
        
        [SerializeField]
        private GameObject _targetObject;

        // ...

        public void SpecifyLookAtTarget()
        {
            var proxy = _vrmModel.GetComponent<VRMBlendShapeProxy>();
            proxy.LookAtTargetType = VRMBlendShapeProxy.LookAtTargetTypes.CalcYawPitchToGaze;
			
            // LookAtターゲットを指定する
            _vrmModel.GetComponent<VRMBlendShapeProxy>().Gaze = _targetObject.transform;
            
            // 頭に対するyaw・pitch角度を取得する
            var (yaw, pitch) = proxy.GetLookAtYawPitch();
        }

        public void SpecifyYawPitchAngle()
        {
            var proxy = _vrmModel.GetComponent<VRMBlendShapeProxy>();
            proxy.LookAtTargetType = VRMBlendShapeProxy.LookAtTargetTypes.SetYawPitch;
			
            // yaw・pitch角度をセットする
            proxy.SetLookAtYawPitch(0, 0);
        }

        // ...
    }
最終更新 2020/05/12: fix errors (e214e7d)
VRM - humanoid 3d avatar format for VR