벡터 정의 참조:wergia.tistory.com/209
[Unity3D] Vector - 좌표와 속도를 다루기 위한 도구
Vector - 좌표와 속도를 다루기 위한 도구 작성 기준 버전 :: 2019.2 [유튜브 영상에서도 본 포스트의 내용을 시청하실 수 있습니다.] 이번 섹션에서는 유니티 엔진의 벡터에 대해서 알아보자. 게임
wergia.tistory.com
*일반적인 벡터는 방향과 크기를 다 가지고 벡터를 정규화하면 방향만 가지고 있으며 스칼라값을 곱해서 크기를 준다..
1.Player 키보드로 좌우이동 구현
*수정)키보드를 누르는 정도에따라 점진적으로 실수량증가는 Input.GetAxis()이고
아래의Input.GetAxisRaw()는 키보드를 누를때마다
-1 or 0 or 1씩 크기가 감소하거나 증가한다
![](https://blog.kakaocdn.net/dn/TQvb9/btqNr7R58pd/BYqxm9tb8KvaGXBJdgtuo1/img.png)
2.Player 최대속력제한
![](https://blog.kakaocdn.net/dn/LyaiI/btqNwwQ5n3w/Yerzed5edhufY8kQ1k02kk/img.png)
3.최대속력 변수화
![](https://blog.kakaocdn.net/dn/1quQX/btqNthNE2in/nvF0Z5REaeDtVvcRXep1K1/img.png)
*캐릭터가 데굴데굴 구를때 해결법
)Rigidbody2D의 -constratints - Freeze Rotatin Z를 체크해준다!
![](https://blog.kakaocdn.net/dn/bFbwhd/btqNr8i8IzS/AoqX0aNkVZPjBRBbgAT4iK/img.png)
4. 나중에 오르막길을 올라가기 구현하기 위해서는 바닥의 마찰력을 빼주어야 한다
따라서 바닥의 마찰력을 빼준상태에서 자연스러운 캐릭터이동을 구현해보자
*캐릭터의 콜라이더를 기존 박스 콜라이더에서 캡슐 콜라이더로 바꿔주자 그래야 가끔 오브젝트 콜라이더끼리
모서리가 낑겨서 멈추는 버그가 해결된다
(1) - 바닥오브젝트의 마찰력빼기
- create에서 physical Mateial 2D를 생성하고 마찰력을 0으로 준다음 모든 바닥 오브젝트안으로 드래그앤 드롭
(colider2D 안의 Material 속성에 들어감)
![](https://blog.kakaocdn.net/dn/k4mow/btqNperifyL/kal5Bxz0JjVBlSl4CKCa70/img.png)
(2) - 캐릭터의 Rigidbody2D 속성안에 있는 Linear Drag(공기저항)을 늘린다
- 이렇게 되면 바닥과 마찰력이 0인상태에서도 진행중에 멈추었을때 자연스러움을 구현할 수는 있지만
좌우이동일때만 해당하는이야기 이고 공중에서 떨어질때도 공기저항을 받아서 위아래 움직임은 부자연 스럽다
![](https://blog.kakaocdn.net/dn/dgEoMF/btqNqCLMUxz/sZINbg1tpX31f0yXu64SA1/img.png)
(3) 공기저항을 최소로하고(공중상태에서의 자연스러움을 위해) 좌우 이동중 멈추었을때 속력을 갑자기 줄이도록 코딩!
![](https://blog.kakaocdn.net/dn/bTjSnC/btqNuPi36Tu/IyAmXc9NQrKo52OYBOZMck/img.png)
(4) 캐릭터의 좌우 반전을 구현
Sprite Renderer의 Flip 기능을 이용하자 Flip은 c#코드상에서 FlipX와 FlipY로 나뉘며 기본값은 false로
체크가 되면 반전이 되면서 True로 변하는 Bool값이다
![](https://blog.kakaocdn.net/dn/pjgZD/btqNqdeutmd/FdPSYXdA1nGnPVPrYY9xFk/img.png)
-강의에서는 주석부분으로 Flip을 처리했지만 저렇게 할 경우 GetAxisRaw("Horizontal") 즉 좌우를 동시에 눌러서
그 값이 0이 되버리면 캐릭터가 Flip을 하지 않고 앞을보며 뒤로 걷는 경우가 생긴다
- 따라서 나는 속력의 방향에 따라 Flip이 구현되게 코딩하였다.
![](https://blog.kakaocdn.net/dn/bdGV0s/btqNpGnIBnY/gZmlnND0J2XuLKy0CbMRkk/img.png)
5.애니메이션 변화 구현
(1) - Player - Animator에서 state(상태바) 우클릭 후 Make Transition(애니메이션 상태를 옮겨가는 통로)을 하면 다음 state 끼리를 이어준다
![](https://blog.kakaocdn.net/dn/kOYKj/btqNqeYKuWE/PCPwmjF5xcs64eyaQM2ks0/img.png)
(2) - 왼쪽 상단에 Parameters가 있는데 이것은 애니메이션 매개변수로 state 즉 상태를 바꿀때 필요한 변수이다
- iswalking을 생성하고 idle상태과 walk상태를 이어주는 화살표를 클릭하면 상태창이 나오는데
- Has Exit Time(애니메이션이 끝날때까지 상태를 유지)를 체크해제 한다 예를 들어 조금만 걷다가 멈출때 걷는
애니메이션이 남아있다고 해서 그걸 끝까지 실행시켜버리면 멈췄는데도 걷는 애니메이션이 나오는 상황이 연출..
-Setting에서 idle상태과 walk상태가 겹치지 않게 해준다 이는 모션연셜을 부드럽게 해주는것이다
이 예제에서는 없는게 어울린다
- Conditions 는 idle상태에서 walk 상태로 가는 통로를 어떠한 조건일때 열어주느냐에 대한것이다 따라서 플레이어 iswalking 즉 걷는것이 true가 될때 상태를 바꿔주도록 한다 (이 후 코드에서 관련 코드를 작성할 예정)
![](https://blog.kakaocdn.net/dn/6aVFN/btqNqdeu17R/WyOqMJ6EMv7088unOEt2vK/img.png)
- walk 상태도 마찬가지로 idle 방향으로 Make Transition을 주고 설정을 한다
Conditions는 iswalking이 false일때로 설정!
![](https://blog.kakaocdn.net/dn/qHif7/btqNuRacdP0/j1ZwUzZKwBkVUc6t3PmtUK/img.png)
(3) - 코드와 연동할 수 있도록 스크립트 작성
애니메이터안의 파라미터를 가져와서 값을 변경하는법!
*애니메이터컴포넌트.Set자료형("자료이름", 바꿀값);
![](https://blog.kakaocdn.net/dn/VlGQD/btqNuQI65WD/vywXOQWVjjiiGuMAPOKUP1/img.png)
위처럼 코드를 작성하면 게임상의 캐릭터가 멈추어도 속력이 남아있기 때문에 0이될때까지 걷는 모션을 한다
이를 보안하여 아래처럼
현재 캐릭터의 속도의 절대값(왼쪽은 - 이기 때문에!)이 0.1보다 작을 경우에 걷는 모션을 false로 하고
그렇지 않을경우 true를 준다!!
![](https://blog.kakaocdn.net/dn/qxq7U/btqNthAefTG/q2ZTkcEirLW7RsWWnr5oe0/img.png)
'Unity > Unity2D_Flat' 카테고리의 다른 글
Unity2D - 디버그 및 2단점프 (0) | 2020.11.22 |
---|---|
Unity2D - 타일맵 (0) | 2020.11.18 |
Unity2D - 점프 (0) | 2020.11.18 |
Unity2D - 애니메이션 (0) | 2020.11.13 |
Unity-2D (0) | 2020.11.13 |