MRが楽しい

MRやVRについて学習したことを書き残す

MRTKのObjectManipulatorでオブジェクトを時計の針のように回転させる

本日は MRTK の小ネタ枠です。
MRTKのObjectManipulatorでオブジェクトを時計の針のように回転させる方法を記事にします。
f:id:bluebirdofoz:20211001225420j:plain

前提条件

以下の前回記事の続きです。
bluebirdofoz.hatenablog.com

時計回りに回転するオブジェクトの作成

ObjectManipulator の移動を円状に固定する制約はないので、ObjectManipulator を追って回転するオブジェクトを作成します。
LookAt を使って常に指定オブジェクトの方向を向くスクリプトを作成しました。
・LookAtObject.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class LookAtObject : MonoBehaviour
{
    [SerializeField, Tooltip("LookAt対象トランスフォーム")]
    private Transform p_LookAtTransform;

    // Start is called before the first frame update
    void Start()
    {
        
    }

    void Update()
    {
        if(p_LookAtTransform != null)
        {
            // 常に対象トランスフォームの方向を向く
            this.transform.LookAt(p_LookAtTransform);
        }
    }
}

前回のプロジェクトに新たに時計の針オブジェクトを作成します。
f:id:bluebirdofoz:20211001225442j:plain

軸オブジェクトにスクリプトをアタッチします。
LookAt の向き先に ObjectManipulator のオブジェクトを指定します。
f:id:bluebirdofoz:20211001225453j:plain

動作確認

シーンを再生して動作を確認します。
f:id:bluebirdofoz:20211001225503j:plain

ObjectManipulator のオブジェクトの動きに合わせて時計の針が回転するように動きます。
f:id:bluebirdofoz:20211001225512j:plain

ObjectManipulatorの見た目と当たり判定を別にする

より時計の針を掴んで動かしている見た目にする場合は、ObjectManipulator のオブジェクトの見た目と掴み判定を別々にします。
以下の通り、見た目の掴み位置を時計の針オブジェクトの子オブジェクトにして先端部分に重ねました。
f:id:bluebirdofoz:20211001225521j:plain
f:id:bluebirdofoz:20211001225531j:plain

ObjectManipulator のオブジェクトは実際には自由に動いてしまうので、手を離したときに見た目の位置に戻るようリセット用スクリプトを作成します。
・ResetTransform.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ResetTransform : MonoBehaviour
{
    public void ResetTransformPositionAndRotate(Transform p_TargetTransform)
    {
        this.transform.position = p_TargetTransform.position;
    }
}

作成したスクリプトを ObjectManipulator のオブジェクトに設定し、手を離したときに位置を戻すイベントを登録します。
f:id:bluebirdofoz:20211001225541j:plain

動作確認

シーンを再生して動作を確認します。
f:id:bluebirdofoz:20211001225549j:plain

時計の針の先のオブジェクトを掴んで動かしているような見た目で、オブジェクトを回転させることができました。
f:id:bluebirdofoz:20211001225557j:plain