左右キー入力で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で設定した角度までしか回転しない。
コメント