오늘은 튜터님께 프로젝트를 진행하면서 생긴 의문들을 여쭈어 보았다.
게임에 처음 시작했을 때를 체크하는 flag를 만들어 두고, 튜토리얼을 한번 다 진행을 하면 flag를 false로 설정하여 Playerprefs에 저장을 해두면, 이후에 게임을 시작해도 튜토리얼을 다시 진행하지 않도록 만들고 싶어서 드린 질문이다. 튜터님께서는 이런 flag를 로컬에 저장하는 것도 괜찮을 것 같다고 하셨다.
싱글톤은 객체 지향의 SOLID 원칙을 위배한다고 알고 있었기 때문에 드린 질문이였다. 그러나 튜터님도 많이 쓰신다고 하셨음. 싱글톤이 느슨한 결합을 위배하기는 하지만, 그럼에도 전역에서 자주 불려야 할 경우에는 싱글톤을 시키라고 하셨음.
게임잼에 참여해보는 것이 좋을 것 같다고 하셨음. 또한 유니티 공식 유튜브나 게임 개발로 유명한 분들의 커뮤니티 및 유튜브를 확인해보면 좋을 것 같다고 하셨다.
마케팅을 위한 소재가 매력이 있어야 한다. 사람들이 스크린샷만 봐도 흥미를 느낄 수 있을 정도의 요소가 있어야 함! 또한 만드는 게임의 타겟층을 잘 분석하여 어떤 생각을 가지고 있을지, 어떤 취약점이 있을지를 잘 파악해야 한다고 하셨다.
튜터님께서는 MVP, MVVM 패턴을 자주 사용한다고 하셨다.
참고 : https://beomy.tistory.com/43,
https://frtt0608.tistory.com/94,
https://velog.io/@kyeun95/%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4-MVVM-%ED%8C%A8%ED%84%B4%EC%9D%B4%EB%9E%80나중에 공부하기
MVP : Model-View-Presenter
MVVM : Model-View-ViewModel
오늘 발생한 트러블 슈팅이다. ItemManager에서 플레이어의 시작 아이템을 추가해주기 위해 Start에서 Init()을 실행하여 플레이어의 Inventory Grid에 추가를 해주려 했다. 그러나 문제는, Inventory Grid에서 사용하는 PanelSolt 배열의 초기화가 ItemGrid의 Start에서 실행이 되기 때문에, 둘의 실행 시점에 따라 에러가 발생을 했던 것이다.
따라서 둘의 실행 순서를 설정하기 위해 유니티에서 Edit → Project Settings → Script Execution Order를 설정했다.
ItemGrid 다음에 ItemManager가 실행이 되도록 수정을 했다. 다만 정말 신기한 점은, 오늘 이전까지 아무런 문제 없이 잘 동작을 했는데, 갑자기 오늘 문제가 발생을 했다는 점이다. 그래서 트러블 슈팅을 기록하기 위해 다시 원래의 상태로 만들어 실행을 했는데, 다시 문제가 발생을 하지 않았다. 어쨌든 Script의 실행 순서를 변경하는 방법이 있다는 것을 알았기 때문에 기록한다.
내일 한번 튜터님께 찾아가서 질문을 드려야 할듯... 메이플의 스타캐치와 비슷한 시스템을 넣어 룬스톤 강화를 진행하려고 했는데, 간헐적으로 버튼을 눌러도 커서가 멈추지 않는다거나, 갑자기 위치가 이상한 곳으로 초기화가 되는 문제가 발생을 한다.
public class RuneStoneSlider : MonoBehaviour
{
[SerializeField] Slider _slider;
bool _enabled = true;
public float sliderRate = 0.05f;
// Start is called before the first frame update
void Start()
{
_slider = GetComponent<Slider>();
_slider.value = 0;
}
// Update is called once per frame
void Update()
{
if (_enabled)
{
_slider.value += (sliderRate * Time.deltaTime * 30);
if (_slider.value >= 1)
{
_slider.value = 1;
sliderRate = -sliderRate;
}
if (_slider.value <= 0)
{
_slider.value = 0;
sliderRate = -sliderRate;
}
}
else
{
return;
}
}
public void OnClickConfirmButton()
{
_enabled = _enabled == true ? false : true;
Debug.Log(_slider.value);
}
}
코드도 간단해서 어디서 문제가 발생하는 것인지 모르겠다.
일단, 뭔가 버튼이 더블 클릭이 되는 건가? 싶기는 한데, 그렇다고 이상한 위치로 커서가 초기화가 되는 문제는 해결되지 않는다. 계속 고민을 해보고 구글링을 해보아도 해결되지 않아서 내일 튜터님께 여쭈어봐야 할듯...