본문 바로가기
게임 제작/뉴진스 파워퍼프걸 팬게임

뉴진스 파워퍼프걸 팬게임 제작 (13)_ Stage1_끼임 처리 & 피격 이팩트 추가 (New jeans Powerpuff girls fangame)

by 나는반딧불 2023. 8. 28.
반응형

뉴진스 파워퍼프걸 팬게임 제작 (13)_ Stage1_끼임 처리 & 피격 이팩트 추가

이번 글에서는 Wave의 이동에 따라 움직이는 오브젝트에

밀려 화면 왼쪽밖으로 넘어가면 발생하는 이벤트에 대해

구현할 계획이다.

 

 

 

이번글의 목표

끼임처리 구현

피격이벤트 추가

 

1.게임 화면 왼쪽에 SANDWICH 오브젝트 생성

게임 화면 왼쪽에 오브젝트를 생성하고  SANDWICH라고 이름을 지었다.

이후 물리충돌 컴포넌트를 추가하고 태그를 SANDWICH로 설정해주었다.

플레이어 캐릭터가 오브젝트에 밀려나 화면밖으로 넘어가게 되고

SANDWICH 오브젝트와 충동하게 된나면 LIFE를 감소시킬 예정이다.

 

 

 

2. 파이프 오브젝트와 랜덤박스 오브젝트 하위에 물리 충돌 컴포넌트 추가하기

각 오브젝트 하위에 빈 오브젝트를 생성하고 

해당 오브젝트에 BOX Collider 2D오 RigidBody 컴포넌트를 추가한다.

다른 물리 충돌 컴포넌트 설정과는 다르게 

IsTrigger에 체크하지 않고 MASS값을 100으로 설정해준다.

플레이어가 통과하지 못하게 하고 플레이어의 위치에 의해

오브젝트가 밀려나지 않게 하기 위함이다.

 

 

3. SANDWICH 코드 작성하기

 else if (other.tag == "SANDWICH")
        {
            sandwich();
            hitsound.Play();

        }

SANDWICH에 관련된 코드들은 Player_hpCtrl 스크립트에 작성하였다.

플레이어가 SANDWICH 태그의 오브젝트와 충돌하면 SANDWICH함수를 호출한다.

 

 public void sandwich()
    {
        hp_now=0;  //라이프 감소하고
        this.gameObject.transform.position = new Vector3(2, 0, 0); //특정 위치에 다시 소환
        supermode = true;  //일정시간 무적모드

    }

SANDWICH 함수가 호출되면

hp_now를 0으로 만들어 자동으로 LIFE가 1깎이게 만들고,

플레이어 오브젝트를 특정 위치로 소환한다.

그리고 피격때와 마찬가지로 일정시간 무적으로 만든다.

 

 

 

4. 피격 이벤트 추가

이대로라면 플레이어는 화면 밖으로 넘어가지게 되었을때 단순히

특정 위치로 움직이고 LIFE만 감소되는 터라 임팩트가 살짝 부족하다.

그래서 캐릭터 SPRITE가 깜빡이는 피격 이벤트를 추가로 작성할 계획이다.

당연히 이것도 Player_hpCtrl에 작성했다.

  private bool corutinebool = true;  //반짝이는 코루틴 반복 방지용
  private float sparkletime = 0.20f;  //반짝이는 시간
  
     IEnumerator SpriteDamage()
    {
        Debug.Log("반짝 발동");
        corutinebool = false;
        this.gameObject.GetComponent<SpriteRenderer>().color = new Color(1,1,1,0.5f); // 반투명하게 변경
        yield return new WaitForSeconds(sparkletime);
        this.gameObject.GetComponent<SpriteRenderer>().color = new Color(255, 255, 255, 255); //투명도 원래대로
        yield return new WaitForSeconds(sparkletime);
        this.gameObject.GetComponent<SpriteRenderer>().color = new Color(1, 1, 1, 0.5f); // 반투명하게 변경
        yield return new WaitForSeconds(sparkletime);
        this.gameObject.GetComponent<SpriteRenderer>().color = new Color(255, 255, 255, 255); //투명도 원래대로
        yield return new WaitForSeconds(sparkletime);
        this.gameObject.GetComponent<SpriteRenderer>().color = new Color(1, 1, 1, 0.5f); // 반투명하게 변경
        yield return new WaitForSeconds(sparkletime);
        this.gameObject.GetComponent<SpriteRenderer>().color = new Color(255, 255, 255, 255); //투명도 원래대로
        corutinebool = true;
    }

코루틴 함수에서 Player의 SpriteRenderer에 접근해 투명도를 높였다 낮혔다 반복하게 만들었다.

 

void Update () {

 /// 이전에 작성한 코드들 밑에 추가 작성
        if(supermode)
        {
            if (corutinebool)
            {
                StartCoroutine("SpriteDamage");
            }
        }
    
    }

Update에는 무적시간일때 해당 코루틴이 발동되록 작성했다.

 

 

5. 결과물

캐릭터가 오브젝트에 밀려나 화면밖을 벗어나면 LIFE가 깎이고,

깜빡이며 특정 위치에서 소환되는 모습을 확인할 수 있다.

 

 

다음 글에서는 드디어 STAGE1의 보스인

거대 토끼 전투 WAVE를 구현해볼 계획이다.

 

 

 

 

 

반응형