2022/11/12

Git for Unityに切り替えた

しばらく GitHub for Unity を使ってまいりましたが、Unity2021.3.xxで不具合発生

https://github.com/github-for-unity/Unity/issues/1163 でも報告されていた。こちらの記事によるとメンテナンスは行われていないらしい。確かに2019年からの更新がない。

ということで、上記の記事でも書かれているように、Git for Unity に切り替えることにした。

インストールはREADMEに記載されている通りにやれば問題なし。GitHub for Unityをフォークしたものなので使い勝手は同じ。ちゃんとメンテされているので2021.3でも大丈夫だ。


2022/07/29

HandIKAppier for Unity

Hand IK apply on Timeline for Unity

UnityでHumanoidアニメーションIKを扱う場合、FootIKはClipにOn/Offがあるんでいいですが、HandIKの場合、普通はAnimationControllerでIKPassを有効にして、コンポーネントのOnAnimatorIK()内で処理コードを書きますよね。
じゃあPlayableDirector(Timeline)の場合は?
DirectorとAnimationControllerは排他関係にありますので、Directorで動かす場合はAnimationControllerは外しますね。OnAnimatorIK()受けるためだけに、無理やり同時使用するのも出来なくはないですが、ワーニング出るし気持ち悪いです。

今回作ったのは、モーキャプしたモーションをDirector/Timelineで再生する際にモーションのHandIKを使えるようにするスクリプトです。
Gist: https://gist.github.com/hiroshi-nishiura/9a696e2f5ba28fc82e410f8c16dc09c9

適応したいAnimatorが付いているオブジェクトもしくはその配下のオブジェクトにつければ機能します。左右それぞれのウエイト調整ができます。なぜウエイトかというと体格によっては手がターゲットに届かなくて腕がピーンってなってしまうのでどのくらい近づけるかというウエイト値になってます。
PlayableDirectorはどこにあってもいいものなので、Directorの場所もコンポーネントに教えてやります。Directorを設定しない場合は普通にOnAnimatorIK()が動きます。両対応ってことです。

Directorで動いているAnimatorでどうやってIK処理するかですが、IAnimationJobを使いました。Directorが作成するPlayableGraphからAnimatorに対応する出力にAnimationScriptPlayableノードを追加します。
このノードからJobにAnimationHumanStreamが渡ってきますので、JobのProcessAnimation()内でIK処理をやってます。
AnimationJobに関しては https://github.com/Unity-Technologies/animation-jobs-samples が参考になります。
DirectorのGraphに関しては情報がほとんどなく、ちょっと難儀しました。
因みに、AnimationControllerのGraphをいじろうとするとReadOnlyでいじれませんでした。DirectorのGraphは編集可能でよかったです。

2022/06/02

OrbitCameraController

OrbitCameraController for Unity

最近Unityでなんだかんだすることがあり、ちょっと便利なの作ったので。。

GameViewでSceneViewのようにカメラ操作が可能なスクリプトを公開
Gist URL
https://gist.github.com/hiroshi-nishiura/f70838083ad818d38911bfb77beb7557

カメラアングルが重要じゃない開発段階で、キャラの動きやポストエフェクトの確認とかでSceneViewとGameViewの切り替えが面倒。GameカメラをSceneViewに合わせてから実行とか面倒。GameView上でSceneView感覚でぐりぐり出来たらいいのに。という思いで作りました。

このスクリプトをGameカメラオブジェクトに加えると、GameView上でSceneViewとほぼ同じ感覚でカメラ操作ができるようになります。
実行時にSceneViewのアングルをGameカメラに反映させたり、終了時にGameカメラのアングルをSceneViewに反映することができるので、SceneViewとGameViewがシームレスな感じになります。

意識的に変えているところは、Altキーを押す必要があるという点と
SceneViewではできない、BallOrbitとRollが可能なところ。
後、SceneViewカメラを初期化するボタンもあります。

複数カメラにも一応対応してます。カメラの区別はTargetDisplayで判断しているので、操作を分けたい場合は、カメラのTargetDisplayを指定して、GameViewのDisplayを切り替えると別々の操作になります。