클래스들의 인스턴스를 하나만 생성해서 전역적으로 접근할 수 있는 패턴 주로 Unity의 GameManager를 싱글톤 인스턴스라고 부른다. 여기서 주의할점은 싱글톤 인스턴스를 두개 이상 만들면 안된다는 것이다. 왜냐하면 싱글톤 인스턴스에는 매우 중요한 기능들이 다수 포함됐기 때문에 이것이 중복될 경우 수 많은 오류가 발생할 수 있다. 싱글톤 인스턴스를 사용할 때는 'I' 를 사용하여 접근하면 된다.
분류 전체보기
TimeScale 이란 게임 시간이 현실 시간에 대비하여 흘러가는 속도를 말한다. 즉 TimeScale을 1.0으로 설정해 놓으면 게임 시간과 현실 시간이 같다는 것이다. 주로 gameManager의 Start 부분에 timescale = 1.0f로 설정한다. 그 이유는 게임의 메인 화면을 다시 로드 해야할 경우 다시 게임이 진행되야 하기 때문이다. 예를 들어 end 버튼을 구현 하여 timescale을 0f로 설정하고 다시 메인 화면을 로드했을 경우 Start함수가 다시 호출되며 메인 화면이 실행될 수 있게한다.
instantiate : Gameobject를 복사하여 생성한다. Destroy : Gameobject를 삭제한다. Gameobject : 현재 화면에 있는 오브젝트 들, 주로 prefabs에 있는 것들을 말한다. instantiate를 사용하여 원하는 위치에 복사하고 싶은 경우엔 new Vector3를 이용하여 x, y, z 값을 설정 해주면 그 위치에 무조건 생성된다. 즉, 이 복사된 오브젝트의 위치를 한번더 transform.position으로 바꿔도 생성 자체는 처음에 설정한 위치에서 생성된다. Destroy는 슈팅게임의 탄알을 예로 들자면, 탄알을 쏘면 화면 박으로 탄알 오브젝트들이 나가기 시작한다. 이 때 화면에서는 없어진 것으로 보이지만 사실 화면을 벗어나 그대로 날라가고 있는..
주로 이 오류는 컴포넌트 과정, 공백, 변수명의 오류(!=) 등의 이유로 발생한다. 오늘 이 글을 쓴 이유는 Singleton을 gameManager에 선언해서 다른 스크립트에서 호출할 때 오류가 났기 때문이다. 결론을 말하자면 Singleton 인스턴스 선언만 했을 뿐 void Awake 함수를 안썼던게 이유였다. 이 오류뿐만 아니라 다른 오류가 났을 때도 가만히 있지 말고 검색과 스크립트 확인으로 빠르게 오류를 해결해 나가면 시간절약을 할 수 있을 것이다.
Git 과 Git hub는 기능이 같은 것 처럼 보이지만 사실 다른 부분이 있다. Git은 버전을 관리하는 도구이고 Git hub는 협업을 위한 온라인 저장소다. 즉, 코드의 변화를 기록하고 싶다면 Git을 이용하고 내가 적은 코드를 온라인으로 백업하고 협업을 하고싶다면 Gi hub를 사용하면된다. Git hub의 사용법(명령어) 항상 Git을 이용한 코드작성의 시작은 git pull 이용하여 최신화를 해야 한다. 코드관리의 시작 - git init > 코드 변경 후 추가 - git add > 코드 변경에 대한 내용 - git commit > 스테이징 영역에 있는 코드들을 Git hub에 등록 - git push origin 브랜치이름 > 브랜치와 메인 코드의 합병 - git merge 이러한..
1. Unity를 이용하여 협업을 진행할 때 서로 버전을 맞춘다. 만약 서로 버전이 맞지 않는다면 팀원이 소스파일을 열지 못한다. 어떻게든 바꿔서 올린다고 해도 전에 쓰던 코드의 문법이 새로운 버전에서 쓰이지 않았을 확률도 높기 때문에 많은 충돌이 일어나게 된다. 또한 Window 전용, Mac 전용 버전이 있기때문에 만약 서로다른 OS에서 협업할 시 이 부분도 확인해주면 좋다. 2. Git hub를 이용할 때 Repository에 Git ignore를 추가해야 한다. ignore파일을 추가해야만 Unity파일을 업로드 할 수 있다. 파일의 추가 방법은 Repository 클릭 -> Add. gitignore Unity 선택 3. Unity와 Script파일(코드)은 브랜치마다 동시에 적용..
Unity를 이용한 협업을 진행할 때 주로 두가지 문제가 생긴다. Script 충돌 Scene 충돌 여기서 중요한건 Scene충돌인데 이 문제를 해결하려면 매우 복잡하고 어려워서 애초부터 협업을 진행할 때 Scene을 건들이면 안된다. 해결방법 1. 자신이 Scene을 만들고 싶다면 겹치지 않게 새로운 Scene을 만든다. 2. Scene에서 만든 모든 것을 Prefab화 시킨다. 결론 번거롭더라도 기능을 추가할 때마다 Merge하는 습관을 들이는게 좋다고 생각한다. 너무 많은 기능을 만들고 갑작스럽게 추가하려면 많은 오류가 발생할 수 있고 열심히 만든 파일이 손상을 입을 수 있다.
PlayerPrefs Unity 게임을 제작할 때 기록을 계속 보존하고 싶은 경우가 생긴다. 그럴 때 사용하는 것이 PlayerPrefs이다. 사용법: PlayerPrefs(KeyValue, value(int, float...)) 키 값을 이용한 value값을 저장하는 구조다. 즉, PlayerPefs("apple", 1)이라고 하면 apple이란 Key의 정수형 1 값이 들어간다는 것이다. 이는 Scene과 Scece사이의 접근을 싱글톤을 사용하지 않고 가능하게 해준다. 하지만 저장방식이 로컬 저장 방식이기 때문에 Unity상의 제작한 게임의 실행이 종료되고 게임이 저장되기 때문에 이 점을 주의해야 한다. 내일 할 것 오늘은 프로젝트를 마무리하는 작업을 했다. 내일은 프로젝트를 끝..