WIL : 팀 프로젝트 회고

국기웅·2024년 6월 11일

이번 팀 프로젝트에서는 생존 게임을 개발하였다.
3D 기반이고, 필드에서 자원을 채취하고, 생존 관련 스탯들을 챙겨가며 건축도 하고, 퀘스트도 따라가는 rpg의 형식을 띄고 있다.

타이틀 스크린

시작 화면은 내가 만들었다.
사실 이미지로 때운거라 만들었다고 하기도 부끄럽다. 아쉬운 점은 '설정'부분을 만들지 못한 것이다.
설정에서 소리의 크기를 조절하거나, 키 세팅의 변경 기능을 추가하는 것도 좋을 것 같다.
추가로, UI에 3D모델을 넣는 것도 좋았을 것 같다. 특히 좌측 상단의 고양이가 회전하는 듯한 모습을 추가할 수도 있을 것 같다.

SoundManager

이전 스크립트에도 작성했듯이, 싱글톤의 사운드매니저를 추가하였다.
노래들을 미리 public AudioClip으로 등록해줬는데, 더 좋은 방법이 있었을 것 같다
예를 들면 List로 만들고 하나씩 꺼내온다던가..
특히 효과음과 같은 경우에는 List로 만들고, 외부 프로그램(json, 혹은 csv)에서 대화 스크립트를 짤때, 필요 효과음 넘버를 지정해두면 더욱 직관적으로 재생이 가능할 것 같다.

날씨 변경


public enum weatherState
{
    SUN,
    RAIN,
    SNOW
}

public class WeatherCycle : MonoBehaviour
{
    public GameObject rain;
    public GameObject snow;
    public float durationTime;

    public int RainColdValue;
    public int SnowColdValue;

    private float nowtime = 0;
    private int weathernum = 0;
    private ParticleSystem weatherParticleSystem = new ParticleSystem();
    private void Start()
    {
        WeatherDisable(rain);
        WeatherDisable(snow);
    }

    void Update()
    {
        nowtime += Time.deltaTime;

        if(nowtime > durationTime)
        {
            weathernum = Random.Range(0, 2);

            DuringWeather(weathernum);

            nowtime = 0;
        }
    }

    private void DuringWeather(int weathernum)
    {
        switch (weathernum)
        {
            case (int)weatherState.SUN:
                WeatherDisable(rain);
                WeatherDisable(snow);
                break;
            case (int)weatherState.RAIN:
                WeatherEnable(rain,RainColdValue);
                WeatherDisable(snow);
                break;
            case (int)weatherState.SNOW:
                WeatherEnable(snow,SnowColdValue);
                WeatherDisable(rain);
                break;
        }

    }

    private void WeatherEnable(GameObject Weather,int Value)
    {
        weatherParticleSystem = Weather.GetComponent<ParticleSystem>();
        weatherParticleSystem.Play();
        Weather.GetComponent<WeatherController>().coldValue = Value;
    }

    private void WeatherDisable(GameObject Weather)
    {
        weatherParticleSystem = Weather.GetComponent<ParticleSystem>();
        weatherParticleSystem.Stop();
        Weather.GetComponent<WeatherController>().coldValue = 0;
    }

}

이 코드들도 나름 아쉬운 점이 많다.
날씨의 상태가 3가지일때, 하나를 true로 하고 나머지를 false로 하는 과정은 매우 비효율적으로 보인다.
나중에 우박이라도 내리는 기능을 추가한다고 할 때, 그러면 추가해야 하는 코드가 매우매우 늘어나기 때문에 영 별로인 것 같다.
날씨를 켜고 끄는 메서드들도 중복되는 부분이 너무 많다.
true 를 play로 변경해 줄 수 있으면 매우 좋을텐데.. 많이 아쉽다.

총평

팀 전체적으로 보았을때 구현 기능은 많았다. 하지만 그만큼 오류도 많았다.
3D 프로젝트 자체가 오류가 많이 발생할 수밖에 없는 것 같다. 물론 아직 짬이 덜 찬것도 있겠지만..
기능 구현에 집중하는 것 보다, 초기에 구상과 프로젝트 구조를 잘 짜고 개발에 돌입하는 것이 좋을 것으로 보인다.

제일 크게 느낀 것은 "내가 해야한다고 생각하는 것" 이 아닌 "내가 만들 기능(해야하는것)"에 초점을 맞춰야 한다는 것 같다.
개발을 하다보면 내가 A기능을 만든다고 할때, B 와 C를 구현하면 A기능을 만들수 있겟다~라고 하는 생각이 든다. 하지만 그 과정중에 사고가 꼬리를 물고 결국 이상한 Z기능을 만들고 있을 때가 생긴다.
이럴땐 다시 원점으로 돌아가 A기능을 만드는 것에 초점을 맞춰주는 것도 좋을 것 같다.

profile
게임개발호소인

0개의 댓글