-
[TIL] 6주차 5일 유니티 숙련주차 시작, 개인 프로젝트 ( RayCast, SkyBox, ForceMode)개발일지/스파르타 코딩클럽 부트캠프 2024. 5. 24. 21:22
오늘 한 것
- Transform과 변수 특강
- 유니티 숙련주차 개인공부
- 스카이박스
- RayCast
- Input System의 SendMessage와 InvokeEvent
오늘 발생한 문제
RayCast를 하자 점프가 안되던 문제
public void OnJump(InputAction.CallbackContext context) { if(context.phase == InputActionPhase.Started && IsGrounded()) { Debug.Log("2"); _rigidbody.AddForce(Vector2.up * jumpPower, ForceMode.Impulse); } } bool IsGrounded() { Ray[] rays = new Ray[4] { new Ray(transform.position + (transform.forward * 0.2f) + (transform.up * 0.01f), Vector3.down), new Ray(transform.position + (-transform.forward * 0.2f) + (transform.up * 0.01f), Vector3.down), new Ray(transform.position + (transform.right * 0.2f) + (transform.up * 0.01f), Vector3.down), new Ray(transform.position + (-transform.right * 0.2f) +(transform.up * 0.01f), Vector3.down) }; for (int i = 0; i < rays.Length; i++) { if (Physics.Raycast(rays[i], 0.1f, groundLayerMask)) { Debug.Log(3); return true; } } return false; } }
Onjump 함수가 원래는 잘 작동했었는데
RayCast기능을 가진 IsGrounded 메소드를 OnJump에 추가하자
작동하지않았다. 진짜 오랫동안 강의와 다른 점이 있나 찾아보고 디버깅해도 못찾았는데
알고보니 문제는 플레이어의 Collider에 있었다.
Center의 y값이 0.85가 들어가 있어야 했는데
그게 입력이 안되어있어서 그랬던 것이었다..
저걸 나중에 입력하고 나니까 카메라도 먼저 플레이어 오브젝트의 자식으로 넣었어서
시점도 아래로 내려가서
카메라의 시점도 0.85 올려줬다.
오늘 배운 중요한 점
Raycast
Ray는 직선의 시작점(origin)과 방향(direction)을 뜻한다.
Ray ray = new Ray(transform.position, transform.forward); // 오브젝트
Ray ray = Camera.main.ViewportPointToRay(new Vector3(0.5f, 0.5f, 0)); // 카메라 중심
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); // 마우스
여기서 Raycast란?
눈에 보이지 않는 광선(Ray)에 맞은 물체가 무엇인지 판단한 뒤 여러가지 후 처리를 하는 방식이다.
이번 강의에서는 위 코드처럼 땅에 플레이어가 닿아있는지 확인여부를 Raycast를 통해서 알아봤다.
InputSystem의 InvokeEvent
지금까지 InputSystem을 사용했을 때는
Behavior를 항상 SendMessage로 사용했는데
이번에는 Invoke Event를 사용했다.
SendMessage는
On + Action name인 함수를 찾아서 호출하는 방식이다.
위 이미지의 경우에는 OnMovement 함수를 찾아서 호출한다.
Invoke Event는
Inspector 상에서 Action에 함수를 설정하고 키 입력이 들어왔을 때 호출한다.
마치 Button에서 OnClick 등 이벤트를 발생시키는 방식과 흡사하다.
추가적으로 Invoke C Sharp Events도 있는데
C# 스크립트에서 Invoke Event의 과정을 수행한다.
키 입력을 받고나서 실행 전, 키 입력 받고 실행 완료, 키 입력 해제 등의 구체적 상황에 따라서
별도의 함수를 등록할 수 있다.
'개발일지 > 스파르타 코딩클럽 부트캠프' 카테고리의 다른 글
[TIL] 7주차 2일 개인 프로젝트 주차 (Interface, 아이템 상호작용 ) (0) 2024.05.28 [TIL] 7주차 1일 개인 프로젝트 주차 ( 조명, 카메라 절두체, Coroutine) (0) 2024.05.27 [TIL] 6주차 4일 팀 프로젝트 끝, 객체 지향 특강 ( SOLID 원칙 ) (0) 2024.05.23 [TIL] 6주차 3일 팀 프로젝트 마무리 단계, 랭킹 시스템 (2) 2024.05.22 [TIL] 6주차 2일 팀 프로젝트 여전히 진행중 (2) 2024.05.21