ここから本文です

Unityで回転角度を制限する方法を教えてください

rai********さん

2014/5/411:50:28

Unityで回転角度を制限する方法を教えてください

最近Unityを始めました。C#でスクリプトを書く勉強をしています。
キーボードの操作で戦艦の砲塔が左右に旋回(回転)するスクリプトを書こうと思っているのですが、回転角度を制限しようと思ってもなかなか上手くいきません。
キーを押している間はいつまでも砲塔が回り続けるというのはキモいので、
「-60度から60度までの範囲しか回転しない」みたいにしたいんです。
回転は

float turn = Input.GetAxis("Horizontal");
transform.Rotate(0, turn * 0.5f, 0);

でやってます。
回転角度の範囲を制限するにはどういったスクリプトを書けばいいですか?
モデリングは得意なのですが、プログラミングに関してはド素人なので、よろしくお願いします。

閲覧数:
12,641
回答数:
1
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

fun********さん

2014/5/422:26:57

オブジェクトの回転角度の制限方法

-60~60のように制限したいとのことですが
扱える回転角度が0~360になっており
制限をかける関数Mathf.Clamp()には都合が悪いので
0~360<=>-180~180の相互変換が必要です

大まかな手順
① 0~360から-180~180に変換
② 入力情報を加味しMath.Clamp()で制限かける
③ -180~180から0~360に変換
④ オブジェクトに適用
といった手順で行えます

以下サンプルコードです
using UnityEngine;
using System.Collections;
public class ObjectRotateClamp : MonoBehaviour {

float maxAngle = 60; // 最大回転角度
float minAngle = -60; // 最小回転角度
float speed = 0.5f; // 回転スピード(お好みで調整してください)
void Start () {
}

void Update () {
// 入力情報
float turn = Input.GetAxis("Horizontal");
// 現在の回転角度を0~360から-180~180に変換
float rotateY = (transform.eulerAngles.y > 180) ? transform.eulerAngles.y - 360 : transform.eulerAngles.y;
// 現在の回転角度に入力(turn)を加味した回転角度をMathf.Clamp()を使いminAngleからMaxAngle内に収まるようにする
float angleY = Mathf.Clamp(rotateY + turn * speed, minAngle, maxAngle);
// 回転角度を-180~180から0~360に変換
angleY = (angleY < 0) ? angleY + 360 : angleY;
// 回転角度をオブジェクトに適用
transform.rotation = Quaternion.Euler(0, angleY, 0);
}
}

参考になれば幸いです

この回答は投票によってベストアンサーに選ばれました!

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる