Cursor.visible = false; Cursor.lockState = CursorLockMode.Locked;
마우스를 가두기 위한 스크립트.
1. Cursor.visible = Cursor bool visible // true = 켜짐, false = 꺼짐
2. Cursor.lockState = CursorLockMode.Confined; // 게임 창 밖으로 마우스가 안감
3. Cursor.lockState = CursorLockMode.Locked; // 마우스를 게임 중앙 좌표에 고정시킴
4. Cursor.lockState = CursorLockMode.None; // 마우스커서 정상
[Header("마우스 감도")] public float mouseSpeed = 90; [Header("이동 속도")] public float keyBoardSpeed = 10; private float rotationX = 0.0f; private float rotationY = 0.0f; private float minY = -90f; private float maxY = -90f; private float _h, _v;
rotationX += Input.GetAxis("Mouse X") * mouseSpeed * Time.deltaTime; rotationY += Input.GetAxis("Mouse Y") * mouseSpeed * Time.deltaTime; rotationY = Mathf.Clamp(rotationY, -90, 90); transform.localRotation = Quaternion.AngleAxis(rotationX, Vector3.up); transform.localRotation*= Quaternion.AngleAxis(rotationY, Vector3.left); _h = Input.GetAxis("Horizontal") * keyBoardSpeed * Time.deltaTime; _v = Input.GetAxis("Vertical") * keyBoardSpeed * Time.deltaTime; transform.position += transform.forward * _v; transform.position += transform.right * _h;
1. rotationX, Y = Mouse X, Y의 Input 값을 속도에 곱한 값을 더해준다.
2. rotationY의 값을 Mathf.Clamp 함수를 통해 최소, 최대 값을 정해준다.
3. transform의 localRotation을 위에 구한 값을 적용한다.
4. _h와 _v는 키보드 입력 값으로 position의 값을 방향에 따라 더해준다.
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PreviewCamera : MonoBehaviour { [Header("마우스 감도")] public float mouseSpeed = 90; [Header("이동 속도")] public float keyBoardSpeed = 10; private float rotationX = 0.0f; private float rotationY = 0.0f; private float minY = -90f; private float maxY = -90f; private float _h, _v; void Start() { Cursor.visible = false; Cursor.lockState = CursorLockMode.Locked; } void Update() { rotationX += Input.GetAxis("Mouse X") * mouseSpeed * Time.deltaTime; rotationY += Input.GetAxis("Mouse Y") * mouseSpeed * Time.deltaTime; rotationY = Mathf.Clamp(rotationY, -90, 90); transform.localRotation = Quaternion.AngleAxis(rotationX, Vector3.up); transform.localRotation*= Quaternion.AngleAxis(rotationY, Vector3.left); _h = Input.GetAxis("Horizontal") * keyBoardSpeed * Time.deltaTime; _v = Input.GetAxis("Vertical") * keyBoardSpeed * Time.deltaTime; transform.position += transform.forward * _v; transform.position += transform.right * _h; } }
코드.
'Unity' 카테고리의 다른 글
NGUI TweenScale(UITweener.cs)의 Reset과 Play (0) | 2021.01.19 |
---|---|
유니티 메뉴창에 원하는 메뉴 띄우는 법(MenuItem) (0) | 2021.01.15 |
A*를 활용한 문제 해결 사례 (0) | 2019.11.25 |
Linecast 를 활용한 문제 해결 사례 (0) | 2019.11.18 |
Unity 물체 이동 방법 (1) | 2019.11.04 |