총알이 명중했을 때 처리하기
Layer 추가하기
- Enemy
- Player
- EnemyBullet
- PlayerBullet
- Layer 간 충돌 설정하기
유니티 에디터에서 인스펙터상단에 Tags & Layer 탭이 있다. 여기서 레이어들을 추가한다.
Enemy Player, EnemyBullet, PlayerBullet을 추가한다.
Project Settings>Physics 설정화면으로 간다. 여기서 레이어끼리 충돌여부를 세팅하게된다.
예를들어 플레이어의 총알과 적의 총알은 서로 충돌이 안되도록 한다, 플레이어와 플레이어의 총알과도 충돌이 안되도록한다, 등... 쓸대없는 충돌처리는 여기서 막도록한다.
총알이 명중 했을 때 감지하기
- 총알 및 Player, Enemy 프리팹의 Layer 설정
- Rigidbody와 콜리더를 이용한 충돌감지
- 총알 이동시 충돌 감지 처리
Player 프리팹으로 가서 Layer를 Player로 변경한다. 상위 Object Layer를 변경하면 자식 Object의 Layer도 모두 변경된다.
Bullet, Enemy 프리팹도 마찬가지로 각 Layer를 설정한다.
Bullet.cs 소스코드로 이동해서 충돌을 위한 코드를 추가한다.
bool Hited = false;
void UpdateMove()
{
if (!NeedMove)
return;
Vector3 moveVector = MoveDirection.normalized * Speed * Time.deltaTime;
moveVector = AdjustMove(moveVector);
transform.position += moveVector;
}
Vector3 AdjustMove(Vector3 moveVector)
{
RaycastHit hitInfo;
if (Physics.Linecast(transform.position, transform.position + moveVector, out hitInfo))
{
moveVector = hitInfo.point - transform.position;
OnBulletCollision(hitInfo.collider);
}
return moveVector;
}
void OnBulletCollision(Collider collider)
{
if (Hited)
return;
Collider myCollider = GetComponentInChildren<Collider>();
myCollider.enabled = false;
Hited = true;
NeedMove = false;
if(ownerSide == OwnerSide.Player)
{
Enemy enemy = collider.GetComponentInParent<Enemy>();
}
else
{
Player enemy = collider.GetComponentInParent<Player>();
}
}
private void OnTriggerEnter(Collider other)
{
OnBulletCollision(other);
}
LineCast를 사용해 총알의 이동전 위치, 이동 후 위치 사이에 적이 있는지 검사를한다.
아직 총알이 사라지는 기능은 만들지 않았으므로 총알이 적과 닿는순간 멈춘상태로 남아있다.
충돌을 감지한 후 의 동작은 다음 강의에 이어서 작업한다.
https://fastcampus.co.kr/dev_online_game
C#과 유니티로 배우는 게임 개발 올인원 패키지 Online. | 패스트캠퍼스
현직 게임업계 게임 개발자 직강 C# 프로그래밍부터 게임 물리와 수학까지 모두 정복!
fastcampus.co.kr
수강료 100% 환급 챌린지 | 패스트캠퍼스
딱 5일간 진행되는 환급챌린지로 수강료 100% 환급받으세요! 더 늦기전에 자기계발 막차 탑승!
fastcampus.co.kr
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.