[Go-Unity 3D] 12. 3D 1인칭 카메라 제어 ⭐⭐
카테고리: Go Unity
Camera, Input.GetAxisRaw(“Mouse X,Y”) , 좌표,축 관계
고박사의 유니티 기초를 정리.
1인칭 카메라 제어
1.Camera
- Main Camera를 Player의 눈위치로 위치조정
- Main Camera를 플레이어의 자식으로 설정
2.스크립트 코드
1). CameraController
카메라의 이동, 회전을위한 코드작성
CameraController.cs
using UnityEngine;
public class CameraController : MonoBehaviour
{
private float rotateSpeedX = 3;
private float rotateSpeedY = 5;
private float limitMinX = -80;
private float limitMaxX = 50;
private float eulerAngleX;
private float eulerAngleY;
public void RotateTo(float mouseX,float mouseY){
// 마우스를 좌/우로 움직이는 mouseX 값을 y축에 대입하는 이유는
// 마우스를 좌/우로 움직일 때 카메라도 좌/우를 보려면 카메라 오브젝트의
// y축이 회전되어야 하기 떄문이다.
eulerAngleY += mouseX * rotateSpeedX;
// 위/아래를 보려면 x축이 회전
eulerAngleX -= mouseY * rotateSpeedY;
// x축 회전 값의 경우 아래, 위를 볼 수 있는 제한 각도가 설정되어 있다.
eulerAngleX = ClampAngle(eulerAngleX,limitMinX,limitMaxX);
// 실제 오브젝트의 쿼터니온 회전에 적용
transform.rotation = Quaternion.Euler(eulerAngleX, eulerAngleY,0);
}
private float ClampAngle(float angle,float min, float max){
if ( angle < -360 ) angle += 360;
if ( angle > 360 ) angle -= 360;
// Math.f.Clamp()를 이용해 angle이 min <= angle<=max 를 유지하도록
return Mathf.Clamp(angle,min,max);
}
}
- 마우스에따라 카메라 회전을 위한 코드
- 마우스 x,y 와 회전 x,y를 생각하면서
2). PlayerContorller 추가코드
PlayerContorller.cs
using UnityEngine;
public class CameraController : MonoBehaviour
{
private CameraController cameraController;
private void Update() {
float mousex = Input.GetAxisRaw("Mouse X");
float mousey = Input.GetAxisRaw("Mouse Y");
cameraController.RotateTo(mousex,mousey);
}
}
- cameraController 추가
- 마우스 움직임 x , y 를 매개변수로 전달해 RotateTo 실행
3). Movement3D 추가코드
Movement3D.cs
using UnityEngine;
public class Movement3D : MonoBehaviour
{
[SerializeField]
private Transform cameraTransform;
public void MoveTo(Vector3 direction){
//moveDirection = new Vector3(direction.x, moveDirection.y, direction.z);
Vector3 movedis = cameraTransform.rotation * direction;
moveDirection = new Vector3(movedis.x, moveDirection.y, movedis.z);
}
}
- 카메라의 transform를 사용
- 카메라의 방향으로 움직임
3. 정리
- X이동 -> Y축회전, Y이동 -> X축회전
- 마우스이동 Input.GetAxisRaw(“Mouse X,Y”);
- X축회전(위/아래) 최소,최대값 설정 확인하기.
댓글남기기