たくあんポリポリ

勉強したことを載せていきます。最近、技術系の記事はZennに書いています。(https://zenn.dev/chittai)

【Unity】LookingGlassで奥行きを表現する方法

下記動画のように、LookingGlassで奥から向かってくるような表現方法について説明します。

使用したツール / 環境

  • Unity 2017.3.1f1
  • UniVRM v0.49

使用したキャラクター

自作です。
hub.vroid.com

どんな仕組みで実現しているのか

これは、LookingGlassに表示される範囲内(緑色の枠内)にキャラクターを小さいサイズで置き(遠くにいるように見える)、時間の経過と共にScaleとPositionをいい感じにいじることで実現しています。Scaleは大きく、PositionはY座標を下に変更しています。これらの処理はスクリプトで処理していて、書いたスクリプトをキャラクターにアタッチしてUnityのエディター上で実行すると下記の様に表示されます。
f:id:c_taquna:20190211172819g:plain

これをLookingGlassでみると上に貼り付けたTweetの様に見えるわけです。

コードの説明

ポイントは3つあり、1. 開始のScale/Positionを決める。2. 最後のScale/Positionを決める。3. 最初の状態から最後の状態までLerpで変化させる。になります。1.2. はLookingGlassを見ながらキャラクターを移動させるとわかりやすいです。

コード全体

3. 最初の状態から最後の状態までLerpで変化させるための処理ですが、ポイントとしては下記のコードです。そのままですね。

transform.position = Vector3.Lerp(_girlPosition, _girlMaxPosition, _propotion);
transform.localScale = Vector3.Lerp(_girlStartScale, _girlMaxScale, _propotion)


これは、大きくなる途中で速度を変えたほうが奥から向かってくる表現としてよりリアルに見えたので、コルーチンの処理の中で一定の時間が経過した時に速度が早くなるようにしています。

if (_propotion >= 0.1f)
    _speed = 0.025f;
_propotion += _speed;

感想

他にもカメラを揺らしたり、表情を変えたりしていますが決して難しい実装ではありません。やっていることは簡単な実装なんですが、大事なのは”何を、どう見せたいか”かつ”どうやって見せるのか”を試行錯誤していき、表現する方法を考えていくと面白いかと思います。