본문 바로가기

Unity

(33)
2020-05-16 코드분석 1-2 [게임플랫폼평가] 누군가2의 코드분석 ================================= App.Class 더보기 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; public class App : MonoBehaviour //App 클래스 { public Button btn; //public 으로 버튼 뚫어서 넣음 void Start() { //버튼 클릭시 인게임으로 넘어감(람다식) this.btn.onClick.AddListener(() => { SceneManager.LoadScene("Ingame"); }); } v..
2020-05-16 코드분석 1-1 [게임플랫폼평가] 누군가의 코드분석 ================================= App.Class 더보기 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; public class App : MonoBehaviour { private void Start() { SceneManager.LoadScene("InGame"); //앱에서는 그저 InGame 로드만 했다. } } DataManager.Class 더보기 using System.Collections; using System.Collections.Generic; using UnityEngine; usin..
2020-05-15 현재상태 리스트 모든것을 초록색으로 만들때까지 피똥쌀만큼해보자
2020-05-14 과제 게임만들기(미완성) 먼저 오브젝트풀을 제대로 이해하고 싶었기에, 처음부터 다시 천천히 만들기로 결심했다. 그래서그런지 아직미완성이다. 하지만 오브젝트풀이 왜 필요한지 데이터매니져와 오브젝트풀을 연동하려면 어떻게 해야하는지, 얼추 알게 되었고, 어느정도 생각정리가 되었다. 그리고 하면서, 그전에 아리송했었던, Instantiate ,AddComponent, transform.SetParent가 언제 어떻게 써야하는지를 확실히 알게 되었다. 물론 완벽하게 이해한것은 아니지만, 전에는 어느시점에서 사용해야 결과가 어떻게나오는지를 전혀 모르고, 의식의흐름대로 사용했다면, 지금은 어떻게 사용해야, 결과가 어떻게 되는지 알게 되었다. --------------------------------------------------------..
UnityException 오류 UnityException 라는 오류를 당했다. GameObject.Find("Hero").transform.GetChild(0) == null 이 지점에서 오류가 났다. 코드를 간단히 설명하자면, 버튼 여러개를 만들어, 각버튼 클릭시의 인덱스값을 CreateHero 매개변수로 받는다. 먼저 Hero 이름을 가진 게임오브젝트 껍데기를 동적으로 생성 (==null). 동적으로 생성된 Hero의 자식이 없다면, 매개변수로 받은 인덱스로 오브젝트풀에서 프리팹을 가져와서 Hero의 자식으로 넣고, (!=null). 동적으로 생성된 Hero의 자식이 있다면 그 자식을 찾아서 ReleaseAsset으로 비활성화 시키고 오브젝트풀로 넘길려고 했는데, UnityException이라는 생소한 오류를 당했다. transf..
ArgumentException 오류 프리펩의 자원을 클론으로 생성하기 클론을 생성하게 된다 자원은 "Assets/Resources/" 안에 들어가야지만 불러올수 있다. ArgumentException: The thing you want to instantiate is null. 이런식의 오류가 났는데, 처음보는 오류라 의아했다. 단지 Assets/Resources/ 폴더아래 path에 불러와야할 파일이 없다는것이다. 간단하게 prefab으로 사용할 파일들을 Resources 폴더 안에 넣어주는걸로 해결 됐다.
생명주기로 인한 NullReferenceException ObjectPool을 Load하는데 NullReferenceException에러가 생겼다. 문제는 ObjectPool.GetInstance().LoadAllAsset(); 에서 NullReferenceException 에러가 났는데, ObjectPool에서부터 에러가난것 같아 보였다. 해결 에러의 이유는 new 지정자를 사용해 객체화 시켜주는 것을 Awake에 해주냐, Start에 해주냐의 문제였다. 생명주기를 고려했을때 인스턴스화와 동시에 Awake가 먼저 실행되고 그 후에 Start가 실행되기 때문에 new 지정자를 Start에서 사용했을때 우선순위의 문제가 생기게 되는것이다. 그렇다면 왜? Start에서 사용했을때는 안되는걸까? 그리고 스크립트가 많아지고 겹치게되면 생명주기가 어떻게 되는걸까? 강사..
2020-05-14 유니티 싱글턴 패턴 이해하지 못했던것 ObjectPool.instance = this; Mono를 상속받기 때문에 사실 this는 Mono가 된다. 즉 현재 스크립트를 말하게 됨 Mono를 상속받기 때문에 Mono의 최대강점인 컴포넌트로 이용이 가능하게된다. ObjectPool.instance = new ObjectPool(); 일단 MonoBehaviour 를 상속받은 클래스는 new 로 동적 할당할 수 없다. 위에서 ObjectPool은 Mono를 상속 받기 때문에 new를 사용할 수 없는것이다. 내가 이게 갑자기 헷갈렸던 이유는 DataManager 생성에 있었다. 위의 코드에서 DataManager는 아무것도 상속받지 않는다. 그렇기 때문에 new 지정자를 사용할 수 있는데, DataManager를 코딩하던 도중에 ObjectPool..