(Unity)Tankのヘッド部分のコントロール

(今回実現する内容)

  • バーチャルカメラの動きに合わせて、ヘッド部分が旋回する。
  • ヘッド部分の旋回角度に制限を加える(Tank本体から見て、−45度〜45度の範囲内に制限する)・・・>Clamp関数の活用
  • ヘッド部分の旋回は、カメラの動きに遅れて、滑らかに追随するようにする・・・>Lerp関数の活用

(スクリプト)

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

public class HeadController : MonoBehaviour
{
    private float currentAngleY;

    private void Update()
    {
        currentAngleY = transform.localEulerAngles.y;

        // 角度が−180度から180度の範囲内に収まるようにする。
        if(currentAngleY >180)
        {
            currentAngleY = currentAngleY - 360;
        }

        // Clamp関数を使って−45度から45度の範囲内に制限する
        currentAngleY = Mathf.Clamp(currentAngleY, -45, 45);
        transform.localEulerAngles = new Vector3(0, currentAngleY, 0);

        var rotationHorizontal = Quaternion.AngleAxis(Camera.main.transform.eulerAngles.y, Vector3.up);

        // Lerp関数を使ってカメラが回転した角度まで遅れて滑らかに追随させる。
        transform.rotation = Quaternion.Lerp(transform.rotation, rotationHorizontal, 0.02f);
    }
}

(実行結果)