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に変更しました。addResourceremoveResourcecontainsResourcefindResourceUrlacquireResourcetryAcquireResourceacquireResourcesAsync
変更前:
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 アプリケーションを更新されたテンプレートに移行するには:
Kanzi Studio で、プロジェクトを開きます。メインメニューで、Project > Properties を選択し、Properties で Java Project プロパティを有効に設定します。
プロジェクトを保存して、Kanzi Studio を再起動してください。
アプリケーションパッケージディレクトリに
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] } }
アクティビティの初期化や Kanzi ビューのアタッチ時に、
KanziGenerated.registerPlugins(domain)を呼び出します。
KanziGenerated.java について詳しく知るには、Kanzi Studio で生成されたプラグインを使用する をご覧ください。
クラスメタデータの変更¶
PropertyTargetEasingInterpolatorメタクラスの名前をKanzi.PropertyTargetEasingInterpolatorに変更しました。PropertyTargetEasingInterpolator.SetEnabledMessageArgumentsMessageArgument メタクラスの名前をKanzi.PropertyTargetEasingInterpolator.SetEnabledMessageArgumentsに変更しました。これらの
StateManagerMessageArgument メタクラスの名前を変更しました。Kanzi 3.9.2
Kanzi 3.9.3
Message.StateManagerMessageArgumentsKanzi.StateManager.StateManagerMessageArgumentsMessage.StateManagerStateChangeMessageArgumentsKanzi.StateManager.StateChangeMessageArgumentsMessage.StateManagerGoToStateMessageArgumentsKanzi.StateManager.GoToStateMessageArgumentsMessage.StateManagerGoToDefinedStateMessageArgumentsKanzi.StateManager.GoToDefinedStateMessageArgumentsMessage.StateManagerGoToNextDefinedStateMessageArgumentsKanzi.StateManager.GoToNextDefinedStateMessageArgumentsMessage.StateManagerGoToPreviousDefinedStateMessageArgumentsKanzi.StateManager.GoToPreviousDefinedStateMessageArgumentsMessage.StateManagerEnteredStateMessageArgumentsKanzi.StateManager.EnteredStateMessageArgumentsMessage.StateManagerLeftStateMessageArgumentsKanzi.StateManager.LeftStateMessageArgumentsMessage.StateManagerTransitionMessageArgumentsKanzi.StateManager.TransitionMessageArgumentsMessage.StateManagerTransitionStartedMessageArgumentsKanzi.StateManager.TransitionStartedMessageArgumentsMessage.StateManagerTransitionFinishedMessageArgumentsKanzi.StateManager.TransitionFinishedMessageArgumentsこれらの
ValueAccumulatorMessageArgument メタクラスの名前を変更しました。Kanzi 3.9.2
Kanzi 3.9.3
FloatValueAccumulator.SetAccumulatedValueBoundariesMessageArgumentsKanzi.FloatValueAccumulator.SetAccumulatedValueBoundariesMessageArgumentsIntValueAccumulator.SetAccumulatedValueBoundariesMessageArgumentsKanzi.IntValueAccumulator.SetAccumulatedValueBoundariesMessageArgumentsValueAccumulator.StartMessageArgumentsKanzi.ValueAccumulator.StartMessageArgumentsValueAccumulator.StopMessageArgumentsKanzi.ValueAccumulator.StopMessageArgumentsValueAccumulator.PauseMessageArgumentsKanzi.ValueAccumulator.PauseMessageArgumentsValueAccumulator.ResumeMessageArgumentsKanzi.ValueAccumulator.ResumeMessageArguments
スキンメッシュの変更¶
複数のノードが同じスキンメッシュを使用できるようにするために、Kanzi はスキンメッシュのランタイムデータを Mesh ではなく Model3D に保存するようになりました。これを可能にするために、Mesh API に以下の変更を加えました。
これらのスキンメッシュアクセサを削除しました:
Mesh::getBoneCount()>size_tMesh::getBoneNode(size_t)>Node3D*Mesh::getBoneChildJoint(size_t)>Node3D*
これらのスキンメッシュアクセサリを追加しました:
Mesh::getSkeleton>Mesh::SkeletonModel3D::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()を追加しました。
モーフシェーダーの変更¶
モーフシェーダーは、ベースモーフのウェイトを計算するようになりました。古いモーフシェーダーを使用しているプロジェクトにこの変更を適用するには、次の手順を実行してください。
Library > Materials and Textures > Material Types で、更新したいモーフマテリアルタイプを削除します。
例えば、VertexPhongMorph マテリアルタイプを使用する場合、そのマテリアルタイプを削除してください。
Library > Materials and Textures Alt を押しながら右クリック Material Types で、使用したいモーフマテリアルタイプをインポートします。
例えば、VertexPhongMorph マテリアルタイプをインポートします。
Library > Materials and Textures > Materials で、古いモーフシェーダーマテリアルタイプで使用したマテリアルを選択し、Properties で Material Type プロパティを前のステップでインポートしたモーフマテリアルに設定します。
Library > Materials and Textures > Materials で、Kanzi Studio がマテリアルタイプをインポートする際に自動的に作成するモーフマテリアルを削除します。
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 に更新してください。