Locomotion system を自作するためのガイド(草稿)
locomotion system を作成する基礎である player base tracking の解説が書かれました。 http://vrchat.wikidot.com/worlds:guides:player-tracking (まだブラッシュアップ中) いま書いてある範囲は読み解けたので、 自分の備忘録を兼ねて周辺の情報と関連付けて簡単な説明を書きました。
この文書だけでは作れないので、 これを参考に上記ページを読んでいただければと思います。
locomotion system は、元から用意されているプレイヤーの移動操作を上書きするもの
- そのように界隈の人が勝手に呼んでいる。
- climing mechanics by CyanLaser (壁上り機構)はその実現の一つ
任意の locomotion を実現するには 基本的には teleport player すればよいだけ
問題は teleport position の算出
- locomotion メカニズムによる移動前の、前フレームでの player base を正確に知る必要がある
- これを実現するのが player base tracking という仕組み
- この tracking は「プレイヤーなどオブジェクトの移動を把握しつづけること」という意味
- base tracking と略記されることもあり
- player base が分かったら、それに今のフレームで移動させたい量を加算した場所に TeleportPlayer すればよい
player base tracking の基礎部品として player camera tracking を使う
- (なので前提としてそれを知っている必要がある)
- これはプレイヤーの視界を提供するカメラを tracking するもの
camera tracking の基礎は "Screen Space - Camera" 設定の canvas
"VRChat Vector Math"
- 親子構造を持たせた GameObject の transform と VRC_SceneResetPosition を使うとベクトル計算ができる
- http://vrcprog.hatenablog.jp/entry/technique-vector-mathmatics
player base 算出原理
- 現在の(=前フレームの) player camera の位置を保存する
- 一時的に player を既知の位置に移動させる
- その時の player camera の位置を調べる
- その camera 位置と一時的な player base 位置(これは前述の既知の位置)の両方から、その差分ベクトルを求められる
- 保存しておいた camera 位置に、この差分を加算すると、前フレームでの player base を算出できる
- 算出した場所に player を移動させて元に戻す
locomotion mechanics への発展
- 上記手順でプレイヤーを元に戻す際に、別途作り出したベクトルを加えた場所に移動させることで、任意の locomotion が作れる。
作成作業にあたって必要なもの
- Animation, Animator component, Animation Event の知識
- uGUI, UI Event の知識 (Button だけで OK)
- Standard Assets
- Toybox v2 by HardLight
- PlayerTracking プレハブで使用している範囲
- camera tracking の scale 調整部分
- それに含まれる毎フレーム動かすイベント機構
- もちろん同等のものを自作してもよい
- PlayerTracking プレハブで使用している範囲
- EasyEventsEditor by Merlin