목표 : 캐릭터를 자동으로 움직이게 하고, 벽에 닿으면 반대방향으로 걸어가게 만들기
Cast를 사용하여 벽에 닿았는지 체크를 하고, 0보다 큰 개수 반환시
캐릭터의 움직이는 방향을 (vector2 right <=> vector2 left) 바꾸고
캐릭터의 sprite 이미지에 새로운 벡터(-1,1)를 곱하여 반대방향으로 뒤집어지게 만들기로 했다.
Cast란? 주어진 방향으로 레이를 쏴서 충돌체를 감지하고, 그 안의 충돌체 개수를 반환하는 메서드
public int Cast(Vector2 direction, //감지방향
ContactFilter2D contactFilter, //충돌감지레이어 선택
RaycastHit2D[] results, //감지된 충돌체 저장
float distance = Mathf.Infinity, //감지거리
bool ignoreSiblingColliders = true); //형제 콜라이더 무시 여부
하지만 문제가 있었다.
캐릭터가 벽이나 플레이어에 부딪히면, 움직이는 방향과, 이미지를 바꾸는 함수를 계속해서 호출하는 것이다..!
처음엔 코드를 잘못짠줄 알았으나 몇번을 봐도 아니었다.
혹시나 싶어 레이어매트릭스도 확인했지만 이것또한 Ground와 Player로 잘 되어있었다.
하지만 문제의 원인은 가까이 있었다.
처음 캐릭터를 씬뷰에 놓고 설정할때, 나는 기본으로 오른쪽을 바라보게 만들기 위해 scale의 X 값을 -1로 설정 해두었던 것이다..!!
방향을 설정할때 위와같이 Sclae값을 가져와서 계산했는데 이곳에서 Scale값을 조정한 것을 잊고 틀리게 작성했다.
X는 당연히 기본방향이 우측 → 일것이라 생각한다. 그렇기 때문에 일어난일!!
이 문제를 고치기위해 scale을 1로 되돌려 놓고, 우측을 바라보게 Sprite Renderer의 Flip 을 체크했고 원하는 결과물이 드디어 만들어졌다.
이런 버그가 나지 않게 하기위해선 기본으로 생각할 수 있는 값으로 설정을 잘 해두고, 원하는 결과를 위해 여러가지 방법을 알아놓고 그 상황에 어느 것이 가장 적합한지 판단하려 더욱 노력해나가야겠다.😅
'Game Development > Unity' 카테고리의 다른 글
[Unity] 터레인 (Terrain) 생성 (0) | 2024.08.20 |
---|---|
[Unity] Animator (0) | 2024.02.20 |
[Unity] Tile Map (0) | 2024.02.07 |
[Unity] Animation 컴포넌트 (0) | 2024.02.05 |
[Unity] Skybox 만들기 (0) | 2024.01.24 |