【Unity】回転する角度を制限する方法

2021年9月4日Unity

スポンサーリンク

左右キー入力でGameObjectを回転させるさせる際に、回転できる角度を制限する方法です。

完成動作

作り方(動画)

作り方(ブログ)

1.シーンに各オブジェクトを配置

1-1.以下のようにBase(赤いCylinder)とNozzle(青いCylinder)を設置する。Baseが親、Nozzleが子のオブジェクトとなるようにする。
※回転角度が制限されていることがわかりやすいようにNozzleを目印とした。NozzleはZ軸方向が先端となるようにする。
流れとしてはBaseに回転制限をするスクリプトをアタッチする。

2.回転角度を制限するスクリプトを作成

2-1.RotateLimit.csという名前のスクリプトを作成して、以下のコードを記載する。
  重要な点は25~29行目の角度を0~360から-180~180に補正するところです。
  そうしないと、32行目のif文の角度制限のロジックがうまくいかない。

using UnityEngine;

public class RotateLimit : MonoBehaviour
{
	[SerializeField]
	[Tooltip("最小角度(-180~180")]
	private float minAngle;

	[SerializeField]
	[Tooltip("最大角度(-180~180")]
	private float maxAngle;

	[SerializeField]
	[Tooltip("回転するスピード")]
	private float rotationSpeed = 1;

	// Update is called once per frame
	void Update()
	{
		// 左右キーの入力を取得
		float horizontal = Input.GetAxis("Horizontal");
		// 現在のGameObjectのY軸方向の角度を取得
		float currentYAngle = transform.eulerAngles.y;
		// 現在の角度が180より大きい場合
		if (currentYAngle > 180)
		{
			// デフォルトでは角度は0~360なので-180~180となるように補正
			currentYAngle = currentYAngle - 360;
		}
		// (現在の角度が最小角度以上かつキー入力が0未満(左キー押下)) または (現在の角度が最大角度以下かつキー入力が0より大きい(右キー押下))の時
		if ((currentYAngle >= minAngle && horizontal < 0) || (currentYAngle <= maxAngle && horizontal > 0))
		{
			// Y軸を基準に回転させる
			transform.Rotate(new Vector3(0, horizontal * rotationSpeed, 0));
		}
	}
}

3.スクリプトをアタッチ

3-1.RotateLimitスクリプトを回転角度を制限させたいGameObject(今回はBaseオブジェクト)にアタッチ

4.RotateLimitスクリプトのプロパティの設定

4-1.RotateLimitスクリプトの"Min Angle"と"Max Angle"プロパティに任意の値を設定(今回は以下の図のようにした。)
※"Rotation Speed"を大きくすると回転するスピードが速くなる。

完成

これでゲームをスタートして左右キーを押すと、Baseが回転するが、4-1で設定した角度までしか回転しない。

Unity

Posted by ton