nijigenerateシェル
Utataneでは、通常の伺かシェルと一緒にnijigenerateのパペットを任意で使用できます。
ほかのベースウェアでもシェルを使用できるよう、通常のsurface*.pngは残したまま、
次のファイルをシェルのディレクトリへ配置します。
puppet.inp: nijigenerateから書き出したパペットnijigenerate.json: 表示範囲、サーフェス対応、マウス反応の設定
一通りの設定を含む
nijigenerate.sample.jsonを雛形として利用できます。
パペットと同じ場所へコピーし、nijigenerate.jsonへ改名してください。
スコープ0では、puppet.inpとnicxliveランタイムの両方が見つかった場合に
nijigenerateレンダラーを使用します。どちらかがなければ通常のシェル表示へ
フォールバックします。
パペットにBody::RollとBody::Breathが存在する場合、待機中の揺れと呼吸を
Utataneが自動で動かします。設定ファイル、サーフェス対応、マウス反応で明示した
値は自動値より優先されます。
{ "viewport": { "width": 420, "height": 720, "contentScale": 0.96, "contentOffsetX": 0, "contentOffsetY": 0, "interactionOffsetX": 0, "interactionOffsetY": 0, "interactionScaleX": 1, "interactionScaleY": 1 }, "pointer": { "xParameter": "Interaction::LookX", "yParameter": "Interaction::LookY", "centerX": 171, "centerY": 155, "rangeX": 150, "rangeY": 145, "response": 0.35, "restoreMilliseconds": 180 }, "parameters": { "Expression::Smile": 0 }, "surfaces": { "105": { "Expression::Smile": 1 } }, "reactions": [ { "event": "doubleClick", "region": "Head", "button": 0, "transitionMilliseconds": 140, "durationMilliseconds": 2500, "restoreMilliseconds": 280, "parameters": { "Expression::Smile": 1 } } ]}viewport.widthとviewport.heightは、拡大・縮小前のウィンドウサイズを
ポイント単位で指定します。viewport.contentScaleは、変形時に制作用キャンバスの
外へ出るパーツのための余白です。contentOffsetXはパペットを右へ、
contentOffsetYは下へ移動します。既定値は順に420、720、0.96、0、0です。
interactionOffsetXとinteractionOffsetYでは、通常シェルの当たり判定を
パペットへ個別に位置合わせできます。省略した場合は対応するcontentOffsetを
引き継ぎます。interactionScaleXとinteractionScaleYは、通常シェルの
キャンバス左上を基準として当たり判定を拡大・縮小してからオフセットを適用します。
どちらの既定値も1です。
pointerは、通常シェルの元座標におけるカーソル位置をnijigenerateの2つの
パラメータへ対応させます。centerXとcenterYの位置が値0になり、そこから
rangeXとrangeYだけ離れると-1または1になります。Yの正方向は上です。
responseはマウス移動ごとの追従の滑らかさ、restoreMillisecondsはカーソルが
外れたあと正面へ戻る時間です。
dragは、指定したregion内から始まる左ドラッグを、2次元のparameterへ
渡します。そのドラッグ中はウィンドウを移動しません。rangeXとrangeYは、
パラメータ値が1になるまでの移動距離と向きを通常シェルの元座標で指定します。
左または上へ引いたときに値を増やす場合は負数にします。マウスを離すと
restoreMillisecondsで指定した時間をかけて(0, 0)へ戻ります。
parametersには通常状態の値を指定します。surfacesの数値キーは、
SakuraScriptのサーフェスIDをパラメータ値へ対応させます。
reactionsで使用できるeventは、down、up、click、doubleClick、
multipleClick:N、enter、leave、hover、move、dragStart、dragEndです。
moveは、同じ当たり判定上をカーソルで撫でている間に発生します。regionは
通常シェルの当たり判定名と大文字・小文字を区別せずに照合します。省略した場合は
すべての領域に一致します。buttonはAppKitのマウスボタン番号で、省略も可能です。
パペットの作成
Section titled “パペットの作成”Utataneが操作できるのは、書き出したパペットに存在するパラメータだけです。 待機用の2つを除き、パラメータ名は設定ファイルで変更できます。最小構成として、 次のパラメータがあると便利です。
Body::Roll: 範囲-1〜1。待機中の左右の揺れBody::Breath: 範囲0〜1。待機中の呼吸Interaction::Pet: 範囲0〜1。当たり判定を撫でたときの変形Interaction::Cheek: 2次元で範囲0〜1。頬を引っぱったときの変形- 表情用パラメータ: 範囲0〜1。サーフェス対応やマウス反応に使用
- 任意で
Interaction::LookXとInteraction::LookY: 範囲-1〜1。視線追従
アニメーションを作ったあとでパーツを別ノードへ分離した場合、必要に応じて
元の親と同じBody::RollおよびBody::Breathの割り当てを追加してください。
たとえば前髪だけを分離して割り当てを直さないと、待機アニメーション中に頭から
ずれて見えます。
簡単な髪撫で反応では、Interaction::Pet = 1に前髪の小さな変形を割り当て、
move反応から表情と一緒に有効化します。指定した通常シェルの当たり判定内で
カーソルを動かし続けると反応が維持され、動きを止めると通常状態へ戻ります。
ローカルでの確認
Section titled “ローカルでの確認”nicxliveをビルドまたはインストールし、書き出したパペットの隣へ設定ファイルを 配置します。外部パペットはシェルへコピーせず、次のように確認できます。
UTATANE_NIJIGENERATE_PUPPET=/absolute/path/to/puppet.inp \UTATANE_NICXLIVE_LIBRARY=/absolute/path/to/libnicxlive.dylib \/absolute/path/to/Utatane.app/Contents/MacOS/Utatane外部パペットを指定した場合も、当たり判定とフォールバック表示には選択中の
ゴーストの通常シェルを使用します。反応を調整する前に、Utataneの当たり判定表示を
使ってinteractionOffsetX、interactionOffsetY、interactionScaleX、
interactionScaleYを合わせてください。
pointerブロックは任意です。視線や顔をカーソルへ追従させない場合は、設定から
削除できます。髪撫でなど、当たり判定を使った反応はそのまま動作します。