1. 2d 비행기 스프라이트 이미지설정
- Spirte Mode = Mulitple
- Pixel Per Unit = 24
- Filter Mode = Point(no filter)
- Compression = None
- 이 후 Sprite Editor에서 가로세로 Pixel = 24, padding = 1씩 주고 이미지를 아틀라스화 함
2.이동로직 스크립트
3.플레이어 콜라이더 및 테두리 콜라이더
- 플레이어에 collider2D 추가 및 empty오브젝트들을 만들어 collider2D속성으로 테두리 생성
*tip)어떤 오브젝트가 가진 속성들을 아래와 같이 Copy Component로 복사하여 다른 오브젝트에 붙여넣기가 가능
4.충돌
- 이제 콜라이더를 가진 각 오브젝트들에게 rigidbody속성을 추가하여 물리충돌을 구현시킨다
- 고정된 테두리 오브젝트는 rigidbody의 body type을 static으로 하고
- 코드로서 이동을 구현하는 플레이어 오브젝트는 body type을 kenematic으로 한다
*body type관련 설명 - 블로거출처[개발자키우기] : superwony.tistory.com/64
body type
dynamic : 디폴트 타입으로 다른 body type과 모두 충돌하고 중력과 힘의 영향을 받습니다.
위치나 회전값을 동적(코드)으로 변경하는 오브젝트에 사용하기엔 비효율 적입니다. ( 시스템 리소스 문제 )
- mass : 오브젝트의 질량을 설정합니다.
- linear drag : 해당 값이 클수록 물체의 이동에 영향을 줍니다. 다른 오브젝트와 접촉이 없어도 스스로 움직임을 멈춥니다.
- angular drag : 해당 값이 클수록 물체의 회전에 영향을 줍니다. 다른 오브젝트와 접촉이 없어도 스스로 회전을 멈춥니다.
- collision detection : discrete, continuous 중 continuous 로 설정한 경우 충돌된 물체끼리 서로를 통과하지 않지만 더 많은 cpu 시간을 사용해 꼭 필요한 오브젝트에만 설정해야합니다.
kinematic: 동적(코드)으로 제어하는 오브젝트에 적합한 타입입니다. 중력과 힘의 영향을 받지않기 때문에 동적(코드)으로 제어 했을때 정확하게 반영됩니다. dynamic 타입을 갖는 오브젝트와 충돌하고 그외 나머지 kinematic 과 static 타입과는 충돌하지 않습니다.
- kinematic 타입이 다른 kinematic타입이나 static타입과 충돌하게 하려면 직접 Oncollider()함수 및 Ontrigger()함수로 코드 구현을 통해 구현해야 합니다
static : 움직이지 않는 오브젝트에 적합한 타입입니다.
이 세가지 타입을 오브젝트 성질에 맞게 설정해야 리소스를 덜 잡아먹어 최적화에 도움이 됩니다.
예를 들어 게임에서 움직이지 않고 정적인 블럭은 static 타입으로 설정하고, 움직이는 플레이어의 경우 dynamic이나 kinematic으로 설정하는게 좋습니다.
5.충돌시 떨림 해결
- 플레이어의 rigid body type을 dymamic으로 하고 static 상태의 테두리와 충돌을 하면 떨림현상이 발생한다
*tranform이동 + 물리충돌 = 떨림발생
- 따라서 떨림을 해결하기 위해
(1). 플레이어 rigid body type을 kinematic 으로 하고
(2). 플레이어 스크립트에 플레이어가 border콜라이더에 충돌시에 멈추게하여 테두리 밖으로 나가지 못하게 하는
코드를 추가 작성한다
*ontriggerEnter()는 다른 콜라이더와 겸칩이 있는 상태에서 어떤 것을 한다는 나의 상태를 나타 낼뿐이지
이 것 자체를 조건으로 쓸 수 가 없다
따라서 조건으로써 가치가 있는 비교연산자를 사용할 수 있게 플래그변수를 사용함으로써
겹침 상태를 true와 false로 나타낼 수 있도록 하고 조건이나 결과로 쓰게 하는 것이다
********************************************************************************************************************
// 내 상태, 조건 ----> 그 상태로 인한 비교연산자가 사용가능한 코드변화
//1-나는 지금 위쪽 화살표를 누르고 있다 ----> v = 1
//1-나는 TOP오브젝트와 겹침이 시작됬다 ----> isTopTrigger = true
//2-나는 TOP오브젝트와 겸침이 끝났다 ----> isTopTrigger = false;
//원하는 상태, 결과
//1-나는 위로 이동하지 않는다 ----> v = 0
//2-나는 위로 이동한다 ----> v = 1
-같은방식으로 4방향 모두 Border바깥으로 나가지 못하게 코딩
'Unity > Unity2D_Shooting' 카테고리의 다른 글
Unity2D_Shooting - 적기체 spawn위치 추가 , 기존 프리팹 수정하여 새로운 프리팹생성, 적기체 총알발사 플레이어방향으로 총알발사 (0) | 2021.01.14 |
---|---|
Unity2D_Shooting - 적 비행기 구현, 랜덤생성 (0) | 2021.01.12 |
Unity2D_Shooting - 총알 발사 딜레이 및 총알 파워업 구현 (0) | 2021.01.11 |
Unity2D_Shooting - 총알 발사 구현 (0) | 2021.01.07 |
Unity2D_Shooting - 이동애니메이션 (0) | 2021.01.07 |