yumeの日記: Unity制作 メデューサ・ゲーム #41
--
●バグ修正
スラドのコメントでバグ報告をいただいたので、それを修正する。ありがとうございます!
・ドア上でF連打で強制停止
DOTweenが二度アイテムを置こうとして、二度目はすでにholdItemが無いので無を置こうとしてエラーが起きていた。
これはsetItem中はアイテムへのインタラクト許可をfalseにしておけばOK。
・ドアの上にアイテムを置ける#1、#3
これはドアゾーンの問題で、ドアゾーンは「入ったとき」と「出たとき」を検知していて、
入った時にミスティ側が持っているdoorZone変数に、自分自身の参照を保持させる。
出たときにミスティ側が持っているdoorZone変数をnullにする。という処理だったが
左のドアに乗っている状態(doorZone : doorA)から、そこから出ずに次のゾーン(doorB)に入る。
するとdoorZoneはdoorBになり、その状態でdoorBのゾーンから出るとdoorZoneがnullになってしまうためのようだ。
対策は……。Stay中は常に参照を上書きし続ければ大丈夫かなぁ?
・ドアの上にアイテムを置ける#2
これは「ドアゾーン上にいるとき、セーフゾーンを探す」メソッドが、本来ドアがある位置はセーフゾーンだと考えてしまっているからだ。
ちょっと厄介だなぁ。「セーフゾーンを探す」の非セーフ対象に「DoorZone」を加えると、自分自身をLineCastで検知してしまう。
linecastを飛ばす起点を自分の外側から始めればどうか。ドアゾーンは半径0.5fの円だとすると、0.6f~1.0fのあたりにLineCastすればどの方向であっても外側の4マスをチェックできる。
これでいこう。
・ブロックのスプライト
これはやっぱりそうだよねという感じで……。
例えば分銅みたいなやつだったらわかりやすいと思うのでそのようにしよう。
天側に取っ手みたいなパーツがあって、ちょっと天側がすぼんでて色合いも金属質のもの。丸い形状は鏡にも使っているけど、曲線を使うものはインタラクト、直線で構成されたものは地形とわかれることになるからわかりやすいかも。
それでも、念のため最初に出るステージにはチュートリアルのキーナビを入れておこう。
--
●Sprite Studio
・イラストをパーツに分割する
Sprite Studioは公式に日本語のドキュメント(っていうかもともと日本語のソフトなのか?)があり、それを参照すればだいたいのことは理解できそうである。
まずはイラストを準備する前段階として、どのようなイラストデータが必要かがわからないといけない。
公式曰く、
・動かす部分をすべてパーツとして切り分ける
・切り分けたパーツ同士の空白をきっちり描いて埋めておく
・できたらpsdでインポートする
psdでインポートするために、photoshop用のjsxが用意されている、とのことだったがダウンロードページを確認しても「tools.zip」がないぞ。
でも古いバージョンにはあるな……。とりあえずこれを入れてみよう。
そんで、実際にパーツを切り分けるといっても、どういうパーツをどれくらい切り分けるべきかがまだ正確に判断できないので、おおよそ切り分けて試しにアニメーションさせてみよう。
illustrator用のスクリプトもあるので、これでillustratorから直接pngを書き出し、PSDtoSS6でSpriteStudio用のファイルを出力する。
これを開くとこういう感じにインポートされた。さしあたってはうまくいってる感じだ。
枠が体より小さく表示されているが、これは右上のレイアウト情報からカンバスサイズ的なものを変えられるようだ。とりあえず800*1080に。
次の手順は……
・親子関係を構築する
これは親に子が追従するという仕組みだろう。
しかし設定してみるとなぜか位置がずれてしまう。公式Q&A曰く、アニメーションじゃなくてSetup上で編集せよとのこと。
なるほど今はアニメーションを編集中らしく、Setupに移動してから入れ替えるとうまくいった。
パーツの構成は、とりあえず:
・Loot
・LowerBody
・LegRight
・LegLeft
・UpperBody
・ArmLeft
・ForeArmLeft
・HandLeft
・Neck
・Head
・ArmRight
・ForeArmRight
・HandRight
としておいた。予想では肩のパーツや前髪や後髪、目や表情のパーツが必要だろう。指も動かす必要があるかもしれない
・原点を設定する
回転とかの原点。これは左側のセル編集ウィンドウでカチカチするだけ。
・アニメーションを作成
の前段階として、FPSと総フレーム数を設定する。ここでFPSを30としておけば、後でインポートしたときも30で動くんだろうか?
Unity側で設定が必要かもしれないな。でも一旦30にしておこう。60だとヌルヌルすぎてアニメっぽくないと思うから。
テストアニメーションとして60フレームのアニメをひとつ保存しておく。
・アニメーションを編集
公式を参照すると……:
・SpriteStudioでは、キーとアトリビュートを編集することでアニメーションを作る。
・キーとは、アトリビュートが設定されているフレームに作成される(? 微妙に日本語がおかしい)
・アトリビュートとは……アトリビュートウィンドウの一般に表示されている何か。
>単語の意味をざっくりとでもいいから定義してから進めてほしいな……。
たぶんアトリビュートというのはいろいろな値のことで、キーはアニメーションの各フレームにアトリビュートの状態を打ち込む、ということだと思う。
・優先度の設定
先に優先度を決めておかないと、Unityに入れたときおかしくなるそうだ。
親子関係を入れ替えた時点でざっくり優先度は設定されてあったようなので、今回はそのまま進める。
・キーを打ち込む
あとは……あとはUnityでもやったようなのと同じだ。
しかし……いろいろと問題がある。
さしあたっての一番の問題は、関節の接合部分を単純に回転させると輪郭があわないことだ。
Unityでアニメーションさせたときはボーンとメッシュを構築していた。同じことをやってみよう。
公式ドキュメント曰く、
・メッシュを設定
左のセルリストから右クリック>メッシュ編集
オートでメッシュをあてる設定がデフォルトなので、そのまま適用すると、セルの名前末尾に(メッシュ)とつく。そうしたらそれはメッシュのあるセルだそうだ。とりあえず一個一個ポチポチやる。
・ボーンパーツをレイアウトする
まず「ジョイントパーツ」を追加する。
ジョイントパーツにメッシュを追加する。
ジョイントパーツにボーンを追加する。
ボーンにジョイントパーツを追加する。
新たなジョイントパーツにメッシュを追加する……という感じで関節のようなものが作れるらしい
・ジョイント
・メッシュ
・ボーン
・ジョイント
・メッシュ
・ボーン
・ジョイント
・メッシュ
・ボーン
という具合か。いちいちジョイントとボーンを置いていくのが結構手間だなぁ。
それでウェイトをオートで設定して……とやってみるがうまくいかない。えー。
うーん……。仮にこれでうまくいくとしても、ボーンやメッシュの生成だけで結構ひと手間になってしまうとなると、Unityの方がボーン埋め込むのは簡単で速い。
spineを使ってみるか……。
--
●Spine
Spineの方はボーンの埋め込み方も、ウェイトの調整もかなりUnityに似ていて、あっさり使える感じになったが、まだまだアニメーションとかどうするかうまく操作できてない。
それはそれとして、まず、絵柄に対して必要なパーツをどう描くか、というのが結構むずかしい。一番厄介なのは腕で、普段は普通に下げている状態だけど、肩の高さやそれ以上にあげる、ということをしたいとなると、肩をどう処理するかが悩ましい。
スプライトの回転だけでこれをどうにかするとしたら、肩の付け根をうまく見せる方法としては:
・腕のパーツ全体を罫線で囲ってしまう
・肩パットとかマフラーとかで肩を隠す
が考えられるけど、上は絵柄の問題であまりしたくなくて、下はそんな服のキャラじゃないとできない。
となるとメッシュをゆがませて処理することになるけど、これも難しい。肩が思ったような形にゆがんでくれないからだ。
サンプルのアニメーションとかが参考になるかと思ったけど、どれも肩を隠してるパーツがあったりしていまいち参考にならない。もっといろいろ作例を探してみよう。
Unity道場2D編のキャラがかなり近い感じはある。これは首のパーツに塗りをおいて、右腕のパーツは首のパーツで隠れるという寸法のようだ。しかし顔の前に腕が出せないなぁ。
Unity制作 メデューサ・ゲーム #41 More ログイン