2017年03月12日

Unity研究メモ(ボクセル、IronPython)

追記

DLR回りの使用は他のプラットフォームで難しそうな感じ。
Windowsでは問題なく動くが、WebGLでもAndroidでも(AndroidはバックエンドがIL2CPPではなくMonoであっても)動かなかった。これはまずい。IronPythonはリフレクションがないとC#側の関数が取り込めない仕組みっぽいのでほぼなにも出来ない。PC専用になってしまうとUnity使う意味があまりないしなあ。PS4とかでは動くんだろうか? 残念ながらIronPythonの使用は見送るかも。この記事内容については訂正します。
MoohSharpで、DLR回りの仕様に頼らず色々グルーコード書いて、HTMLパーサもどこかで用意するしかないか。

モデリング・リギング・アニメーション

コンテンツパイプラインがだいたい確立しそう。

  • MagicaVoxelもしくはQubicleでモデリング
  • VoxelImporterで取り込む。アニメするモデルの場合はボーンを入れる。
  • 簡単なモデルならAnimationClipの編集だけでも十分アニメを作れそうだが、専用の外部ツールを使いたい場合は外に出す。
    • VoxelImporterからCOLLADA形式(.dae)でエクスポートする。MayaLTに持ち込んでボーン構造をUnity内部のものと同じにする(オブジェクト名がルートに入ってることが多いのでそれを外す)。
    • あとは外部ツール(私はAkeytsuを使う)でアニメを作ってFBXでUnityに持ち込み、FBX内のアニメーションクリップをCtrl+Dで複製すればそちらは編集可能であり、同じボーン構造のモデルに適用出来る。
    • HumanoidアニメはもちろんUnityの普通のやり方で流用可能

レベルデザイン

レベルデザインに関してはまだ途中。

現状、マイクラ風のキューブによる地形デザインはめどが立っている。動的に更新出来るのが強み。あとは各面に違うテクスチャを貼り付けられるようにしたり、ハーフブロックや階段(これは1/8サイズのブロックを管理させれば統一して作れる)を実装すればいい。柵とかガラス板とかは別オブジェクトでいいかなあと。とりあえず表示部分だけ作り込んで設定はIronPythonを組み込んでツール作ればいいかなと。

2017-02-06 (2).jpg

また、地面に関してはUnityの標準のテレインを低解像度で使うといかにも味のある絵作りになるのでこれもありかと思っている。

2017-02-03.jpg

IronPythonを採用する

IronPythonはリフレクションの取り込みが深いのと、マニュアルがかなり充実している(英語だが)のと、Pythonの各種ライブラリが使えるのとが良い感じなので、今後の開発はこれを基盤に据えていく。基礎部分を作る。こういう構造を考えている。

  • C#コード (UnityEditor,VisualStudio)
    各パーツ、ゲームオブジェクトなどの細かい機能をここで実装する。例えばAIナビゲーションやアニメーション管理など。それをIronPythonから呼び出す。レベルデザインは未定だが、ここでやるか、外部ツールから取り込むか。ゲームのUIは普通にuGUIで作る。
  • IronPythonコード
    ゲームのメインロジックはここに書く。リフレクションが使えるので必要ならだいたい何でも出来るはず。特にPCゲームを作る場合は、MODを作成しやすい環境にしたい。標準のHTMLパーサを使ってシナリオスクリプトを読み込んで実行する。
  • シナリオスクリプト
    シナリオや演出の記述を直列化するための独自文法のスクリプト。HTML形式と同様のタグを使う(意味づけは異なる)。単純で使いやすいはず。変数を処理したり条件分岐したりするところはPHPに似た感じでPythonを呼び出して処理させる。こんなスクリプトを動かしたい。
    
    <label name="samplescene">
    XMLと違って<c>閉じタグを必ずしも必要としないのがいいですね。<p>
    <bg name="town">
    <chr name="girlA" x=0>
    こんな感じで演出。<p>
    <?py save.v1=1 ?>
    <!-- Python呼び出し。PHP風 -->
    <?py
        if save.v1==1 :
            labeljump("samplescene2")
    ?>
    <!-- Python呼び出し。複数行も化 -->
    

    これなら、直列化したいところだけを独自文法に切り出して、アルゴリズム的なところだけ全部Pythonで書ける。シナリオスクリプトは粒度の高い指令をさせて、細かいことはPythonの関数を呼ばせてそちらで実行する。
posted by NTak_Indies at 08:00| Comment(0) | TrackBack(0) | 日記
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/179062931

この記事へのトラックバック