Kanzi 3.9.3 マイグレーションガイド

このマイグレーションガイドを使用して、Kanzi アプリケーションを Kanzi 3.9.2 から Kanzi 3.9.3 に更新してください。

レンダーパスの変更 (Changes in render passes)

  • CameraProperty を DrawObjectsRenderPass から RenderPass に移動しました。

    これにより、レンダーパスおよびその子孫がコンテンツをレンダリングするために使用する Camera ノードを任意のレンダーパスで設定できます。

  • renderOverride() のレンダーパスのプロファイルを void renderOverride(Renderer3D& renderer, CompositionStack& compositionStack, const CameraSettings* cameraSettings) に変更しました。

    RenderPass の特殊化がカメラ設定を変更したい場合を除き、ポインタはそのまま子レンダーパスのレンダリングに渡されます。ポインタは nullptr である可能性があります。

    カメラ設定を変更するカスタムレンダリングを実装する場合、渡されたパラメータからコピーして、スタックからローカル CameraSettings を構築します。

  • virtual void renderChildrenOverride(Renderer3D& renderer, CompositionStack& compositionStack, const CameraSettings* cameraSettings) がレンダーパスに導入されました。

    この関数は、レンダーパスの子をどのようにレンダリングするかを制御します。RenderPass の一般的な特殊化は、これをオーバーライドする必要はありません。

Java APIの変更点

  • メッセージタイプを定義する際には、関連するメッセージ引数クラスを指定する必要があります。それに応じて、メッセージをディスパッチまたは処理する際には、メッセージタイプに関連付けられたメッセージ引数クラスを使用する必要があります。

    Kanzi Studio は、この関連付けを使用して、メッセージの引数に設定したり、取得したりできるプロパティのリストを提供します。

    メッセージ引数クラスは、MessageArguments クラスから派生し、固定シグネチャのコンストラクタを提供する必要があります。

    • メッセージタイプとメッセージ引数の定義を以下から変更します

      @Metadata
      public static final MessageType XMessage = new MessageType("Message.X", MessageRouting.MessageRoutingBubbling);
      
      @Metadata
      public interface XMessageArguments
      {
          @Metadata
          public static PropertyType<Integer> SomeProperty = new PropertyType<>(Integer.class);
      }
      

      終点

      @Metadata
      public static final MessageType<XMessageArguments> XMessage = new MessageType<>("Message.X", MessageRouting.MessageRoutingBubbling, XMessageArguments.class);
      
      @Metadata
      public class XMessageArguments extends MessageArguments
      {
          // A constructor with a long argument that Kanzi uses to wrap native arguments.
          public XMessageArguments(long nativeObject)
          {
             super(nativeObject);
          }
      
          // Any additional constructors for you to use when dispatching messages.
          public XMessageArguments()
          {
             super();
          }
      
          @Metadata
          public static PropertyType<Integer> SomeProperty = new PropertyType<>(Integer.class);
          // Accessors for properties.
          public Integer getSomeProperty()
          {
                return getArgument(SomeProperty);
          }
          public void setSomeProperty(Integer value)
          {
                setArgument(SomeProperty, value);
          }
      }
      
    • メッセージディスパッチ呼び出しを変更します:

      MessageArguments args = new MessageArguments();
      args.setArgument(XMessageArguments.SomeProperty, 1);
      node.dispatchMessage(XMessageArguments, args);
      

      終点

      XMessageArguments args = new XMessageArguments();
      args.setSomeProperty(1);
      node.dispatchMessage(XMessageArguments, args);
      
    • メッセージハンドラを以下のように変更してください

      node.addMessageHandler(XMessage, messageArguments -> {
          Integer someProperty = messageArguments.getArgument(XMessageArguments.SomeProperty);
      });
      

      終点

      node.addMessageHandler(XMessage, messageArguments -> {
          Integer someProperty = messageArguments.getSomeProperty();
      });
      

    独自のメッセージ引数クラスを定義する必要はありません。代わりに、上記のすべてのケースで基底クラス MessageArguments を使用できます。また、プロパティのアクセサを定義することは、あくまで利便性のためです。汎用的な引数セッターとセッターを引き続き使用できます。

    メッセージの使用 と カスタムタイプの作成 を参照してください。

  • Metaclass インターフェース iteratePropertyTypes() と iterateMessageTypes() は、それぞれ AbstractPropertyType と AbstractMessageType のイテラブルを返すようになりました。

  • これらの Node インターフェースのリソースID引数の型を String から ResourceID に変更しました。

    • addResource

    • removeResource

    • containsResource

    • findResourceUrl

    • acquireResource

    • tryAcquireResource

    • acquireResourcesAsync

    変更前:

    node.acquireResource("resource id");
    

    以下に変更します。

    node.acquireResource(new ResourceID("resource id"));
    

Androidアプリケーションテンプレートの変更

Androidアプリケーションテンプレートは、Kanzi Studio からJava Code Behindの追加をサポートするようになりました。Kanzi Studio でCode Behind機能を使用するには、古いテンプレートに基づいた既存のアプリケーションを移行する必要があります。

Kanzi Studio の既知の問題として、Java Code Behind 機能を使用する Android アプリケーションのパッケージは com.example.<ProjectName> のままでなければなりません。

Kanzi アプリケーションを更新されたテンプレートに移行するには:

  1. Kanzi Studio で、プロジェクトを開きます。メインメニューで、Project > Properties を選択し、Properties で Java Project プロパティを有効に設定します。

    ../../_images/properties-project-java-project.png
  2. プロジェクトを保存して、Kanzi Studio を再起動してください。

  3. アプリケーションパッケージディレクトリに KanziGenerated.java ファイルを作成し、以下のコードをファイルに追加してください。

    例えば、このファイルを <ProjectName>/Application/configs/platforms/android_gradle/app/src/main/java/com/example/<ProjectName> ディレクトリに作成します。

    // GENERATED FILE. DO NOT EDIT.
    
    package com.example.<ProjectName>;
    
    import com.rightware.kanzi.Domain;
    
    // [Plugin imports]
    
    public class KanziGenerated {
    
    static void registerPlugins(Domain domain) {
    
    // [Plugin registrations]
    }
    
    }
    
  4. アクティビティの初期化や Kanzi ビューのアタッチ時に、KanziGenerated.registerPlugins(domain) を呼び出します。

KanziGenerated.java について詳しく知るには、Kanzi Studio で生成されたプラグインを使用する をご覧ください。

クラスメタデータの変更

  • PropertyTargetEasingInterpolator メタクラスの名前を Kanzi.PropertyTargetEasingInterpolator に変更しました。

  • PropertyTargetEasingInterpolator.SetEnabledMessageArguments MessageArgument メタクラスの名前を Kanzi.PropertyTargetEasingInterpolator.SetEnabledMessageArguments に変更しました。

  • これらの StateManager MessageArgument メタクラスの名前を変更しました。

    Kanzi 3.9.2

    Kanzi 3.9.3

    Message.StateManagerMessageArguments

    Kanzi.StateManager.StateManagerMessageArguments

    Message.StateManagerStateChangeMessageArguments

    Kanzi.StateManager.StateChangeMessageArguments

    Message.StateManagerGoToStateMessageArguments

    Kanzi.StateManager.GoToStateMessageArguments

    Message.StateManagerGoToDefinedStateMessageArguments

    Kanzi.StateManager.GoToDefinedStateMessageArguments

    Message.StateManagerGoToNextDefinedStateMessageArguments

    Kanzi.StateManager.GoToNextDefinedStateMessageArguments

    Message.StateManagerGoToPreviousDefinedStateMessageArguments

    Kanzi.StateManager.GoToPreviousDefinedStateMessageArguments

    Message.StateManagerEnteredStateMessageArguments

    Kanzi.StateManager.EnteredStateMessageArguments

    Message.StateManagerLeftStateMessageArguments

    Kanzi.StateManager.LeftStateMessageArguments

    Message.StateManagerTransitionMessageArguments

    Kanzi.StateManager.TransitionMessageArguments

    Message.StateManagerTransitionStartedMessageArguments

    Kanzi.StateManager.TransitionStartedMessageArguments

    Message.StateManagerTransitionFinishedMessageArguments

    Kanzi.StateManager.TransitionFinishedMessageArguments

  • これらの ValueAccumulator MessageArgument メタクラスの名前を変更しました。

    Kanzi 3.9.2

    Kanzi 3.9.3

    FloatValueAccumulator.SetAccumulatedValueBoundariesMessageArguments

    Kanzi.FloatValueAccumulator.SetAccumulatedValueBoundariesMessageArguments

    IntValueAccumulator.SetAccumulatedValueBoundariesMessageArguments

    Kanzi.IntValueAccumulator.SetAccumulatedValueBoundariesMessageArguments

    ValueAccumulator.StartMessageArguments

    Kanzi.ValueAccumulator.StartMessageArguments

    ValueAccumulator.StopMessageArguments

    Kanzi.ValueAccumulator.StopMessageArguments

    ValueAccumulator.PauseMessageArguments

    Kanzi.ValueAccumulator.PauseMessageArguments

    ValueAccumulator.ResumeMessageArguments

    Kanzi.ValueAccumulator.ResumeMessageArguments

スキンメッシュの変更

複数のノードが同じスキンメッシュを使用できるようにするために、Kanzi はスキンメッシュのランタイムデータを Mesh ではなく Model3D に保存するようになりました。これを可能にするために、Mesh API に以下の変更を加えました。

  • これらのスキンメッシュアクセサを削除しました:

    • Mesh::getBoneCount() > size_t

    • Mesh::getBoneNode(size_t) > Node3D*

    • Mesh::getBoneChildJoint(size_t) > Node3D*

  • これらのスキンメッシュアクセサリを追加しました:

    • Mesh::getSkeleton > Mesh::Skeleton

    • Model3D::getSkeletonRuntime > Mesh::Skeleton

  • これらの関数シグネチャを変更しました:

    Kanzi 3.9.2

    Kanzi 3.9.3

    Mesh::updateBoundingBox(Node3D*)

    Mesh::updateSkeletonTransformation(Model3D&)

    Mesh::attach(Node*)

    Mesh::attachSkeleton(Model3D*)

    Mesh::detach(Node*)

    Mesh::detachSkeleton(Model3D*)

メッシュデータアクセスの変更

Kanzi は、メッシュで32ビットインデックスをサポートするようになりました。この改善により、Mesh API に以下の変更が導入されます。

  • これらの関数シグネチャを変更しました:

    Kanzi 3.9.2

    Kanzi 3.9.3

    void* Mesh::getVertexData(size_t)

    span<const byte> Mesh::getVertexData(size_t)

    uint16_t* Mesh::getClusterIndexData(size_t)

    span<const byte> Mesh::getClusterIndexData(size_t)

  • メッシュクラスターのインデックスタイプを確認するために、Mesh::getClusterIndexType() を追加しました。

モーフシェーダーの変更

モーフシェーダーは、ベースモーフのウェイトを計算するようになりました。古いモーフシェーダーを使用しているプロジェクトにこの変更を適用するには、次の手順を実行してください。

  1. Library > Materials and Textures > Material Types で、更新したいモーフマテリアルタイプを削除します。

    例えば、VertexPhongMorph マテリアルタイプを使用する場合、そのマテリアルタイプを削除してください。

    ../../_images/morph-delete-material.png
  2. Library > Materials and Textures Alt を押しながら右クリック Material Types で、使用したいモーフマテリアルタイプをインポートします。

    例えば、VertexPhongMorph マテリアルタイプをインポートします。

    ../../_images/morph-import-material.png
  3. Library > Materials and Textures > Materials で、古いモーフシェーダーマテリアルタイプで使用したマテリアルを選択し、Properties で Material Type プロパティを前のステップでインポートしたモーフマテリアルに設定します。

    ../../_images/morph-material-library.png ../../_images/morph-material-properties.png
  4. Library > Materials and Textures > Materials で、Kanzi Studio がマテリアルタイプをインポートする際に自動的に作成するモーフマテリアルを削除します。

    ../../_images/morph-delete-auto-material.png

application.cfg のエラーハンドリングの変更点

Kanzi が application.cfg 構成ファイルの解析中にエラーが発生した場合、またはそのファイルが見つからない場合、Kanzi はエラーメッセージを記録し、例外をスローしなくなります。

フォールトトレラントアプリケーションを構築している場合、破損または欠落した application.cfg ファイルが発生した際に、欠落したファイルのログ出力を同時に解析し、破損したファイルの例外をキャッチする必要はありません。アプリケーションのログ出力を解析するだけで、欠落した application.cfg ファイルと破損したファイルの両方を検出できます。

application.cfg のエラーハンドリング を参照してください。

Kanzi Studio プラグイン

Kanzi Studio は現在 .NET Framework 4.8 を使用しています。Kanzi Studio プラグインを移行するには、プラグインの Visual Studio プロジェクトでターゲットフレームワークのバージョンを 4.8 に更新してください。

関連項目

Kanzi 3.9.3 リリースノート

既知の問題