유니티 에디터가 아닌 타 플랫폼 빌드시에만 위 에러 뜨는 경우

 


#if UNITY_EDITOR

<< 여기에 Serialized 된 필드가 없어야한다 >>

#endif

위와같이 #if 와 #endif 전처리기 구문 사이에 public 이나 [SerializedField] 구문으로 선언된 필드가 없어야한다.

원리는 모르겠으나 드러난(serialized) 구조가 변경되면 에러를 뿜는것 같다.

#if 문을 변수들 잘 피해서 옮긴 후 테스트 해보자.

 

엑셀파일에 대고 마우스 우클릭 - excelAssetScript 생성한 다음 열어보면

 

public List<Entities> Sheet1  이런 줄이 있는데 Sheet1 부분을 엑셀파일의 실제 sheet 네이밍과 맞춰야한다.

기본 네이밍이 Sheet1 이라 안바꿨으면 코드도 그대로 둬야한다.

 

변수명 습관적으로 바꾸다가 로드 안돼서 삽질하다가 해결

 

 

 

#유니티

크기를 유지한채 애니메이션 개별 이미지들 동시에 자르는 법

 

https://motivation.tistory.com/959

 

위 링크를 참고하되 마지막에 PNG 옵션에서 Trim layer는 꺼주도록 한다

빈 공간을 자르면 애니메이션 중심이 흐트리지기 때문이다.

 

 

 

unity 

 

내 경우에는 에디터상에서는 별 이상없었으나 안드로이드 빌드한 경우 위의 경고메시지가 뜨면서 로딩이 작동하지 않았다. 몇가지 해결책을 정리해본다.

 

1) 세이브파일 삭제하고 다시 세이브

https://docs.moodkie.com/easy-save-3/es3-api/es3-methods/es3-deletefile/

 

2) 수동 레퍼런스 추가

유니티 프로젝트 뷰에서 해당 파일들 다 선택한후 우클릭 -> Easy save3 -> Add references to manager

원래 자동으로 파일참조를 업뎃하는데 문제가 발생했기에 수동으로 추가해주는 과정이다. 안드로이드 에러는 이걸로 해결했다.

 

3) 이지세이브 포럼에서 검색

https://moodkie.com/forum/search.php?keywords=Reference+with+ID+could+not+be+found

영어가 된다면 직접 문의하거나 다른사람의 사례를 참고하면 좋다

 

 

유니티 내장 Pool을 쓰면서 재사용 시 초기화 순서가 많이 헷갈려 원하는대로 컨트롤이 힘들었다.

로그를 찍어가면서 확인한 결과 알게된 것을 정리해본다.

 

[최초 생성 시] ObjectPool.Get()   Awake() OnEnable() ActionOnGet() Start()

 

[재활용 시] ObjectPool.Get() ActionOnGet() 안에서 gameObject.SetActive(true)하면 즉시 OnEnable()

 

유니티에서 setActive(true) 호출하면 OnEnable()이 호출되는 것을 알고있어야한다.

최초생성시에는 Get()과 동시에 생성되면서 gameObject의 awake -> OnEnable 사이클을 타지만,

재활용 시에는 ActionOnGet 먼저 호출되고 그 안에서 SetActive() 호출 시 -> OnEnable()이 호출되는 흐름을 타게된다. 최초생성시와는 다르게 이미 생성된 오브젝트를 재사용하는거라 Start()는 호출되지 않는다.

물론 이 순서도 ActionOn--() 안에서 SetActive()을 쓰지 않으면 바뀐다.

 

대개 ObjectPool.Get() 이후에 transform pos나 rotation 값을 넣어주는데 이 부분은 사이클의 맨 마지막에 들어오기 때문에 ActionOnGet(), OnEnable()에서 아무리 바꿔도 소용이 없는 것이다.

 

아래 코드를 보자.

 

 

 

Pool.Get() 에서 연달아 호출되는 메서드에서 position을 정해도 다음 줄에서 Vector3.zero로 바뀌는 모습이다.

주의해서 사용하자

 

 

 

 

 

 

#unity

+ Recent posts