상세 컨텐츠

본문 제목

1015 TIL - 유니티 입문 팀 프로젝트 주차 돌입

스파르타 코딩캠프/'24 Today I Learned

by lucar 2024. 10. 15. 21:18

본문

좀 그림이 난잡하지만 대충 와이어프레임을 짰다.

 

https://gitmind.com/ 을 이용했다.

 

위에 있는 차트를 기반으로 칸반보드를 제작하고

 

팀원 이름은 개인정보 보호를 위해 지웠다. 나

사운드 매니저 싱글톤 선언을 해주고

[SerializeField] private AudioSource _bgmPlayer; //배경음악
[SerializeField] private AudioSource _sefPlayer; //효과음

[SerializeField] private AudioClip[] _bgm;
[SerializeField] private AudioClip[] _sef;

private static SoundManager instance;
public static SoundManager Instance
{
    get
    {
        if(instance == null)
        {
            instance.GetComponent<SoundManager>();
            if (instance == null)
            {
                GameObject obj = new GameObject();
                obj.name = typeof(SoundManager).Name;
                instance = obj.AddComponent<SoundManager>();
            }
        }

        DontDestroyOnLoad(instance);
        return instance;
    }
}

 

기능을 추가해주었다.

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

private void Start()
{
    /*PlayBgm("기본 배경음악 이름");*/
}

private void PlayBgm(string soundName)
{
    for (int i = 0; i < _bgm.Length; i++)
    {
        if (_bgm[i].name == soundName)
        {
            _bgmPlayer.clip = _bgm[i];
            _bgmPlayer.Play();
            return;
        }
    }
}

private void StopBgm()
{
    _bgmPlayer.Stop();
    _bgmPlayer = null;
}

private void PlaySef(string soundName)
{
    for (int i = 0; i < _sef.Length; i++)
    {
        if (_sef[i].name == soundName)
        {
            _sefPlayer.clip = _bgm[i];
            _sefPlayer.Play();
            return;
        }
    }
    _sefPlayer = null;
}

오디오 소스를 하나만 두면 효과음이 재생되면 배경음악이 끊기므로 두개를 두어서

배경음악이 재생되는 동안 효과음이 재생될 수 있도록 했다. ㅅㅁㅅ님 감사합니다..

 

팀프로젝트 진행하는 동안 수많은 버튼들이 우후죽순 생겨나는 바람에

public class SceneMoveButton : MonoBehaviour
{
    public enum SceneName
    {
        StartScene,
        TitleScene,
        CharacterSelectScene,
        MainScene,
        ScoreScene,
    }
    public SceneName sceneName;

    public void ChangeScene()
    {
        SceneManager.LoadScene(sceneName.ToString());
    }
}

이 스크립트를 추가하여

 

요렇게 만들어서 딸깍 만으로 이동 할 수 있는 씬을 선택할 수 있게 만들었다.

 

아직 캐릭터에 무슨 스탯이 필요할지 정확히 정해지지 않아서

여러개의 SO 파일을 작성했다.

하나만 살펴보자면 

[CreateAssetMenu(fileName = "Bullet Default Stat", menuName = "Stat/Bullet/Default", order = 0)]
public class BulletDefaultStat : ScriptableObject
{
    [Header("Default Stat")]
    public string BulletTag;
    public float Speed;
    public float Delay;
    public int Damage;
    public float Size;
    public float Spread;
    public int NumberOfProjectiles;
}

이런식으로 작성되어서

이렇게 추가되며

 

이렇게 내부 내용을 작성할 수 있게 끔 만들어서 오브젝트에 public "필요한 스탯이름" stat;을 입력하여

해당 SO 파일을 추가해준다면 본문에 추가하거나 클래스를 따로 만들 필요 없이 내용을 작성 가능하다.

 

TTE

관련글 더보기