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

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

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

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

그동안은 해린 캐릭터만 구현해서 대표로 테스트 해왔었다.

 

뉴진스 파워퍼프걸 팬게임 제작 (8)_ Stage1_적 캐릭터 구현 (New jeans Powerpuff girls fangame)

뉴진스 파워퍼프걸 팬게임 제작 (8)_ Stage1_적 캐릭터 구현 이번에는 적 캐릭터 중 [기본 토끼]와 [날개 토끼]를 구현해볼 예정이다. 보스몹인 [거대 토끼]는 추후 레벨디자인 할 때 구현할 계획이

culturelevel.tistory.com

이번에는 멤버 5명의 캐릭터와 초상화, 공격 등을 각각 구현할 계획이다.

 

이번 글의 목표

5명의 캐릭터 이미지 구현

5명의 캐릭터 초상화 구현

5명의 캐릭터 공격 구현

5명의 캐릭터 이동 이펙트 구현

 

 

 

 

1, 캐릭터 선택 번호에 따른 이미지, 초상화 변환

아직 만들지 않았지만 나중에 캐릭터 선택 씬에서 캐릭터 선택을 하면

그에 따라 전투 화면에서 캐릭터의 이미지와 초상화가 바뀌게 만들어 줄 예정이다.

 

 

 

1.1 테스트용 플레이어 넘버 조절 스크립트 제작

Hierachy창에서 Create Empty로 빈 오브젝트를 하나 만들고

PlayerNumCtrl이라고 이름을 지어준다.

해당 오브젝트는 전투화면에서 플레이어 넘버를 임시로 관리하기 위한

테스트용 오브젝트이다.

게임이 모두 완성된다면 삭제될 예정이다.

 

 

 

1.2 PlayerNumCtrl 스크립트 작성

public class PlayerNumCtrl : MonoBehaviour
{

    public int playerNum;

    void Awake()   //start보다 빨리 발동
    {

        PlayerPrefs.SetInt("CurrentPlayerNum", playerNum);  //현재 플레이어 넘버 설정

    }

   
}

Awake 함수는 Start함수보다 먼저 실행되는 함수이다.

다른 코드의 Start함수보다 먼저 발동되어야 해서 사용했다.

PlayerPrefs는 씬이 넘어가더라도 프로젝트 내에 계속 저장이 되는 변수이다.

Set으로 값을 저장할 수 있고 Get으로 값을 불러올 수 있다.

여기선 Set으로 playernum값을 CurrentPlayerNum 변수에 저장해준다.

 

작성한 스크립트를 아까 만든 PlayerNumCtrl오브젝트에 추가해주면

 이제 Inspector창에서 Public으로 선언한 PlayeNum변수 칸에 값을 입력해

CurrentPlayerNum의 값을 조절할 수 있게 된다.

 

 

 

1.3 PlayerSpriteCtrl 스크립트 작성

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class PlayerSpriteCtrl : MonoBehaviour
{

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

    public Image portrait;  // ui 초상화 이미지

    public Sprite[] playerSprite = new Sprite[5];   //캐릭터 sprite
    public Sprite[] portraitSprite = new Sprite[5]; //초상화 sprite
    
    // Start is called before the first frame update
    void Start()
    {
        playerNum = PlayerPrefs.GetInt("CurrentPlayerNum");
        // CurrentPlayerNum변수 참조해서 playerNum 초기화 

        this.gameObject.GetComponent<SpriteRenderer>().sprite = playerSprite[playerNum];  //번호에 맞는 플레이어 캐릭터 이미지 변경
        portrait.sprite = portraitSprite[playerNum]; //번호에 맞는 플레이어 초상화 이미지 변경
        
    }

    
}

이번 코드는 Sprite 변수들을 배열로 선언해주었다.

길이가 5인 배열을 선언했고 

각각의 번호에 멤버들이 배치할 예정이다.

(0 : 다니엘, 1 : 해린, 2 : 하니, 3 : 혜인, 4: 민지)

 

Strat 함수에서 아까 Set으로 설정한 PlayerPrefs 변수를 Get으로 받아온다.

그리고 번호에 맞게 플레이어 캐릭터와 Ui초상화 오브젝트를 변경해준다.

 

 

 

1.4 Player 오브젝트에 PlayerSpriteCtrl 추가후 Sprite 배치

player 오브젝트에 방금 작성한 스크립트를 추가해주고

번호에 맞게 각각 Sprite를 배치해준다.

 

1.5 결과물

PlayerNumCtrl오브젝트에서 PlayerNum을 변경해주고 게임 시작을 하면

캐릭터 이미지와 초상화 이미지가 번호에 맞게 변경된 모습을 확인할 수 있다.

 

 

 

 

 

 

2. 이동 이펙트 변환

 

2.1 이동 이펙트 프리팹 개별 제작

캐릭터별로 이동 이펙트 색깔이 다르기 때문에 이전에 만든 이동 이펙트 프리팹을 색깔별로 만들었다.

 

 

 

2.1 Effect Move 스크립트 변경

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Effect_move : MonoBehaviour
{
    public int playerNum;   //플레이어 선택 번호
    public GameObject[] effectsprite= new GameObject[5];//플레이어 이동 이펙트
    public Transform effectPos;
    public float cooltime = 0.1f;
  
    void Start()
    {
       playerNum= PlayerPrefs.GetInt("CurrentPlayerNum");
        // CurrentPlayerNum변수 참조해서 playerNum 초기화 
    }

    // Update is called once per frame
    void Update()
    {
            StartCoroutine("MoveEffect");
    }


    IEnumerator MoveEffect()
    {
         
        Instantiate(effectsprite[playerNum], effectPos.position, effectPos.rotation);

        yield return new WaitForSeconds(cooltime);
       
    }
}

이전에 작성했었던 Effect Move 스크립트에서 일부 코드들을 추가 작성해주었다.

먼저 effectSprite를 배열로 선언하게 변경해주었고

playerNum변수를 추가해 Start함수에서 값을 받아올수 있게 작성했다.

그리고 MoveEffect코루틴 함수에서 배열 번호에 따라 다른 오브젝트가 생성되도록 변경해주었다.

 

2.2 프리팹 배치 

코드를 저장하고 난 후 Effectsprite 배열 빈칸들에 각각 알맞은 프리팹을 배치해 준다.

 

 

2.3 결과물

게임 실행을 해보면 캐릭터에 맞게 알맞은 색깔의 이동이펙트가 생성되는 걸 확인할 수 있다.

 

 

 

 

 

 

3.캐릭터별 일반 공격 구현

 

 

3.1 일반 공격 총알 (하트) 프리팹 제작

먼저 캐릭터별 하트 모양 총알 프리팹을 제작해준다.

 

총알은 오른쪽을 향해 나아가고 적에 닿거나 일정시간이 지나면 파괴되게 설정했다.

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

 

 

3.2 공격 스크립트 작성

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

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

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

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

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

선언의 경우 다른 코드와 마찬가지로 먼저 playerNum 변수를 선언하고

캐릭터별 총알 오브젝트를 배열러 선언했다.

그 후 쿨타임 관련 변수와 효과음 관련 변수도 선언했다.

 

void Start () {

        playerNum = PlayerPrefs.GetInt("CurrentPlayerNum");
        // CurrentPlayerNum변수 참조해서 playerNum 초기화 

        fire_sound = fire_effect.GetComponent<AudioSource>(); //일반 공격 사운드 설정
        
	}

Start함수에서는  현재 플레이어 넘버를 받아오고

사운드 오브젝트를 초기화해주었다.

 

IEnumerator FireBullet() //일반공격
    {
        canfire = false;  //쿨타임을 위해 시작과 동시에 false로 바꿔준다.
        fire_sound.Play();   //일반공격 효과음 재생
        Instantiate(bullet[playerNum], firePos.position, firePos.rotation);//정해진 위치에서 일반공격 오브젝트 생성
        
        yield return new WaitForSeconds(cooltime);  //cooltime동안 기다려서 이 시간동안 일반공격을 사용하지 못하게 한다.
        canfire = true; //다시 사용가능하게 만들기 위해 true로 바꿔준다.
    }

총알 발사 함수는 코루틴으로 작성해주었다.

 

	void Update () {

        if (Input.GetKey(KeyCode.Space) && canfire)  //스페이스를 누르고 일반 공격 가능 상태이면 
        {
            StartCoroutine("FireBullet");//일반공격 함수 발동
        }

    }

마지막으로 Update함수에서 Spcace키를 누르면 해당 코루틴 함수를 발동하게 작성해주었다.

 

 

 

 

 

3.3 firePos 오브젝트 생성

스크립트를 적용하기 전 총알을 발사할 위치를 설정해주기 위해

Player오브젝트 하위에 FirePos 이름의 빈오브젝트를 설정해준다.

 

3.4 총알 발사 효과음 배치

총알 발사 효과음을 씬에다 끌어다 배치하고 Play on Awake를 꺼준다.

효과음은 록맨 게임의 총알 발사 효과음을 가져다 썼다.

 

3.5 Player 오브젝트에 스크립트 추가 후 프리팹 배치 

Player 오브젝트에 작성한 스크립트를 추가해주고 만들어두었던 총알 프리팹을 배치해 준다.

그리고 FirePosFire_effect에 각각 위치용 오브젝트와 효과음 오브젝트를 넣어준다.

 

 

 

 

 

4. 최종 결과물

 

 

다니엘 전투 화면
해린 전투 화면
하니 전투 화면
혜인 전투 화면
민지 전투 화면

 

 

캐릭터별로 각각 다른 색깔의 이펙트가 나오고 다른 색깔의 하트 총알이 발사되는 모습을 확인할 수 있다.

다음 글에서는 각 멤버들이 인터뷰에서 말했던 걸 토대로 기획한 슈퍼파워 스킬을 구현할 계획이다.

 

 

 

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

뉴진스 파워퍼프걸 팬게임 제작 (10)_ Stage1_ 스킬 구현 저번글에서는 일반 공격을 구현했었다. 뉴진스 파워퍼프걸 팬게임 제작 (9)_ Stage1_멤버 5명 개별 캐릭터 공격 구현 (New jeans Powerpuff girls fan 뉴

culturelevel.tistory.com

 

 

 

반응형