본문 바로가기

기타/패스트캠퍼스 Unity

유니티 입문 패스트캠퍼스 챌린지 19일차

총알이 명중했을 때 처리하기

 

Layer 추가하기

- Enemy

- Player

- EnemyBullet

- PlayerBullet

- Layer 간 충돌 설정하기

 

유니티 에디터에서 인스펙터상단에 Tags & Layer 탭이 있다. 여기서 레이어들을 추가한다.

Enemy Player, EnemyBullet, PlayerBullet을 추가한다.

Project Settings>Physics 설정화면으로 간다. 여기서 레이어끼리 충돌여부를 세팅하게된다.

 

총알끼리는 충돌이 안되도록 할것이다

예를들어 플레이어의 총알과 적의 총알은 서로 충돌이 안되도록 한다, 플레이어와 플레이어의 총알과도 충돌이 안되도록한다, 등... 쓸대없는 충돌처리는 여기서 막도록한다.

 

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

https://bit.ly/3FVdhDa

 

수강료 100% 환급 챌린지 | 패스트캠퍼스

딱 5일간 진행되는 환급챌린지로 수강료 100% 환급받으세요! 더 늦기전에 자기계발 막차 탑승!

fastcampus.co.kr

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.