別のやり方もあると思いますが
Mathf.Clampを利用します(オブジェクトとか変数の動きに制限をつけれる)
C#
1
2Vector3 roteuler;
3
4void Start ()
5{
6 roteuler = new Vector3(transform.localEulerAngles.x, transform.localEulerAngles.y, 0f);
7}
8
9void Update ()
10 {
11 float mouseInputX = Input.GetAxis("Mouse X");
12 float mouseInputY = Input.GetAxis("Mouse Y");
13
14 roteuler = new Vector3(Mathf.Clamp(roteuler.x - mouseInputY, -80, 80), roteuler.y + mouseInputX, 0f);
15 transform.localEulerAngles = roteuler;
16 }
カメラにはスクリプトは必要ありません
このスクリプトを空のオブジェクトにアタッチして、
カメラをそのオブジェクトの子にします。
そして、カメラが子のオブジェクトの座標をターゲットと一緒にします
###スクリプトの説明(初心者なので変な部分が多いです
C#
1Vector3 roteuler; roteulerという名前でvector3を宣言
2
3roteuler = new Vector3(transform.localEulerAngles.x, transform.localEulerAngles.y, 0f); 宣言したroteulerに、 new vector3(transform....を入れる(?)
C#
1float mouseInputX = Input.GetAxis("Mouse X");
2float mouseInputY = Input.GetAxis("Mouse Y");
3これは特に変わらないです
C#
1 roteuler = new Vector3(Mathf.Clamp(roteuler.x - mouseInputY, -80, 80), roteuler.y + mouseInputX, 0f);
2transform.localEulerAngles = roteuler;
3
4roteulerには、Startの時点でオブジェクトのlocalEulerAngles.xとyが入ってるので
5それを操作
6XにはMathf.Clamp(roteuler.xにmouseInputYを引くが、-80から80までに制限)
7Yにはroteuler.yにmouseinputxを足す;
8Zには回転させないために0f;
9
10そして、オブジェクトlocaleuleranglesをroteulerと同じにする
でもこれだと回転スピードがちょっと遅いので
C#
1roteuler = new Vector3(Mathf.Clamp(roteuler.x - mouseInputY * Time.deltaTime * 200f, -80, 80), roteuler.y + mouseInputX * Time.deltaTime * 200f, 0f);
これでいいと思います
この場合-80と80に制限してますが、
C#
1public float minangle = -80;
2public float maxangle = 80;
3
4Vector3 roteuler;
5
6void Start () {
こうして、mathf.clamp内の-80と80をminangleとmaxangleに書き換えれば、
Inspectorからでも制限角度を変えれます
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/11/16 09:05