俺に解るように説明する "Godot Engine 3.x" 入門+

ゲームエンジン Godot Engine に関すること。入門とか使い方とかチュートリアルとか、あれとかこれとか。日本語解説。

Godot キャラコン 15 「dae の import とanimation あれこれ」 1/6

dae形式の「おばさん(33)」をインポートして、何とかイイ感じに方向転換させる事は出来たが、アニメーションはまだ出来ていない。で、これにアイドル・ウォークアニメーションを実装しようと試行錯誤してみた結果、いくつか分かった事が出て来たんで、まとめておこうと思う。ま、大して深い話じゃないけどな。

f:id:ore2wakaru:20180427213844p:plain


daeはシーンとして扱われる

エクスプローラからD&Dでファイルシステムにインポートすると、

f:id:ore2wakaru:20180427182708p:plain

f:id:ore2wakaru:20180427183417p:plain

  1. dae形式のファイルは、アイコンがシーンを示すアイコンになっている事で分かる通り、自動的にシーンとして扱われる。
  2. マテリアルは別ファイルとして出力される。(大量に出てくるとうざいので、daeインポートの際は別フォルダにするとイイ。)


変更を加えたい時には [New Inherited]

だが、これ、インポートされたdae"BodyF02.dae")をダブルクリックで開こうとすると、以下のような窓が開く。

f:id:ore2wakaru:20180427184023p:plain

  1. 新しく、継承されたものとしてして開く。
  2. とにかく開く。
  3. やっぱり止める。

3はイイとして、1と2の違いは何ぞや?

[1] [New Inherited]

「1. 新しく、継承されたものとしてして開く。」とはどういう事かと言うと、途中経過を全部ぶっ飛ばして結論から言っちゃうと、変更を加えたい時にはこれを選べって事・・・。

恐らくインポートされたdaeをゲーム中で使用する場合、Godotの基本姿勢としてはdae本体には変更を加えずに、コピー元としてとっておくようになっているのだと思う。本体は綺麗なままとっておく作戦だ。なぜか?

例えば、買ってきた本にメモを取る場合、本に直接にメモを書き込んでしまうと本自体が汚れてしまう。だが本のコピーを取ってそれにメモしていく分には、買ってきた本そのものは綺麗なままとっておく事が出来る。こういう風にしておけば人に本を貸す時、自分の意見とかがあっちこっちに書き込まれたものを貸さないで済む。恥ずかしい思いをしなくて済むって事だ。

daeの場合も、あっちこっちから「貸してくれー」という要求があった場合、どっかの誰かが本体に直に変更を加えて汚してしまっては、元のdaeと同じものが利用出来なくなり、「元データが欲しいんだよ」っていう利用者には大変困った事になる。だから、本体は綺麗なままおいといて、変更は別口で扱う作戦を採用するのだと思う。

で、変更部分を扱うためにどういう仕組みを考えたかと言うと、Godot君、なんと新しいシーンを作っちゃうという方法を採っているようだ。dae自体がシーンなのに、さらにそれを扱うシーンを作るって? 分かりにくいんじゃない? って思うじゃん。で、

より具体的に、

やってみよう。[New Inherited]を選ぶと、シーンタブが追加される。"[unsaved]"となっているのが分かる。

f:id:ore2wakaru:20180427193907p:plain

"BodyF02.dae"を開いたのに、タブ名が"BodyF02"ではなく"[unsaved]"になっているのは、新しいシーンを開いたという事を意味する。では、忘れないうちにセーブしておこう。[Ctrl] + [S] でこのシーンのセーブだ。すると、

f:id:ore2wakaru:20180427194530p:plain

このように、tscnファイルとして扱われるようになる。これは、daeファイルをぶっ壊してtscnファイルに変更しちゃったのではなく、セーブ後エクスプローラで確認し中を開いてみると納得するのだが、

f:id:ore2wakaru:20180427195659p:plain

daeファイルへのリンクを持ったtscnファイルを作ったのだという事が分かる。つまり、daeには直接変更は加えず、変更部分はtscnファイルに書き込んでいく方式を採ったという事だ。

daeは新しいシーンにつながれたって事。つまり、「dae新しく作ったシーンから継承された形で利用されております。」って事だろ。もしそうなら、恐らくこれが「New(新しく)Inherited(継承された)」なんだと思う。だろ? 違うか? 

[2] [Open Anyway]

では、「2. とにかく開く。」の場合はどういう風になるのか? 簡単に言うと変更は出来ないってダケなんだが・・・。

"BodyF02.dae"をダブルクリック。こっちで開いてみよう。daeファイルのファイルネームがそのままタブに表示される。daeはシーンとして扱われるから当然だな。

f:id:ore2wakaru:20180427202240p:plain

[New Inherited]は新規のシーンとして考えるから、"[unsaved]"が、[Open Anyway]daeをシーンとして開いてるダケだからdaeのファイルネームが、それぞれタブ名として出てくる感じか。なるほど。

で、どこでもいいから適当なノードを選択して、インスペクターパネルを見ると、

f:id:ore2wakaru:20180427202920p:plain

こんな感じで、「変更しても結果はロストする(かも)よ」という注意書き。ま、変更できないって事だよな、結局。


まとめとく

[1] daeをダブルクリックで開く時は

  1. [New Inherited]: 新しいシーンを作って、そのシーンからのリンクとしてdaeを扱う。daeはそのまま。変更は、シーンファイルの方に記述する。
  2. [Open Anyway]: ただ中身を見るだけ。変更不可。

まーどっちにしても、daeには変更は加えられないんだがな。つまり、

[2] daeを他のシーンに追加する時は

  1. 変更を加える必要がない時にはそのままdaeを繋げていい。
  2. 変更を加えたものを繋げたい時には、いったんtscn(などのシーン形式)にしてセーブしておく必要がある。[New Inherited]しろって事!

という事。