Unityに関連する記事です

設計


 TPS ゲームの制作に Cinemachine を利用することで、いくつかの方法で TPS 用のカメラが制御できます。

 そのうち、Cinemachine FreeLook Cameraは、キャラクターの進行方向に対してカメラが自動的に移動し、
キャラクターの周りを360度自由に動かせるカメラ(Orbital Transposer)です。

 ただし、Y軸の回転が制限なく行われるため、カメラが意図しない位置に移動する可能性があります

 これを解消するためには、スクリプトでY軸の回転を制御する必要があります。


LimitYRotation スクリプトを作成する


 下記のサンプルコードを提示します。
 

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

public class LimitYRotation : MonoBehaviour
{
    [SerializeField]
    private CinemachineFreeLook freeLookCam;
    
    [SerializeField]
    private float minYAngle = -45f; // 最小Y角度

    [SerializeField]
    private float maxYAngle = 45f; // 最大Y角度


    private void Update()
    {
        LimitFreeLookYAxis();
    }

    /// <summary>
    /// Y 軸方向の回転制御
    /// </summary>
    private void LimitFreeLookYAxis()
    {
        // Y軸の角度を取得
        float currentYAngle = freeLookCam.m_YAxis.Value * 180f;

        // Y軸の角度が制限を超えていたら修正
        if (currentYAngle < minYAngle)
        {
            freeLookCam.m_YAxis.Value = minYAngle / 180f;
        }
        else if (currentYAngle > maxYAngle)
        {
            freeLookCam.m_YAxis.Value = maxYAngle / 180f;
        }
    }
}


利用方法


 このスクリプトを新規のGameObjectにアタッチして利用します。
あるいは、Cinemachine のゲームオブジェクトでも問題ありません。

 freeLookCam 変数に Cinemachine FreeLook Cameraを割り当ててください。
また、minYAngleとmaxYAngleは制限したいY軸の角度を指定します。

 このスクリプトは、毎フレームの更新でFreeLook CameraのY軸の角度をチェックし、設定された最小値や最大値を超えていたらその角度を修正します。

 角度は度数法ではなく、Unity内部で使用される[0, 1]の範囲で管理されています。
そのため、角度を度数法からこの範囲に変換する必要があります(180で除算または乗算しているのはそのためです)。



 以上になります。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu



技術/知識(実装例)

2Dおはじきゲーム(発展編)

2D強制横スクロールアクション(発展編)

3Dダイビングアクション(発展編)

2Dタップシューティング(拡張編)

レースゲーム(抜粋)

2D放置ゲーム(発展編)

3Dレールガンシューティング(応用編)

3D脱出ゲーム(抜粋)

2Dリアルタイムストラテジー

2Dトップビューアドベンチャー(宴アセット使用)

3Dタップアクション(NavMeshAgent 使用)

2Dトップビューアクション(カエルの為に〜、ボコスカウォーズ風)

VideoPlayer イベント連動の実装例

VideoPlayer リスト内からムービー再生の実装例(発展)

AR 画像付きオブジェクト生成の実装例

AR リスト内から生成の実装例(発展)

private



このサイト内の作品はユニティちゃんライセンス条項の元に提供されています。

管理人/副管理人のみ編集できます