팀프로젝트가 끝나서 무작정 따라서 만들어서 유니티 공부를 했습니다.
using UnityEngine;
public class Player : MonoBehaviour
{
private Rigidbody rb;
[Header("Movement Data")]
public float moveSpeed;
public float rotationSpeed;
private float verticalInput;
private float horizontalInput;
[Space]
public LayerMask whatIsAimMask;
public Transform aimTransform;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void Update()
{
UpdateAim();
verticalInput = Input.GetAxis("Vertical");
horizontalInput = Input.GetAxis("Horizontal");
// 뒤로 움직일때 움직임 예외사항
if (verticalInput < 0)
horizontalInput = -Input.GetAxis("Horizontal");
}
private void FixedUpdate()
{
Vector3 movement = transform.forward * moveSpeed * verticalInput;
rb.velocity = movement;
transform.Rotate(0, horizontalInput * rotationSpeed, 0);
}
private void UpdateAim()
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); // 마우스 위치에서 레이를 쏴서 정보를 받아옵니다.
RaycastHit hit;
if(Physics.Raycast(ray, out hit, Mathf.Infinity, whatIsAimMask))
{
float fieldY = aimTransform.position.y;
aimTransform.position = new Vector3(hit.point.x, fieldY, hit.point.z); // y축이 변경되어 땅으로 박히는 현상이 일어나서 y축을 고정 시켰습니다.
}
}
}
FixedUpdate()
프레임 기반으로 호출되는 Update와 달리 Fixed Timestep에 설정된 값에 따라 일정한 간격(Default : 0.02sec)으로 호출된다! 물리 효과가 적용된(Rigidbody) 오브젝트를 조정할 때 사용된다. Update는 불규칙한 호출임으로 물리충돌 검사로는 상대적으로 부적합하다.
Update()
스크립트가 활성화(enabled) 상태일 때, 매 프레임마다 호출된다! 주기가 일정하지 않아 물리효과가 적용되지 않은 오브젝트의 움직임이나 단순한 타이머, 키 입력을 받을 때 사용된다!
LateUpdate()
모든 Update 함수가 호출된 후, 마지막으로 호출된다. 주로 오브젝트를 따라가게 하는 카메라와 같은 곳에 자주 사용된다
참고 vlog
https://velog.io/@ymsection/Unity-FixedUpdate-Update-LateUpdate-%EC%B0%A8%EC%9D%B4%EC%A0%90
'부트캠프 > Unity [ 스파르타 ]' 카테고리의 다른 글
[ 스파르타 ][TIL] 유니티 스파르타 7기 18일차 - Command 패턴 (0) | 2025.02.14 |
---|---|
[TIL] 유니티 스파르타 7기 17일차 - Thread와 lock 기능 (1) | 2025.02.13 |
[TIL] 유니티 스파르타 7기 15일차 - 콘솔 키보드 버퍼 지우는 법 (0) | 2025.02.11 |
[TIL] 유니티 스파르타 7기 14일차 - 콘솔 키보드 버퍼 지우는 법 (0) | 2025.02.10 |
[TIL] 유니티 스파르타 7기 13일차 - 직렬화와 역직렬화 (3) | 2025.02.07 |