Google

2015年4月17日金曜日

RuntimeSTLLoader ver 1.2.0

再度手前味噌の記事です。

ver1.1.0から間が開いてしまいましたが、本日RuntimeSTLLoader ver1.2.0をリリースいたしました。
変更点はバグ修正以外にURLからのダウンロード機能追加になります。

今までこの機能を入れなかった理由ですが、.netのファイル読み書きライブラリ、例えばSystem.IO.File等がWebPlayerモードではエラーを発生させるという点でした。
これはUnityのせいでもなんでもなくWebモードでファイルアクセスはセキュリティも含めた問題回避等が理由になるので仕方がないですね。

しかしこれはUnityだと変な形でモードに関わってきます。
例えばデモ用のシーンをWebPlayerモードにした状態で実行すると、その瞬間にSystem.IO.Fileが使えませんと文句を言ってきたりします。
これがモードを切り替えた瞬間ではなく実行時でないと出ないとう点が以外な曲者で、気付かずに作業してると突然エラーになってミスの内容を探し直したりとかするわけです。
importの時点でエラーになればいいのにそれ自体はエラーが出ないという仕様ですし。
Unityがたまに起動時に勝手にWebPlayerモードにしてくれるという、良くわからない本体の仕様?かなんかで変えられてると突然エラーになったりして焦ったりもしました。

しかしお客様にはそんな混乱をさせるわけには行きません。
WebPlayerモードでのファイルからの読み込みは、#ifで区切って処理をさせずに終わらせるようにしてあります。
ちなみに以前からそうなっていますので今回でそうした訳ではありません。

逆にURLからのダウンロードは殆どの環境で使用可能なWWWクラスで実装しました。
このクラスにも問題が多々ありますが、、、まあ仕方なく使ってる感はあります。
使い方はファイルの時と似ていて、URLを指定する形なのであんまり変わりません。

// 本体のインスタンスを取得
RuntimeStlLoader loader = RuntimeStlLoader.getInstance();
if (m_stl_instance != null)
{
Destroy(m_stl_instance);
}
loader.loadMeshFromUrl(
m_url, // URL
m_stl_base_prefab, // STLの原型プレハブ
null, // 親(オプション)
OnCompleteLoadUrl); // コールバック関数

ちなみにURLはプロトコルを付けても付けなくてもどちらでも大丈夫です。
博物館から落とせるURLを直接指定するというのも有りです。
もし簡単なサンプルが必要でしたら以下をお使いください。

http://www.angework.co.jp/pub/angework_logo.stl

ファイル版と違う点は、WWWがIEnumratorでコルーチン処理になる関係からコールバックで処理完了を通知するようになっているところ位でしょうか。
これで一応ひと通りの場所からロードできるようにはなりました。

あと、1.1.0の時に出し忘れていたのですが、MeshがUntiyで管理しきれないサイズのSTLをプレハブ化したらどうなるか?の見本を出しときます。

これは馬鹿でかい球体をSTLにしてロードしてみた例です。

シーン見るだけででかいのが想像できるかと思われ
これが表示中のインスタンスです
65kで分割してるのに15個もできてしまいました。
で、これをver1.1.0で追加したプレハブ化をしてみたのが以下です。


プレハブはインスタンスと同じ構造なのがお分かり頂けるかと。

問題はメッシュ。
やっぱりメッシュも分割して15個になってしまいました。
これが各々同じ番号のプレハブに紐付けられる形になってます。


STLの解析が単純なため、近いパーツ単位で分けるという器用な真似はまだ出来ません。
今後はこの辺の頭を賢くしたり、リダクションをしたりというバージョンアップを考えています。
STLのfbx化も、、、やっぱ必要ですかね。

0 件のコメント:

コメントを投稿