YunDev

Unity - 슈팅 게임 플레이어 무적 알아보기! 본문

Programming/Unity

Unity - 슈팅 게임 플레이어 무적 알아보기!

S준 2020. 3. 30. 22:30

 

 

오늘부터 슈팅게임에서 각 기능의 코드에 대해서 글을 올리도록 하겠습니다!

 

 

첫번째로는 플레이어의 무적에 대해서 알아보도록 하겠습니다.

 

 플레이어가 적에게 닿거나 총알에 닿으면 비활성화가 되는데                                   

        else if (collision.gameObject.tag == "Enemy" || collision.gameObject.tag == "EnemyBullet") //에너미는 적, 에너미불렛은 총알
        {
            if (isRespawnTime) //무적 시간이면 적에게 맞지 않음
                return;
           
      
            if (isHit) //이미 맞은상태에서 바로 맞으면 적에게 맞지 않음,중복 시 라이프가 한번에 없어지기 때문
                return;
           
            isHit = true;
            life--;
            gameManager.UpdateLifeIcon(life);

            gameManager.CallExplosion(transform.position, "P");
            if (life == 0)
            {
                gameManager.GameOver();
                gameObject.SetActive(false);
            }
            else {
                gameManager.RespawnPlayer();
            }
            gameObject.SetActive(false);
            collision.gameObject.SetActive(false);
        }

ㄹㅇㄹ

주석과 SetActive만 보시면 됩니다. SetActive가 비활성화이고 플레이어, 플레이어가 맞은 적이나 총알도 같이 비활성화를 한다는 뜻입니다.

 

 

그렇게 비활성화가 되면 다시 RespawnPlayer함수를 통해 활성화가 되고 잠시동안 무적이 되게 하는데

그게 바로 오늘 배울 코드입니다!

 

 

 
 
 public bool isRespawnTime; //bool 타입 변수 선언
 
 
 void Awake()
    {
        
     SpriteRenderer spriteRenderer = GetComponent<SpriteRenderer>(); //색깔을 바꾸기 때문에 변수 선언 필요 
    }

    void OnEnable() 
    {
        Unbeatable();

        Invoke("Unbeatable", 3);
        
    }

    void Unbeatable()
    {
        isRespawnTime = !isRespawnTime;

        if (isRespawnTime) //무적 타임 이펙트 (투명)
        {
            spriteRenderer.color = new Color(1, 1, 1, 0.5f);

     
        }
        else {
            spriteRenderer.color = new Color(1, 1, 1, 1); //무적 타임 종료(원래대로)

        
        }
    }

OnEnable은 플레이어가 활성화 될 때 실행되는 함수입니다. 플레이어는 비활성화 후 활성화가 된다고 했죠?              Unbeatable함수는 활성화가 되자마자  isRespawnTime 변수(기본적으로 false)를 true로 바꿔줍니다.  

isRespawnTime이 true라면 new Color를 통해서 투명하게 바꿔주고 3초뒤에 Invoke를 통해 다시

Unbeatable 함수를 실행합니다. 그러면 지금 리스폰 변수는 true이고 false로 바꿔주기 때문에

색이 다시 원래대로 돌아옵니다. (네번째 수가 투명도입니다.)

 

이 과정이 있기 때문에 부활 후 투명해지고 3초뒤에 다시 돌아오는 것이죠.

 

물론 if (isRespawnTime) 이 로직이 있어야 무적이됩니다.
                return;

불투명

 

투명

 

 

 

 

 

 

 

이렇게 오늘은 유니티 총게임에서 플레이어 무적기능 코드에 대해 알아보았습니다 감사합니다~~