Unity_개발일지_05

홍신영·2024년 9월 13일
0

Unity

목록 보기
7/62

보통 디펜스 게임을 하면 강화하고 합성하고 해서 다음 웨이브를 준비한다.
그래서 오늘은

캐릭터 합성 구현하기


현재 만들고 있는 화면 인데
1. 합성?조합?을 위한 조합표 버튼 만들고 누르면?


2. 조합표가 등장하고

3. 조합식을 따라 서로 다른 캐릭터 3개를 합성하면?

4. 등장

구현방법

using UnityEngine;
using UnityEngine.UI;
public class CombineHero : MonoBehaviour
{

	public Summon summon;
	public Button combineBtn;

private void Start()
{
    if(summon == null)
    {
        summon = GetComponent<Summon>(); //참조 가 안되서 null인지 debug찍어보니 필요해진 코드
    }
}

// 배열 인덱스와 생성할 히어로 인덱스를 매개변수로 받는 합성 함수
public void CombiningHeroes(int[] heroIndices, int resultHeroIndex)
{
    // 합성할 히어로를 담을 배열
    GameObject[] heroesToCombine = new GameObject[heroIndices.Length];
    GameObject resultHero = null;

    // 리스트에서 Heros[0], Heros[1]... 등 필요한 히어로들을 찾기
    foreach (GameObject hero in summon.summonHeroes)
    {
        for (int i = 0; i < heroIndices.Length; i++)
        {
            if (hero.name.Contains(summon.Heros[heroIndices[i]].name) && heroesToCombine[i] == null)
            {
                heroesToCombine[i] = hero;
                break;
            }
        }

        // 결과로 생성될 히어로가 있는지 확인
        if (hero.name.Contains(summon.Heros[resultHeroIndex].name) && resultHero == null)
        {
            resultHero = hero;
        }
    }

    // 필요한 모든 히어로들이 있는지 확인
    bool allHeroesFound = true;
    for (int i = 0; i < heroesToCombine.Length; i++)
    {
        if (heroesToCombine[i] == null)
        {
            allHeroesFound = false;
            break;
        }
    }

    if (allHeroesFound && resultHero == null)
    {
        // 합성 대상 히어로 파괴 및 리스트에서 제거
        for (int i = 0; i < heroesToCombine.Length; i++)
        {
            Destroy(heroesToCombine[i]);
            summon.RemoveHeroFromList(heroesToCombine[i]);
        }

        //생성할 위치 리스트
        int minIndex = summon.FindPositionWithLeastSummons();

        // 새 히어로 소환
        GameObject newHero = Instantiate(summon.Heros[resultHeroIndex], summon.heroPos[minIndex].position, Quaternion.identity);

        // 소환된 히어로를 리스트에 추가
        summon.summonHeroes.Add(newHero);

        Debug.Log($"Heros[{string.Join(",", heroIndices)}]를 합성하여 Hero[{resultHeroIndex}]을 소환했습니다.");
    }
    else
    {
        Debug.LogError("합성에 필요한 히어로가 부족하거나 결과 히어로가 이미 존재합니다.");
    }

}
//더 좋은 방법이 있을까 싶긴 하지만 일단 조합 마다 버튼에 달아주기
public void Combine1()
{
    int[] indicesToCombine = { 0, 1, 2, };
    CombiningHeroes(indicesToCombine, 3);
}

public void Combine2()
{
    int[] indicesToCombine = { 1, 2, 3, };
    CombiningHeroes(indicesToCombine, 4);
}
public void Combine3()
{
    int[] indicesToCombine = { 2, 3, 4, };
    CombiningHeroes(indicesToCombine, 5);
}

}

뭔가 더 간단하게 짤 수 있을 것 같지만 수정하다 보니 일단은 이게 최선.

profile
게임 클라이언트 개발자

0개의 댓글