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

뉴진스 파워퍼프걸 팬게임 제작 (10)_ Stage1_ 스킬 구현 (New jeans Powerpuff girls fangame)

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

뉴진스 파워퍼프걸 팬게임 제작 (10)_ Stage1_ 스킬 구현

저번글에서는 일반 공격을 구현했었다.

 

뉴진스 파워퍼프걸 팬게임 제작 (9)_ Stage1_멤버 5명 개별 캐릭터 공격 구현 (New jeans Powerpuff girls fan

뉴진스 파워퍼프걸 팬게임 제작 (9)_ Stage1_멤버 5명 개별 캐릭터 공격 구현 그동안은 해린 캐릭터만 구현해서 대표로 테스트 해왔었다. 이번에는 멤버 5명의 캐릭터와 초상화, 공격 등을 각각 구

culturelevel.tistory.com

이번에는 뮤직비디오에서 멤버들이 인터뷰한 것을 토대로

각자 개성이 담긴 스킬들을 구현해볼 차례이다.

 

이번 글의 목표

5명의 특수 공격 스킬 구현

 

 

 

1. 다니엘 스킬 제작

다니엘 인터뷰 " 식물과 대화를 하는 슈퍼 파워"

다니엘의 슈퍼 파워 스킬은 꽃을 소환해

일정시간동안 적이 발사하는 공격을 막는 스킬이다.

 

 

 

1.1 플레이어 오브젝트 하위에 스킬 이펙트 스프라이트 넣기

다니엘 스킬은 플레이어 중심으로 꺼졌다 켜졌다 할 것이기 때문에

플레이어 오브젝트 하위에 꽃모양 이미지를 생성해주었다.

 

1.2 회전 스크립트 작성

public class RotateCtrl : MonoBehaviour
{
    public float rotSpeed = -100;

    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        transform.Rotate(Vector3.forward, rotSpeed * Time.deltaTime);
    }
}

꽃이 그냥 가만히 있으면 뭔가 밋밋하기 때문에

회전을 하도록 스크립트를 작성했다.

 

1.3 스크립트 및 물리 충돌 컴포넌트 추가

여태까지는 박스 콜라이더만 추가했었으나 이번에는 원형 콜라이더를 추가해주었다.

그리고 태그를 Player로 설정해서 적이 발사한 공격이 꽃 콜라이더에 닿으면 자동으로 사라지게 만들었다.

우선 여기까지만 만들고 추후 스킬 발동은 모든 스킬들을 다 만들고 나서 구현할 계획이다.

 

 

 

2. 해린 스킬 제작

해린 인터뷰 " 남들에게 힘과 파워를 주는 슈퍼 파워"

해린의 슈퍼 파워 스킬은 슈퍼 파워를 나눠준 다른 동료들을 소환해서

앞으로 돌진시키는 스킬이다.

 

 

2.1 스킬 오브젝트 제작

먼저 캐릭터 이미지와 이동 이펙트 이미지들을 씬으로 끌어 배치해준다.

 

2.2 이동 스크립트 및 물리충돌 컴포넌트 추가

 

각각 캐릭터 이미지 각각에 물리 충돌을 위한 컴포넌트를 추가해주고

태그는 BULLET_R로 설정한다.

동료 캐릭터 하나하나가 공격 탄환 역할을 할 예정이다.

 

2.3 각 이미지 오브젝트 하나로 묶고  스크립트 추가

빈 오브젝트를 생성해 방금 만든 오브젝트들을 하위로 넣어주고

이동 스크립트와 쿨타임 파괴 스크립트를 추가해준다.

 

 

 

2.4 프리팹화 하기

다 되었으면 Hierarchy창에 있는 오브젝트를 Project창으로 옮겨 프리팹화 해준다.

 

 

 

 

 

3. 하니 스킬 제작

하니 인터뷰 "물건을 커지게 하는 슈퍼 파워"

하니의 슈퍼 파워 스킬은 점점 커지는 하트를 날리는 스킬이다.

 

3.1. 스케일 업 스크립트  작성

public class ScaleUpCtrl : MonoBehaviour
{

   
    public float upspeed =10f;
    // Start is called before the first frame update
    void Start()
    {
       
    }

    // Update is called once per frame
    void Update()
    {
        if (transform.localScale.x < 1)
        {
            transform.localScale = transform.localScale * (1f + Time.deltaTime * upspeed);
        }
    }
}

특정 크기까지 스케일이 계속 커지는 코드를 작성했다.

 

3.2 오브젝트에 물리 충돌 컴포넌트 및 스크립트 추가

하트이미지를 씬에다 끌어다 놓고 해당 이미지 오브젝트에

물리 충돌 컴포넌트와 스케일 업 스크립트를 추가했다.

콜라이더는 박스나 원형 모두 하트에 딱 맞지는 않아서 폴리곤 콜라이더로 추가했다.

마지막으로 태그는 똑같이 BULLET_R로 설정해주었다.

 

 

3.3 프리팹화 하기

다 되었으면 Hierarchy창에 있는 오브젝트를 Project창으로 옮겨 프리팹화 해준다.

 

 

 

 

 

4. 혜인 스킬 제작

혜인 인터뷰 "나는 슈퍼 파워"

혜인의 슈퍼 파워 스킬은 날개가 생겨 더 빨리 이동하고

하트에도 날개가 생겨 더 빠르게 공격할 수 있는 슈퍼파워이다.

 

4.1 플레이어 오브젝트 하위에 날개 오브젝트 배치하기

먼저 날개 이미지를 끌어다 씬에다 놓은 뒤

플레이어 오브젝트 하위로 배치해준다.

 

 

 

4.2 기존 일반 공격 프리팹의 이미지와 이름을 바꾸어 새로운 프리팹으로 만들기

굳이 처음부터 프리팹을 만들 필요 없이 기존의 일반 공격 하트 프리팹을 씬에다 끌어온뒤 약간의 수정만 해주었다.

이미지 스프라이트를 날개달린 하트로 변경하고 이름은 skill_hyein으로 바꾸었다.

그리고 이동속도도 7에서 9로 높게 설정했다.

이번 오브젝트는 다른 스킬과 달리 태그를 BULLET_R로 하지 않고 BULLET로 설정했다.

추후에 BULLET_R에 충돌하는 적은 -3피해를 입게 할 계획인데

빠르게 여러발 발사되는 탄환을 BULLET_R로 설정할 경우 너무 오버파워 밸런싱이 되기 때문이다.

 

4.3 프리팹화 하기

다 되었으면 Hierarchy창에 있는 오브젝트를 Project창으로 옮겨 프리팹화 해준다.

 

 

 

 

5. 민지 스킬 제작

 

민지 인터뷰 "초콜릿 파워"

민지의 슈퍼 파워 스킬은 3종류의 초콜렛을 부채꼴 방향으로 발사하는 스킬이다.

 

 

5.1기존 일반 공격 프리팹의 이미지와 이름을 바꾸어 새로운 프리팹으로 만들기

이번 스킬도 굳이 처음부터 새로만들지 않고 기존 일반 공격 스킬을 가져다 살짝만 변경해주었다.

먼저 이미지를 바꿔주고 커진 이미지만큼 박스 콜라이더도 크게 변경해주었다.

그리고 태그는 BULLET_R로 설정해주었다.

그리고 오브젝트를 복사해 각도를 돌리고 이미지를 각각 변경해주었다.

 

5.2 오브젝트 합친 후 프리팹화 하기

3개의 오브젝트를 상위 오브젝트에 넣어서 하나로 합친뒤

Hierarchy창에 있는 오브젝트를 Project창으로 옮겨 프리팹화 해준다.

 

 

6.기존에 작성했던 공격 스크립트 변경 및 적용

이제 방금까지 만들었던 스킬들을 발동하기 위해 

기존에 만들었던 공격 스크립트를 살짝 변경하고 몇몇 코드를 추가해야한다.

 

 

 

6.1 공격 스크립트 작성

 public int playerNum;   //플레이어 넘버 0부터 4까지 (0 : 다니엘, 1 : 해린, 2 : 하니, 3 : 혜인, 4: 민지)


    public GameObject[] bullet =new GameObject[5];  //일반 공격
    public GameObject[] Skill=new GameObject[5];   //특수 공격

    

    public Transform firePos;  //일반 공격 발사 위치

    //공격 쿨타임 관련 변수
    bool canfire = true;
    bool canfire_S = true;
    public float cooltime = 0.2f;
    public float cooltime_S= 2.0f;
    


    //일반공격 사운드
    public GameObject fire_effect;
    private AudioSource fire_sound;

    //스킬 사용에 필요한 별도의 추가 변수
    
    Vector3 haerin_skill_pos = new Vector3(-2, -0.2f, 0);  //해린 스킬 발동 위치

    bool heyin_skillmode = false; // 공속 증가 모드
    public GameObject hyein_bullet;  // 날개달린 총알
    public float cooltime_hyein = 0.15f; //일반공격보다 조금더 빠른 쿨타임

먼저 스킬에 필요한 변수들을 추가로 선언해준다.

 

void Update () {

        if (Input.GetKey(KeyCode.Space) && canfire)  //스페이스를 누르고 일반 공격 가능 상태이면 
        {
            if (!heyin_skillmode)  //혜인 스킬모드가 아니라면
            {
                StartCoroutine("FireBullet");//일반공격 함수 발동
            }
            else
            {
                StartCoroutine("FireBullet_hyein");//일반공격 함수 발동
            }
        }

        if (Input.GetKeyDown(KeyCode.D) && canfire_S)  //D키를 누르고 스킬 사용 가능 상태이면
        {

            if (this.gameObject.GetComponent<Player_hpCtrl>().mp_now > 0)  //MP가 0이상이라면
            {
                StartCoroutine("UseSkill");//스킬 공격 함수 발동
            }

        }
    }

Space를 누르면 일반공격이 발동되는 함수에 조건문을 추가해

혜인 특수 스킬 발동중에는 특수한 오브젝트가 발사되게 설정한다.

그리고 D버튼을 누르면 각 캐릭터 번호에 맞는 스킬이 발동되게 설정했다.

 

 IEnumerator FireBullet_hyein() //혜인 스킬 사용중 일반공격
    {
        canfire = false;  //쿨타임을 위해 시작과 동시에 false로 바꿔준다.
        fire_sound.Play();   //공격 효과음 재생
        Instantiate(hyein_bullet, firePos.position, firePos.rotation);//정해진 위치에서 특수공격 오브젝트 생성

        yield return new WaitForSeconds(cooltime_hyein);  //cooltime동안 기다려서 이 시간동안 특수 공격을 사용하지 못하게 한다.
        canfire = true; //다시 사용가능하게 만들기 위해 true로 바꿔준다.
    }

혜인 특수 공격 스킬 코루틴 함수는 일반 공격 스킬보다 조금더 쿨타임이 빠르게 발사되도록 설정했다.

  IEnumerator UseSkill()
    {
        canfire_S = false; //쿨타임동안 스킬 사용불가
        fire_sound.Play(); //일단은 일반공격 효과음이랑 같은 효과음 재생

        switch (playerNum)
        {
            case 0:  //다니엘 스킬 : 적 공격을 대신 맞아주는 꽃 소환
                Skill[playerNum].SetActive(true); //꽃 이펙트 활성화
                break;
            case 1: //해린 스킬 : 다른 동료 소환 돌진
                Instantiate(Skill[playerNum], haerin_skill_pos, firePos.rotation);  //동료 소환
                break;
            case 2: //하니 스킬 : 점점 커지는 하트 던지기
                Instantiate(Skill[playerNum], firePos.position, firePos.rotation); //커지는 하트 소환
                break;
            case 3:   // 혜인 스킬 : 날개 이펙트 생긱고 이동속도, 공격속도 증가
                Skill[playerNum].SetActive(true); //날개 이펙트 활성화
                heyin_skillmode = true;  //공속증가 모드
                this.gameObject.GetComponent<PlayerMoveCtrl>().speedmodeON();//이속증가 모드
                break;
            case 4: // 민지스킬 : 3방향 초콜릿 발사 
                Instantiate(Skill[playerNum], firePos.position, firePos.rotation); //초콜릿 소환
                break;

        }

        this.GetComponent<Player_hpCtrl>().mp_down();  //mp감소
        yield return new WaitForSeconds(cooltime_S);   //스킬 쿨타임동안 기다리기

        if (playerNum == 0 || playerNum == 3)
        {
            Skill[playerNum].SetActive(false);// 활성화된 스킬 이펙트 비활성화
        }
        heyin_skillmode = false; // 공속모드 비활성화

        canfire_S = true;   // 스킬 쿨타임종료 다시 스킬 사용가능
    }

캐릭터 번호에 맞는 스킬을 발동하는 코루틴 함수를 작성했다.

스킬을 사용하면 먼저 쿨타임 변수를 false로 만들어 쿨타임 동안 스킬을 또 쓸 수 없게 만들었다.

이후 switch문으로 캐릭터 번호에 맞는 스킬을 발동하게 작성했다.

스킬을 발동하고 나면 mp를 감소시키고 코루틴 함수가 끝나기 전에 몇몇 스킬 변수들을 비활성화 시킨뒤

다시 쿨타임 변수를 활성화 시켜 스킬을 사용할 수 있게 만들었다.

 

 

6.2 스킬 프리팹 적용 및 설정

작성이 끝나고 저장하면 inspector 창의 공격 스크립트에 여러 빈칸들이 생긴것을 확인할 수 있다.

각 스킬 빈칸에 미리 만들어뒀던 스킬 프리팹 오브젝트들을 배치해준다.

이 중 혜인 스킬만 예외적으로 필요 오브젝트가 2개라

skil 빈칸에는 혜인 머리위 날개 오브젝트를 배치하고

Heyin_bullet에 날개달린 하트 프리팹을 배치해 주었다.

 

 

7. 적 HP Ctrl 추가 작성

private void OnTriggerEnter2D(Collider2D other)
    {     
        if (other.tag=="LEFTWALL")  //벽에 닿으면 잠시후 자폭
        {
            Invoke("destroyg", 2.0f);
        }
        else if (other.tag == "BULLET")  //플레이어 총알에 맞으면 hp 1감소
        {
            Instantiate(DamageEffect, DamagePos.position, DamagePos.rotation);
            hp--;
            
        }
        else if (other.tag == "BULLET_R") //플레이어 스킬에 맞으면 hp 3감소
        {
            Instantiate(DamageEffect, DamagePos.position, DamagePos.rotation);
            hp -=3;

        }
    }

마지막으로 적 hp Ctrl 스크립트에 BULLET_R과 충돌시 이벤트 코드를 추가로 작성해 주었다.

 

8. 결과물

다니엘 슈퍼 파워 스킬
해린 슈퍼 파워 스킬
하니 슈퍼 파워 스킬
혜인 슈퍼 파워 스킬
민지 슈퍼 파워 스킬

 

 

하니 스킬 이펙트가 살짝 어색하고 다니엘 스킬이 살짝 성능이 낮은 것 같긴 하지만

어쨌든 5명멤버 모두 슈퍼 파워 스킬을 구현하는데 성공했다.

 

이제 Stage1의 구현이 거의 다 끝나간다.

다음 글에서는 레벨디자인을 시작하기 전 마지막으로 랜덤박스를 구현할 계획이다. 

 

 

뉴진스 파워퍼프걸 팬게임 제작 (11)_ Stage1_랜덤 박스 구현 (New jeans Powerpuff girls fangame)

뉴진스 파워퍼프걸 팬게임 제작 (11)_ Stage1_랜덤 박스 구현 저번글과 저저번글에서 플레이어의 공격을 구현했었다. 뉴진스 파워퍼프걸 팬게임 제작 (9)_ Stage1_멤버 5명 개별 캐릭터 공격 구현 (New j

culturelevel.tistory.com

 

 

 

반응형