⚖️

Unityでジンバルを作る

2024/12/06に公開

この記事はUniMagic Advent Calendar 2024の6日目の記事です
相変わらずゆにまじに関係なさそうな話題ですが、一応関係あります
(そろそろネタが尽きてきました)


VRChatにはタブレットなど、ユーザーが自由にピックアップ可能なオブジェクトがたくさんあります
この際、UIなど左右へ傾かないように制限をかけたいことがあるため、そのためのジンバルを実装してみました

ソースコード

public class Gimbal : MonoBehavior
{
    [SerializeField] private GameObject rootGameObject;

    public void Update()
    {
        ApplyGimbal();
    }

    private void ApplyGimbal()
    {
        var forwardVector = rootGameObject.transform.forward;
        var globalUp = Vector3.up;
        var targetRotation = Quaternion.LookRotation(forwardVector, globalUp);
        rootGameObject.transform.rotation = targetRotation;
    }
}

解説

        var forwardVector = rootGameObject.transform.forward;

オブジェクトの前方向きのベクトルを取得します

        var globalUp = Vector3.up;

グローバルの上向きベクトルを取得します

        var targetRotation = Quaternion.LookRotation(forwardVector, globalUp);

前方の方向を回転軸として、グローバル座標系の上を向くように回転を計算します

        rootGameObject.transform.rotation = targetRotation;

オブジェクトへ回転を反映します

おわりに

おそらく私の調べ方が悪いのですが、これを作るのに1日くらいかかったので、意外と簡単に作ることができて良かったです

宣伝

魔術学舎United、略してUniMagic(ユニマジック)とは、VRの世界に関係の深い技術を学ぶ学園空間型のイベントです。
15名~18名程度で構成されるクラスで、2週間の授業と1週間の修了制作を通して、技術についての知見を深めていきます。
https://twitter.com/UniMagicVRC

Discussion