//출처는 골드메탈님 강의입니다!
//알게 된점 : 아이템 오브젝트들의 freeze position을 처음부터 체크해주면
중력이 적용되지 않는다.
To do List
- 외부충돌에 의해 플레이어가 회전하는 모습이 발견된다.
오늘은 이 문제를 고쳐보자.- 뿅망치, 총 vs 플레이어 충돌을 방지하자 but 획득은 가능해야 한다.
- 탄피 vs 플레이어 물리 처리 아예 없애자.
- 벽 충돌 방지 : ray를 이용하자.
코드 적용 및 재실행해서 실험해보자.
- 적용했는데도 넘어진다... 위의 프리즈 로테이션까지 설정을 해야 하는듯하다.
void FreezeRotation()
{
//물리 회전속도를 0으로 만들어서 스스로 도는 현상을 제거함.
rigid.angularVelocity = Vector3.zero;
}
//0311 추가함.
void FixedUpdate()
{
FreezeRotation();
}
: 플레이어와 탄피 등 충돌시 플레이어가 회전을 하게 된다.
탄피와 플레이어가 충돌하지 않도록 물리레이어를 설정하자!
충돌 설정할 레이어들을 추가하자.
위에서 설정한 4개의 프리팹들에다가 layer 설정을 하자
플레이어는 플레이어 / 바닥은 바닥 / 탄피는 탄피 / 총알은 총알
그 다음에 프로젝트 셋팅에서 physics에 가자~
Layer Collision Matrix : 레이어들의 상호간 충돌을 설정한다.
위에서 내가 직접적으로 설정한 값들의 충돌 여부에 대한 설정을 한다.
그러니까 "BulletCase"/ "탄피"의 경우에는 "바닥"과 "탄피" 와의 충돌을
하고 나머지는 충돌처리를 안하겠다는 의미이다.
=> 다시 실행해서 총을 쏜 다음에 탄피 위를 지나가면 이전과는 다르게 충돌처리가 되지 않는것을 확인할 수 있다!
가지고 놀다가 알게 된점. 레이어 설정을 총에다가 한 다음에 플레이어와의
충돌 안되게 하려고 했다. 그런데 이렇게 하게 되면 총획득조차 안된다.
트리거 동작자체가 물리동작이므로 레이어 설정에 영향을 받는듯하다.
해다 이슈는 다르게 해결해야 하는 듯하다.
현재 플레이어가 벽으로 돌진하면 가아끔씩 벽을 관통을 하게되는 문제가 있다.
Debug.DrawRay함수를 사용하자...코드 추가하고, 실행해서 확인해보자..
//세번째 매개변수의 디폴트는 흰색이다.
요렇게 나온다! 이 레이를 이용해보자.
Physics.Raycast함수를 사용하자.
만약에 move함수의 요기다가 사용을 하게 된다면... 문제가 발생한다.
벽에 충돌한 후로는 캐릭터 회전이 안된다는 문제가 생긴다.
그럼 어디다가??? 여기다가 추가해서 회전은 회전대로 되고, 이동은 막고!
벽 Layer를 추가하고 실행해보면 벽 앞에서 앞으로 안나아가진다.
=> 플레이어와의 충돌시마다 갱신되는 것이 아니라, 중력 처리 후 물리적인 효과는
필요 없기 때문에 floor와의 충돌시 물리 효과 없애는 방식으로 진행하자!
플레이어가 아이템을 획득하지 않고 충돌하게 되면 플레이어는 회전하게 되고,
아이템을 넘어진다!
코드를 추가하고
물리를 담당하는 collider 컴포넌트를 isTrigger가 체크된 collider보다 위에 있어야 한다.
MoveUp을 눌러서 위에다 위치시키자. 이 때는 Open Prefab모드에서 진행하자.
변수 2개를 사용하는 이유??
iskinematic은 물리를 사용하지 않는다는 것이고,(true로 해야한다.)
collision은 충돌구를 사용하지 않는다는 것이다.
collision.enabled를 false로 하지 않으면 충돌되는 상대방은 물리처리가 진행되므로, 이것도 처리해야한다.
=> 바닥에 충돌하면 중력에 의한 효과는 완료했으므로 아이템의 물리는 이제 필요없다.