Unity 2D Pattern 생성기 + 랜덤으로 패턴 나오기

농담고미고미·2024년 8월 14일

Unity 개발 일지

목록 보기
19/26

패턴이 이번 게임 중 최고난도 ^^. 일정한 곳에서 패턴을 생성하고, 일정한 곳에서 패턴을 파괴시킨다. 간단한 거 아니야? 싶겠지만, 클로버와 함께하면 다양한 문제가 발생한다... 클로버에 맞춰서 수정하는 건 앞으로 할 예정.

여튼 레츠고.

하나의 패턴이 x축 -30에 도달 시 Pattern Spawn Point에서 새로운 패턴을 생성하며, 하나의 패턴이 생성된지 15초가 지나면 그 패턴은 파괴된다. (오브젝트 풀로 만들걸! 차후에 오브젝트 풀로 바꿀 예정이다.)

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

public class SpawnPoint : MonoBehaviour
{
    public GameObject[] prefabToSpawn;
    private GameObject newPattern;
    public float spawnThresholdX = -30f;
    public float destroyThresholdX = -70f;

    public void Start()
    {
        SpawnObject();
    }

    private void Update()
    {
        if (newPattern != null)
        {
            Destroy(newPattern, 15.0f);

            // Check if the current pattern's x position is less than or equal to the spawn threshold
            if (newPattern.transform.position.x <= spawnThresholdX)
            {
                SpawnObject();
            }
        }
    }

    public GameObject SpawnObject()
    {
        if (prefabToSpawn != null && prefabToSpawn.Length > 0)
        {
            int index = Random.Range(0, prefabToSpawn.Length);
            newPattern = Instantiate(prefabToSpawn[index], transform.position, Quaternion.identity);
            return newPattern;
        }
        return null;
    }
}

원래는 x축이 -80에 도달하면 그 패턴을 삭제 시키고 싶었다. 근데 그러면 클로버를 밟고 뒤로 가면 이미 패턴이 삭제되어 있는 경우도 있고, 만든지 2주정도 지나서 잘 기억이 안 나는데 패턴이 제대로 생성이 안되는 오류가있었다. 그래서 일정 시간이 지나면 파괴되도록 바꿨다.

PrefabToSpawn에 미리 만들어둔 10개의 Prefab Pattern이 있다. 그래서 이 배열에서 랜덤으로 하나의 프리팹 패턴이 패턴 생성기의 위치에서 Instantiate된다. 참고로 Quaternion.identity은 회전 없음을 나타냄.

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

public class PatternManager : MonoBehaviour
{
    public SpawnPoint patternSpawnPoint;
    public static PatternManager sharedInstance = null;

    private void Awake()
    {
        if(sharedInstance != null && sharedInstance != this)
        {
            Destroy(gameObject);
        }
        else
        {
            sharedInstance = this;
        }
    }

    private void Start()
    {
        SetUpScene();
    }

    public void SetUpScene()
    {
        SpawnPattern();
    }

    public void SpawnPattern()
    {
        if(patternSpawnPoint != null)
        {
            GameObject pattern = patternSpawnPoint.SpawnObject();
        }
    }
}

패턴 매니저는 싱글톤이어야지! 혹시 패턴 만드는거 관련 기능이 더 추가되면 SetUpScene()에서 관리할 예정. SpawnPattern을 통해 패턴을 생성하자. patternSpawnPoint.SpawnObject()를 하면 gameObject인 newPattern이 return 된다. 그걸 gameObject pattern에 넣으면 끝!

그럼 게임에서 패턴 생성기를 내가 원하는 위치에 놔준다. 그럼 패턴이 잘 생성된다! 나같은 경우는 패턴 생성기에서 x축으로 -30인 곳에서 패턴이 생성되게끔 변경했다. x축 0에서 생성시키니깐 패턴 길이가 안 맞아서 고양이가 어처구니 없게 죽는 일이 발생해서...ㅎ

여튼 앞으론 클로버도 거의 완성이겠다, 움직이는 카메라에 맞춰 패턴 생성기도 좀 손볼거다. 끝!

profile
농담곰을 좋아해요 말랑곰탱이

0개의 댓글