アセットとは、Unityプログラミングにおいて用いるゲームの一部、 素材、部品の様な意味合いの言葉です。さてこれをC# OpenTKで使うことはできるのでしょうか?

よくある質問(FAQ)によると

アセットの全部または一部を Unity以外で使っても良いですか?

はい、結構です。なお、Unity以外でお使いの場合はアセットのパブリッシャーによるサポート範囲外となります。ご購入者の責任においてお使いください。

とのことです。では

Mobile Toon Cars Free | 3D 車両 | Unity Asset Store

をつかってみましょう。黄色い車を使います。

まず頂点の座標を知る必要があります。そのためにはこれを参考にしました。

Unityちゃんの頂点データを取得するだけ – Qiita

Unityを起動してアセットをインポート。prefabをHierarchyビューにドラッグ&ドロップします。アタッチして以下を実行します。

Car_5というオブジェクトの子オブジェクトにそれぞれのパーツが入っており,それぞれにMeshFilterという頂点情報が乗ったメッシュがアタッチされています。取得するのは頂点インデックス、頂点の座標と法線ベクトル、UV座標です。

上記の方法で頂点の座標と法線ベクトル、UV座標を取得することができます。csvファイルを開いてみると取得できているのがわかります。

が、そのほかにテクスチャも取得しなければなりません。そうしないと色のついた車が描画されません。

テクスチャはAssets\Mobile Toon Cars Free\Models\Texturesのなかにあります。Shadow以外はPaletteTexture.pngです。ShadowはShadow.psdです。

では次にOpenTKで描画することにします。リソースにPaletteTexture.pngとShadow.psdはpngファイルに変換した物を追加します。

まず頂点情報を格納するクラスをつくります。

あとは上記コードでcsvファイルに保存したデータを呼び出してOpenTKで描画するだけです。

ところでUnity側でXMLファイルに保存してしまったほうがOpenTK側で使いやすいかもしれません。

OpenTK側で追加するクラスとして以下があります。

タイヤを回転させる処理をするかもしれないので座標を完全に一体化させずにフィールド変数を追加しました。このほうが回転処理のあとどれだけ平行移動させるかがわかりやすくなります。

Unityちゃんを使って同じことをしたいのだができるだろうか?