主なコンテンツ

〜主なコンテンツ〜

1. Unityで製作したゲームと製作Tips
  1. 三月精チャレンジ(東方Project二次創作)
    1. 作り方
  2. 英語学習2D(オリジナルスマホアプリ)
2. UE4
3. ゲームアプリ見学
4. Bitbucket & SourceTreeでの一連の流れ
  1. 前半
  2. 後半
5. Tips
  1. UnityのTips
  5. SQL文のTips
  6. Final IK
  7. GearVR+Unity

2016年11月13日日曜日

Final IKについて(その10)

■Aim IK Redirecting Animation




  • Aim IKをアタッチ(動画のinspector古い
    • Clamp Weight、Clamp Smoothing、Tolerance(許容誤差)を0
    • Use Rotation Limitsのチェックを外す
  • ボーンを追加し、背骨(Spine)と首(Neck)を指定する
  • Last Spine Bone に子オブジェクトを追加する
    • ここでは首に子オブジェクトを追加するらしい
    • 座標はすべて0
    • これをAim IK のAim Transformに指定する
    • 動画中触れられないが、AxisはAim Transformの向きに合わせる(第3回のチュートリアル参照)

スクリプトの作成

  • 名前空間にusing RootMotion.FinalIK;
  • このころのinspectorにTargetの項目がないから、処理を自作している
  • aimIK.solver.IKPosition = target.position + offset;とすることで、スクリプトでAim先を調整できるようにする
  • これを応用することで、Aim先にレイを飛ばし障害物を考慮したアニメーションが可能になる
  • 完成品のスクリプトは動画の説明文にあり、動画内では解説しない

Final IKについて(その7〜9、10)

■Custom IK Rigs
CCDコンポーネントを使うことで、多脚の脚や戦車の砲台などもIKでコントロールすることができる。

■Full Body Biped IK Troubleshooting
後半は最初の回と似たような内容だった

■UMA Integration
スクリプトでFBBIKをaddComponetするときの注意点

■Interaction System Basics
第4回とほぼ同じ

■Combining IK Solvers (Aim + FBBIK + LookAt)
おさらい&内容が古いので割愛

  • 前回のAimのキャラクターにFBBIKをアタッチ
  • guaranteeの意味は保証
  • initiatedの意味は開始
  • budgeの意味は身動きする
  • LookAtIK初登場
    • Hand Weightを1
    • Headに頭を指定


■Interaction System Part 2
Interaction ObjectのEventsのMessageを使って、特定オブジェクトにメッセージを送る(メソッドを呼び出す。IEnumeratorも呼べる)
ボタンを押したときにボールを離すこともやる。

■Interaction System Part 3
アニメーションとの連動

■Interaction System Part 4
相互干渉範囲の指定

Final IKについて(その6)

■FBBIK Grounder




  • Full Body Biped IK (以降FBBIKと略される)のアタッチされたキャラクターにGround FBBIKをアタッチする。(検索では略語になっていない
  • 歩きたい場所のレイヤーを指定する(動画ではDefaultとした)
    • キャラクターのレイヤーは除外すること
      *excludeの意味は除外する
  • IKに歩行するキャラクター(=キャラクター自身)を指定する
  • ちなみにanimatorのroot motionで歩かせると障害物を無視して進んでいった(root motionの仕様なのだと思うが情報つかめず)

パラメーターについて

  • Max Stepがオフセットの最大値を決定する
  • Predictionが大きいほど、より遠くの障害物の形状に合わせようとする
  • Pelvis speedが大きいと上下への移動が速くなるらしい(あまり実感できず)
    • Pelvisの意味は骨盤
  • Rotation Solverが有効になっていると、キャラクターの回転に合わせて壁や天井の地形にもフィットするようになる
    • キャラクターの上方向が常にVector3.upであるなら、この機能は無効にしたほうが良い
  • Spineに要素を追加し、肩などの部位のweightを設定すると、段差や坂を登るときその角度に合わせて体が曲がるようになる
    • キャラクターが坂を向いているときのみ機能するらしい(判定は甘そう)

2016年11月12日土曜日

Final IKについて(その5)

■Full Body Biped IK - Linking Effectors to Objects

*前回の内容と似ているが、この回では簡単なスクリプトを書く




  • Full Body Biped IKをアタッチ(厄介なことに動画のinspectorは旧式
  • Cubeを配置し、コライダーを削除する
  • ゲームをいったん再生状態にする
  • 右手と左手のEffectorのWeight PositionとRotationを1にする
  • 箱を持った状態になるよう、手の位置や角度を調整する
  • Full Body Biped IKにより手の位置は固定できているが、指の位置は固定できない
    • そこで、手の調整が終わったらゲームの再生を一時停止にする
      • 重要なのはAnimatorの非アクティブなので、こちらはあまり気にしなくてよい
    • このとき、Animatorを非アクティブにしないと調整できない(Animatorに上書きされる)
    • この状態で指のボーンを調整する(ゲームの再生をやめれば元に戻る)
  • 調整が終わったら、両手をコピーする
  • ゲームの再生を終える
    • ボーンの調整はかなり時間のかかる作業なので、前回同様キャラクターを複製して編集したほうが無難に思う
  • コピーした両手をCubeの子オブジェクトにする
    • 位置情報のみで視覚的には何も表示されない

スクリプトの作成

  • 名前区間にusing RootMotion.FinalIK;
  • 作成したスクリプトをキャラクターにアタッチ
  • 指先を再現するためには、同梱されている「Hand Poser.cs」をアタッチし、Pose RootにCubeの対応する手の子オブジェクトを指定する 


2016年11月11日金曜日

Final IKについて(その4)

■InteractionSystem Part 1




  • Full Body Biped Ikをアタッチ
  • 球体のオブジェクトを用意
    • コライダーを削除
    • Interaction Objectをアタッチ
  • Interaction Objectの設定
    • Weight Curveのsizeを1にして、設定を入力できるようにする
    • TypeはPosition Weightのままで良く、Curveはクリックして次のように設定する。このとき、キーはダブルクリック(もしくは右クリック>Add Key)で追加できる。キーを右クリック>Edit Keyを使うと直接数値を入力出来て便利。
  • キャラクターに戻り、Interaction System Test GUIをアタッチ(これにより、Interaction Systemもアタッチされる)
  • Interaction System Test GUIの設定
    • Interaction Objectに先ほどの球体を指定する
    • Effectorsのsizeを1にして、Left handにする
  • ゲームを再生するとゲームビューにボタンが追加されている。このボタンを押すと、球に手を伸ばす動作が再生される。
  • 球体に戻り、Interaction Objectの一番下にあるEventをsize1にする
    • timeに0.5、ポーズにチェックを入れると指定時間で一時停止するようになる
  • Multiplierのsizeを1にする
    • Multiplierを1にする(これが影響度なので、0のままだと何も起こらない)
    • ResultをRotate Bone Weightにする(Rotation Weightでもいいらしい)
    • これで再生すると、手を捻って触れようとする。この回転はInteraction Objectがアタッチされている球体のRotationに依存している。xの向きの逆を向こうとしているように思える

  • 再生中に編集した設定は、コンポーネント名を右クリック>Copy Componentしておけば、再生後に再度右クリックで値をペーストできる


球体の特定の位置に手を置きたい場合

  • キャラクターを複製する
  • 複製した手のパーツだけを球体の任意の位置に移動させ、指も含めて手の形を子のみの状態に調整する
  • 手を球体の子オブジェクトにする
  • 複製したキャラクターを削除する
    • このとき、子オブジェクトにした手も見えなくなるが問題ない(親のマテリアルがなくなったため透明になった?)
  • 子オブジェクトにした手にInteraction Targetコンポーネントをアタッチする
    • Effector Type をleft handにする
    • この状態でゲームを再生しボタンを押すと、先程の手の形を再現するようになる
  • キャラクターの手にHand Poserコンポーネントをアタッチする
  • 球体のInteraction ObjectのMultiplierのsizeを2にする
    • 追加した要素のResultをPoser Weightにする
  • ゲームを再生すると、球体に手を置いたとき指の動きが固定される
    • ここで球体の子オブジェクトの手の形を修正する
    • 修正が終わったら、手の子オブジェクトをコピーする
    • ゲームの再生を終え、手の子オブジェクトを削除してから、先ほどコピーした手のオブジェクトをペーストし、球体の子オブジェクトにし直す

キャラクターの位置が変わったとき不自然のないように修正

  • 球体子オブジェクトのInteraction TargetのPivotに球体を指定する
  • これによりキャラクターの位置に合わせて、手を置く位置が変わる。尚、これは手を伸ばしたときの話であり、ボールに触れた状態でキャラクターを移動させても手の位置は変わらない
  • Rotate Onceのチェックを外すと、常に位置を修正するようになる。

Position Offset(実演無し)

  • 球体のInteraction ObjectのWeight Curveに要素を追加し、Typeをposition offset Yにする
  • Curveを0.25秒のとき値が0.25くらいになるようにする(形は動画参照)
  • Position Offset Spaceに何か指定すればそちらをオフセットにできるといっているが、実演無し
  • 試しに球体を指定してみたところ、2回目以降は球体が回転しなくなった(手を置く位置が再現されなくなった)

Reach

  • 手の動きを制限できるようだが、良く分からず

ボールを取る

  • 球体のInteraction ObjectのEventをポーズからpick upに変える
  • これによりボールを取って、キャラクターの手の子オブジェクトにすることができる

Final IKについて(その3)

■FINAL IK TUTORIAL - Basics of Setting Up AimIK




  • Aim Ikコンポーネントをアタッチ
  • Aim Transformには銃や手などを指定する。銃であれば先端に空の子オブジェクトを配置し、それを指定するとよい。
  • Aim Transformの下にAxisがあるので、これをAim Transformに指定したオブジェクトのローカル軸と合わせる
  • Bonesで指定できるボーンを追加できるので、ここにspine(背骨)のボーン(3つある?)と、neck(首)のボーンを指定する
  • この時点でゲームを再生すると、ターゲットが自動的に用意されテストすることができる。Mecanimeでアニメーションを再生していても銃口はターゲットを向いている。
  • この状態だと体がのけぞるので、Animatorの修正が必要。
    • UpperBodyレイヤーを作成し、アニメーションを追加
      • 元のレイヤー:Standing Breathe(腕を下げている)
      • 追加したレイヤー:Standing Front(銃を構えている)
    • projectに「Avatar Mask」アセットを作成(Upper Bodyと名付けた)
    • インスペクターで下図のように下半身を無効にする。(緑の部分のみ再生:参考
    • 先程作成したマスクに指定し、レイヤーのweightを1にする

    • 背骨の影響度が1だと背骨もターゲットに向くような感じになり、かなり不自然になる。影響度は低めにして姿勢が崩れないようにした方が自然。
    • 標的が真後ろ近くにあるとかなり強引に腰をひねってしまう。Clamp Weightを0.5くらいにすると自然な角度で必要以上に追従しなくなる。
    • 腕が不自然なのは後で修正する

Pole Targetの解説

  • Game Objectを新たに作成し、Pole Targetに指定する
  • ターゲットのAxisの時と同様に、Pole Axisを設定する
  • Pole Weightを1にする
  • これにより、追従する軸を追加することができる(ターゲットを狙いながら体を45°傾けるなど)

更に修正

  • Upper Arm, Fore Arm, Handのボーンを更に追加する
    • どうもこれは、子オブジェクトである必要がありそう(親子関係の不明な孫オブジェクトは指定できない模様) 子オブジェクトが複数(兄弟オブジェクト)ある場合は、それを無視して孫オブジェクトを指定できない模様。
    • 連なったボーンになる必要がある模様

2016年11月10日木曜日

Final IKについて(その2)

■FINAL IK TUTORIAL - FullBodyBipedIK Inspector




  • Position Weightで位置を動かす
  • Rotation Weightで回転させる
  • これは複数の個所を同時に固定することも可能
  • 度々出てくるsolverはIT用語で、目的の値を逆算する機能のこと
  • インスペクターの変数名にカーソルを乗せると詳しい説明が表示される
  • コンポーネント名のところ右クリックで、ユーザーマニュアルなども参照できる
  • 「Fix Transform」「Root Node」とその下の「Weight」「Iteration(反復)」「use Thigh(タイ=大腿)」についての解説(聞き取れず)。実演しなかったので、あまり気にしなくても大丈夫かも。
    • Fix Transform:強制的に姿勢を矯正する機能
    • Root Node:中心となるソルバ。WeightとIterationは影響力。
  • Body以外にはBend Goalというパラメータがあり、これにオブジェクトを指定することで、その位置に引っ張られる感じにできる
  • 分からないところは、コンポーネント右クリックでユーザーマニュアルへ。対応するコンポーネントのマニュアルに飛べるよう。

参考
  • その1(UnityのHumanoidの仕組みやIKについて)
  • その2(AutoDeskのIKソルバについて)