目次
はじめに
Curvy1とは、Unity2上でスプラインカーブを扱うAssetです。
また、付属のFollowSpline3コンポーネントをアタッチすると、スプラインカーブに沿ってオブジェクトを移動することが出来ます。
しかし、Curvyではコントロールポイントの向きがオブジェクトに反映されません。
以下の例のように、自動車のドリフトや、正面を向いたまま飛び降りさせることができません。
これにより、移動方向に向かって予め振り向かせることで、VR酔いの低減が期待できます。
実装してみる
方法としては、コントロールポイントのScaleを補完する機能があるため、これを複製してコントロールポイントのRotationを補完する機能を追加します。
InterpolateScaleメソッドを改造したInterpolateRotation関数を実装する。
- CurvySplineBase.csに下記コードを追加
1 |
public virtual Quaternion InterpolateRotation(float tf) { return Quaternion.identity; } |
- CurvySpline.csに下記コードを追加
1 2 3 4 5 6 |
public override Quaternion InterpolateRotation(float tf) { float localF; CurvySplineSegment seg = TFToSegment(tf, out localF); return seg.InterpolateRotation(localF); } |
- CurvySplineGroup.csに下記コードを追加
1 2 3 4 5 6 |
public override Quaternion InterpolateRotation(float tf) { float localTF; CurvySpline spl = TFToSpline(tf, out localTF); return spl.InterpolateRotation(localTF); } |
- CurvySplineSegment.csに下記コードを追加
1 2 3 4 5 |
public Quaternion InterpolateRotation(float localF) { Transform T = NextTransform; return (T) ? Quaternion.Lerp(Transform.localRotation, T.localRotation, localF) : Transform.localRotation; } |
FollowSplineRotationコンポーネントを実装する。
- FollowSplineRotation.csを新規作成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
using UnityEngine; using System.Collections; using FluffyUnderware.Curvy; [RequireComponent(typeof (FollowSpline))] public class FollowSplineRotation : MonoBehaviour { private FollowSpline follow; private CurvySplineBase spline; // Use this for initialization void Start () { follow = GetComponent(); spline = follow.Spline; } // Update is called once per frame void Update () { transform.rotation = spline.InterpolateRotation (follow.CurrentTF); } } |