rksoftware

Visual Studio とか C# とかが好きです

Xamarin.Android で ARCore Sceneform (2つ目以降のエラーを順に対応 その2)

先日、Android のサンプルコードを Xamarin.Android に書き換えてみた記事を書きました。

その際に長い戦いとなった Android バインド ライブラリ 作成について書いていきます。 今回は、5歩目 - MainActivity.cs の2つ目以降のエラーに順に対応していく続きです。

目次はこちら ↓

■ 前回のおさらい

前回の記事です。

必要なライブラリを追加し、少しづつエラーを解消して行っています。

■ エラー CS0246 型または名前空間の名前 'AnchorNode' が見つかりませんでした (using ディレクティブまたはアセンブリ参照が指定されていることを確認してください)

AnchorNode クラスは
https://dl.google.com/dl/android/maven2/com/google/ar/sceneform/core/1.9.0/core-1.9.0.aar
のライブラリにいるはずですが、生成されていません。このクラスは
https://dl.google.com/dl/android/maven2/com/google/ar/sceneform/sceneform-base/1.9.0/sceneform-base-1.9.0.aar
に依存するので、このライブラリで Android バインド ライブラリプロジェクトを作って参照します。

■ sceneform-base-1.9.0.aar プロジェクトのエラー

いくつかのエラーが出ます。

エラー    CS0534  'Box' は継承抽象メンバー 'CollisionShape.MakeCopy()' を実装しません。
エラー   CS0534  'Sphere' は継承抽象メンバー 'CollisionShape.MakeCopy()' を実装しません。
エラー   CS0535  'QuaternionEvaluator' はインターフェイス メンバー 'ITypeEvaluator.Evaluate(float, Object, Object)' を実装しません。
エラー   CS0535  'Vector3Evaluator' はインターフェイス メンバー 'ITypeEvaluator.Evaluate(float, Object, Object)' を実装しません。

今回も使わないので消してしまいます。

<remove-node path="/api/package[@name='com.google.ar.sceneform.collision']/class[@name='Box']" />
<remove-node path="/api/package[@name='com.google.ar.sceneform.collision']/class[@name='Sphere']" />
<remove-node path="/api/package[@name='com.google.ar.sceneform.math']/class[@name='QuaternionEvaluator']" />
<remove-node path="/api/package[@name='com.google.ar.sceneform.math']/class[@name='Vector3Evaluator']" />

■ エラー CS1729 'AnchorNode' には、引数 1 を指定するコンストラクターは含まれていません

AnchorNode の引数を一つとるコンストラクタの引数が別のライブラリのクラスのため生まれていません。
NuGet パッケージ Xamarin.Google.ARCore を追加します。

■ エラー CS0400 型名または名前空間名 'Google' がグローバル名前空間に見つかりませんでした (アセンブリ参照が存在することを確認してください)

https://dl.google.com/dl/android/maven2/com/google/ar/sceneform/ux/sceneform-ux/1.9.0/sceneform-ux-1.9.0.aar
のプロジェクトに NuGet パッケージ Xamarin.Google.ARCore を追加します。

■ 大量のエラー

エラー    CS0534  'RotationController' は継承抽象メンバー 'BaseTransformationController.OnContinueTransformation(Object)' を実装しません。
エラー   CS0534  'RotationController' は継承抽象メンバー 'BaseTransformationController.CanStartTransformation(Object)' を実装しません。
エラー   CS0534  'RotationController' は継承抽象メンバー 'BaseTransformationController.OnEndTransformation(Object)' を実装しません。
エラー   CS0534  'ScaleController' は継承抽象メンバー 'BaseTransformationController.CanStartTransformation(Object)' を実装しません。
エラー   CS0534  'ScaleController' は継承抽象メンバー 'BaseTransformationController.OnContinueTransformation(Object)' を実装しません。
エラー   CS0534  'ScaleController' は継承抽象メンバー 'BaseTransformationController.OnEndTransformation(Object)' を実装しません。
エラー   CS0534  'TranslationController' は継承抽象メンバー 'BaseTransformationController.OnContinueTransformation(Object)' を実装しません。
エラー   CS0534  'TranslationController' は継承抽象メンバー 'BaseTransformationController.CanStartTransformation(Object)' を実装しません。
エラー   CS0534  'TranslationController' は継承抽象メンバー 'BaseTransformationController.OnEndTransformation(Object)' を実装しません。

消します。

<remove-node path="/api/package[@name='com.google.ar.sceneform.ux']/class[@name='RotationController']" />
<remove-node path="/api/package[@name='com.google.ar.sceneform.ux']/class[@name='ScaleController']" />
<remove-node path="/api/package[@name='com.google.ar.sceneform.ux']/class[@name='TranslationController']" />

■ エラー CS0012 型 'RayHit' は、参照されていないアセンブリに定義されています。アセンブリ 'XXXXXXXX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' に参照を追加する必要があります

メッセージに従い
https://dl.google.com/dl/android/maven2/com/google/ar/sceneform/ux/sceneform-ux/1.9.0/sceneform-ux-1.9.0.aar
のプロジェクトで
https://dl.google.com/dl/android/maven2/com/google/ar/sceneform/sceneform-base/1.9.0/sceneform-base-1.9.0.aar
のプロジェクトを参照します。

■ エラー CS1061 'TransformableNode' に 'Renderable' の定義が含まれておらず、型 'TransformableNode' の最初の引数を受け付けるアクセス可能な拡張メソッド 'Renderable' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足していないことを確認してください。

setRenderable メソッドは TransformableNode のスーパークラスである
https://dl.google.com/dl/android/maven2/com/google/ar/sceneform/core/1.9.0/core-1.9.0.aar
内のクラスのメソッドですが、引数の型は
https://dl.google.com/dl/android/maven2/com/google/ar/sceneform/rendering/1.9.0/rendering-1.9.0.aar
内のクラスです。

https://dl.google.com/dl/android/maven2/com/google/ar/sceneform/core/1.9.0/core-1.9.0.aar
のプロジェクトで https://dl.google.com/dl/android/maven2/com/google/ar/sceneform/rendering/1.9.0/rendering-1.9.0.aar
のプロジェクトを参照します。

■ 最大のエラー

ここで、最も難易度の高いエラーが発生します。

エラー        繧ィ繝ゥ繝シ: Light縺ョLightChangedListener縺ッpublic縺ァ縺ッ縺ゅj縺セ縺帙s縲ゅヱ繝・こ繝シ繧ク螟悶°繧峨・繧「繧ッ繧サ繧ケ縺ァ縺阪∪縺帙s
        com.google.ar.sceneform.rendering.Light.LightChangedListener
豕ィ諢・荳驛ィ縺ョ蜈・蜉帙ヵ繧。繧、繝ォ縺ッ髱樊耳螂ィ縺ョAPI繧剃スソ逕ィ縺セ縺溘・繧ェ繝シ繝舌・繝ゥ繧、繝峨@縺ヲ縺・∪縺吶・
豕ィ諢・隧ウ邏ー縺ッ縲・Xlint:deprecation繧ェ繝励す繝ァ繝ウ繧呈欠螳壹@縺ヲ蜀阪さ繝ウ繝代う繝ォ縺励※縺上□縺輔>縲・
豕ィ諢・蜈・蜉帙ヵ繧。繧、繝ォ縺ョ謫堺ス懊・縺・■縲∵悴繝√ぉ繝・け縺セ縺溘・螳牙・縺ァ縺ッ縺ェ縺・b縺ョ縺後≠繧翫∪縺吶・
豕ィ諢・隧ウ邏ー縺ッ縲・Xlint:unchecked繧ェ繝励す繝ァ繝ウ繧呈欠螳壹@縺ヲ蜀阪さ繝ウ繝代う繝ォ縺励※縺上□縺輔>縲・

一目見てわかるでしょう。何のエラーかわからない、と。
消します。慈悲はありません。
https://dl.google.com/dl/android/maven2/com/google/ar/sceneform/rendering/1.9.0/rendering-1.9.0.aar
のプロジェクトです。

<remove-node path="/api/package[@name='com.google.ar.sceneform.rendering']/interface[@name='Light.LightChangedListener']"/>

まだまだエラーは消えないので、続きも書いて行こうと思います。

(つづく)