前回の記事
前回の記事で作ったFPS視点のスクリプトの問題点を改良します。
前回のスクリプトの問題点
- 視点が一回転できてしまう。
ので縦方向の視点操作を制限しましょう。
以下が前回のPlayerController.csを改良したものです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerController : MonoBehaviour { public GameObject Player; public GameObject Camera; public float speed; private Transform PlayerTransform; private Transform CameraTransform; private float ii; // Use this for initialization void Start () { PlayerTransform = transform.parent; CameraTransform = GetComponent<Transform>(); } // Update is called once per frame void Update () { float X_Rotation = Input.GetAxis("Mouse X"); float Y_Rotation = Input.GetAxis("Mouse Y"); PlayerTransform.transform.Rotate(0, X_Rotation, 0); ii = Camera.transform.localEulerAngles.x; if (ii > 334 && ii < 360 || ii > 0 && 79 > ii) { CameraTransform.transform.Rotate(-Y_Rotation, 0, 0); float kk = Y_Rotation; } else { if (ii > 300) { if (Input.GetAxis("Mouse Y") < 0) { CameraTransform.transform.Rotate(-Y_Rotation, 0, 0); } } else { if (Input.GetAxis("Mouse Y") > 0) { CameraTransform.transform.Rotate(-Y_Rotation, 0, 0); } } } float angleDir = PlayerTransform.transform.eulerAngles.y * (Mathf.PI / 180.0f); Vector3 dir1 = new Vector3(Mathf.Sin(angleDir), 0, Mathf.Cos(angleDir)); Vector3 dir2 = new Vector3(-Mathf.Cos(angleDir), 0, Mathf.Sin(angleDir)); if (Input.GetKey(KeyCode.W)) { PlayerTransform.transform.position += dir1 * speed * Time.deltaTime; } if (Input.GetKey(KeyCode.A)) { PlayerTransform.transform.position += dir2 * speed * Time.deltaTime; } if (Input.GetKey(KeyCode.D)) { PlayerTransform.transform.position += -dir2 * speed * Time.deltaTime; } if (Input.GetKey(KeyCode.S)) { PlayerTransform.transform.position += -dir1 * speed * Time.deltaTime; } } } |
これでいい感じに角度が制限させると思います。