CinemachineとPost Processing Stack

ムービーシーンを作るなら
・Timeline (Unity2017にて組み込み)
Cinemachine (Asset Storeにて先月から[2017.06]から提供)
Post Processing Stack (Asset Storeにて提供)
を使いたいですが(全てUnity社提供)、いまいちPost ProcessingをTimelineで変更する方法が分からなかった。

と思ったら、Cinemachine側で、Post Processingの方ので用意してくれていた。
cinemachine_post_processing

Cinemachine Brainの方にCinemachine Post FXコンポーネントを追加し。
あとは、Cinemachine Virtual Cameraにも追加し、そのカメラに切り替わる際に使いたいPost Processingを設定すればOK!
CinemachineBrainにもこのコンポーネントをつけないとなぜか動かない。

ちなみに、Post Processingの値はフェードしてくれないような気がします。

MecanimにてTriggerがtrueになる

MecanimにてTriggerを2回連続して叩く場合に、アニメーションステートに行くことが許可されていない(Can Translation To Self)と、そのトリガーが再びONになってしまう。
なので、いったんAnimatorのステートをみてトリガーを押すかどうかを判断すればOK。

if (!this.animator.GetCurrentAnimatorStateInfo(0).IsName("StateName"))
	this.animator.SetTrigger("StateName");

参考)

色味の調整

editor_ios_color

Unity Editor上で見るのと、iOSに書き出してみたら色が違った。
データ自体はpsdだけど、ためしにpngにしてカラープロファイルを切っても一緒だった。なにが悪いんでしょうか。。?ひょっとしてディスプレーのカラープロファイルの影響でそう見えただけ?
とりあえずデザインデータを書き換えずになにかできるかなと調べていたらColor Collection CurvesColorSuiteというライブラリを見つけました。
Continue…

‘.’ is not a valid texture file name on asset…

‘.’ is not a valid texture file name on asset ‘***’ on material ‘Tree02Mat__UVTest’ of renderer ‘***’. The file will be ignored

Blenderで作った3Dファイルを読み込むとたまにこのエラーが出る。
どうもBlender上で参照しているファイルが、Blenderファイルに埋め込みの場合(外部ファイルでない場合)、Unity側が画像ファイルを見つけられずに困ってしまうらしい。
blender_image_deleteBlender上で画像ファイルを消すには、UV/Image Editorを開いて、下のメニューにあるバツマークをShiftを押しながら押すと消える。そのあと画像のプルダウンから、該当のファイル名の先頭に0(ゼロ)がついていればOK。

Mecanim(Animator) + Script

Mecanimでアニメーションを付けつつ、一部のパーツをスクリプトで制御したいときにちょっとはまりました。スクリプトで制御しても動かない。。
なかなか情報が見つからなかったけど、3Dモデルのアニメーション後の情報は LateUpdate() にて取得できるので、そこで無理やり動かせば動きを制御できるとの情報をゲット。DOTweenで言えば SetUpdate(UpdateType.Late) を使えばOK!でも動きが終わるともとの3Dのアニメーションに戻るのでこれで対応できることは少ないかも。。。
Continue…

回転

Unityでのオイラー角

スクリプトとInspectorの角度が一致しないと思ったら、Unity内ではオブジェクトの傾きはQuaternionで保持しているので、0-360度の範囲を超える情報というのを持っていないようです。
UnityのマニュアルのUnityの回転と向きによると、365度と入れた場合は、5度に置き換わるため、360度+5度という情報は消えてしまうようです。

DOTweenでの回転方向

なぜかDOTweenを使って、DORotateQuaternionをした際に、45と45±360を入れた際に回転方向が逆になった。上記でいうと、360ずらしたものは同じはずなので、向きなどないような気もするけど、、、
Quaternionが複雑なのでどの場合でもこれができるのかはわからないけど、とりあえず回転方向を変えたい場合は360度ずらした数値を入れるとできました。
回転する際には1度角度を0-360の範囲で再設定したほうがいいかもしれません。

DOTweenでの複数回回転

複数回回転するには、720度などと入れても2回転はしません。
そこで、SetLooks(int)とRotateMode.FastBeyond360をつかって、やろうと思いましたが、DORotateで回すと意図しない回り方をすることがあります。
なので、OnCompleteに回転するメソッドを再度呼び出し任意の回数をしたところで抜けるようにしました。

TweenCallback RoundAction = null;
float startRotateAngleX = trans.localEulerAngles.x;

RoundAction = () => {
	if (++count > 4) return;

	startRotateAngleX += 180f;
	trans.DOLocalRotateQuaternion(Quaternion.AngleAxis(startRotateAngleX, Vector3.right), 0.15f).SetEase(Ease.Linear).OnComplete(RoundAction);
};

RoundAction();

ん〜、これだとイージングがLinerでないと変だし、一瞬止まるのでなんかもっといい方法があるような気がします。。。

アセットバンドルの書き出しがおかしい

ときどきアセットバンドルの書き出しがおかしく、表示がごちゃごちゃに崩れることがある。
おそらく、アセットバンドルのリソースが更新されているにもかかわらず、アプリ側のリソースの使い方が更新されていないような感じで、画面がグチャグチャになる。
iOSでよく起こるけど、大概Unityから再度Xcodeプロジェクトを書き出すと直る。
それでもダメな場合は、Unityを再起動。
わりと頻繁に起こるんだけど、僕だけ?