🚀

XR Interaction Toolkit2.2.0へのアップデートで、XROriginのscaleによって移動速度が変化する

2022/10/21に公開

環境

  • Unity2021.3.7f1
  • Unity XR Interaction Toolkit ver2.1.1以下 → ver2.2.0へのアップデート

アップデートで起きたこと

  • Continuous Moveの速度の感覚が大きく変わった。「ゆっくりになってる??」
  • ChangeLogにこのように記述されていた

Move speed in Continuous Move Providers and line width in XR Interactor Line Visual are now scaled by the scale of the XR Origin.

  • XR OriginのscaleのよってMove Speedが変わる。

該当部分のソースコード

  • Library/PackageCache/com.unity.xr.interaction.toolkit@2.2.0/Runtime/Locomotion/Continuous/ContinuousMoveProviderBase.cs: 196 - 197
var originTransform = xrOrigin.Origin.transform;
var speedFactor = m_MoveSpeed * Time.deltaTime * originTransform.localScale.x; // Adjust speed with user scale

他のアプリではどうか

  • VRCで検証したところ、アバターの身長に関係なく速度は同じだった
    • 0.59mと1.44mのアバターで同じ経路を歩いて、時間が同じであることを検証
  • 身長の高いアバターほど、ゆっくり進んでいるように感じる

実験

XR Interaction Toolkit 2.2.0

  • 以下のようなSceneを作り、Cubeから別のCubeまでの時間を計測
XROriginのScale 所要時間
0.5 80.1s
1.0 40.5s
2.0 20.2s
3.0 13.6s
  • 速度がScaleに比例する
  • 移動する速度の感覚は、全てscaleで等しい

2.1.1以前と同じ状況にするコード

  • 以下のようなソースで元と同じ挙動に戻すことはできる
void Start()
{
    float scaleX = this.transform.localScale.x;
    var continuousMoveProvider = this.GetComponent<ContinuousMoveProviderBase>();
    continuousMoveProvider.moveSpeed /= scaleX;
}
XROriginのScale 所要時間
0.5 40.0s
1.0 40.7s
2.0 39.8s
3.0 40.3s

コメント

  • 確かにXROriginの大きさが変わっても同じ速度で歩いていると感じることに価値はあると思った。
  • だが、これだと大きさの違うアバターを使った時に、ワールド巡りをしていたらおいて行かれる、のような現象が発生する
  • この仕様を適応するかしないかも選べない仕様なので、改善してほしい

Discussion