반응형

 

 

 

 

FindObjectsOfType<T>()

- 해당 함수로 구해지는 배열 원소들은 하이어라키 배치대로 순서가 보장되지 않는다.

- 즉, 다음과 같이 보여진다.

 

 

 

 

해결 방법

- 위 문제를 해결하기위해서는 2가지 방법이 있다.

  1. 인스펙터에서 직접 드래그 앤 드롭 해준다.

  2. FindObjectsOfType<T>로 배열을 구한 뒤, 정렬을 한다.

- 1번과 같은 경우는 노가다가 심해진다. 따라서, 코드로 정렬을 해주는 방법을 취한다.

- 이 때, 배열의 정렬은 transform.GetSiblingIndex() 값을 비교해서 정렬을 해주면 된다.

- SiblingIndex 값은 하이어라키에 배치된 순서의 값을 반환해준다.

 

 

 

코드

using System;
using UnityEngine;

SomeClass[] arr = FindObjectsOfType<SomeClass>();
Array.Sort(arr, (a, b) =>
{
    return a.transform.GetSiblingIndex().CompareTo(b.transform.GetSiblingIndex());
});
  • 위 코드는 오름차순으로 정렬되기 때문에 내림차순으로 정렬하고 싶으면 return 라인에 a와 b의 위치를 변경하면 된다.

 

 

 

결과

 

 

 

 

 

반응형
반응형

 

 

포톤 에셋을 받은 후, 비주얼 스튜디오로 작업을 하게되면 한번씩 다음과 같은 에러를 본다.

 

  • CS0246 형식 또는 네임스페이스 이름을 찾을 수 없습니다. using 지시문 또는 어셈블리 참조가 있는지 확인하세요.

실수로라도 포톤에셋의 코드들을 건드릴일이 없는데 CS0246에러를 만나면 성가시기 짝이없다.

물론 무시하고 사용해도 기능적으로 문제가 생긴다거나 하지는 않지만, 참조를 못하는 상황이니 자동완성으로 편하게 코딩은 불가능하다.

 

 

해결방법

1. 유니티 프로젝트와 비주얼 스튜디오를 닫는다.

2. 유니티 프로젝트 폴더에서 .csproj.sln확장자의 파일을 모두 삭제한다. (유니티를 다시 실행하면 자동으로 생성이 되니 안심하고 지우면 된다.)

3. 유니티를 재실행한다.

 

 

 

반응형
반응형

 

 

 

유니티 스크립트를 편집하려할 때, 유니티 스크립팅 API에 대한 자동완성이 되지 않을때가 있다.

 

원인

- 유니티 프로젝트에서 .csproj.sln파일 생성이 안되서 발생하는 문제이다.

- 유니티 프로젝트 폴더를 열어보면 다음과 같이 유니티 프로젝트 관련 폴더만 보이고 비주얼스튜디오 관련 파일은 보이지 않는것을 확인할 수 있다. (비주얼 스튜디오의 솔루션 탐색기에서도 확인이 가능하다.)

 

 

 

 

해결방법

1. EditPreferenceExternal ToolsExternal Script Editor에서 비주얼 스튜디오를 선택한다.

 

2. 비주얼 스튜디오를 재시작하면 프로젝트 폴더에서 .csproj와 .sln 파일이 생성되는것을 확인할 수 있다.

 

 

 

 

반응형
반응형

※ 해당 에러가나는 유니티 버전은 Hub에서 유니티 설치시, JDK를 같이 설치하는 버전부터이다.


구글 플레이 게임 서비스(이하 GPGS)를 연동하기위해 플러그인을 다운받아 유니티에 임포트를 하고 Resolve를 했는데, 난데없는 에러가 떴다.

 

Gradle failed to fetch dependencies.
ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.

 

'JAVA_HOME'이라는게 설정되지 않았다고한다.

찾아보니 최근 유니티들은 Hub에서 유니티 설치시, SDK, NDK, JDK를 다 설치하다보니 JAVA를 따로 설치할 필요가 없다. 문제는 여기서 발생하는데 GPGS 플러그인 설치 후, Resolve를 할 때 에러가 발생하는것이다.

에러를 추가로 읽어보면,

 

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation.

 

JAVA가 설치된 곳을 JAVA_HOME 변수와 일치시켜달라고 한다. 즉, JAVA_HOME이라는 환경변수를 설정해주면 된다.

그럼 시작해보자!

 

환경변수 설정

1. 내 컴퓨터에서 속성에 들어간다.

2. 고급 시스템설정 - 환경변수 버튼을 눌러준다.

 

3. 시스템 변수 - 새로 만들기 버튼을 눌러 다음과 같이 설정한다.

4. 변수 값에 OpenJDK의 경로를 넘겨준다

  ※ 경로 : 유니티 설치 경로\Editor\Data\PlaybackEngines\AndroidPlayer\OpenJDK

 

 

여기까지 설정을 마쳤다면 이제 재부팅 후 다시 Resolve를 시도해보자!

그러면 Resolve가 진행되며 위와같이 정상적으로 성공 메세지를 받을 수 있다!

 

반응형
반응형

※ 본 포스팅은 유니티 버전 2018.4.20(LTS)을 대상으로한 솔루션입니다.


구글 플레이 업로드를 위해 안드로이드 빌드를 하던중 갑자기 에러를 발견하게 된다.

 

com.android.builder.internal.aapt.v2.Aapt2Exception: Android resource linking failed

 

하루 전까지만 해도 잘 되던 빌드가 위와 같은 에러가 뜨면서 진행되지를 않는다.

처음보는 에러에 검색을 해봤지만.. 유니티에서 문제가 된 사람은 거의 없던건지, 잘 못찾았던건지 안드로이드 스튜디오에서 작업한 사람의 문의글로 가득한 페이지를 보면서 이것저것 따라해보기 시작했다.

 


시도 1) 안드로이드 스튜디오 업데이트

 

2018 버전으로 작업한 프로젝트이기에 유니티에서 제공하는 SDK를 사용하지 않고 안드로이드 스튜디오에서 받은 SDK를 사용중이라 시도를 해봤다.

 

안드로이드 스튜디오 몇몇 버전이 AAPT2라는게 기본적으로 사용되어진다고 해서 최신버전으로 바꾸거나 AAPT2를 비활성화 하라는 내용인데, Unity에 대한 설명이 아니라서 일단 안드로이드 스튜디오를 최신버전으로 변경후 빌드를 시도해봤다.

 

결과 : 실패


시도 2) .android .gralde 폴더 제거

 

이 시도는 스택오버플로우에서 보게된것인데, 위의 폴더를 제거하면 빌드가 된다고하는 내용이었다.

※ 위의 폴더들은 C:\Users\UserName 폴더 안에 존재한다.

 

.android, .gradle 폴더 삭제후 빌드를 시도해봤다.

 

결과 : 실패


시도 3) mainTemplate.gradle 설정

 

이 시도는 gradle 버전을 수정하여 해결하는 방법이다.

 

유니티 Build setting - Publishing setting에 Main gralde template를 체크해주면 플러그인 폴더에 mainTemplate 파일이 생성된다.

 

해당 파일을 열면 dependencies 항목에 다음과 같이 적혀있다.

dependencies {
        classpath 'com.android.tools.build:gradle:3.4.0'
**BUILD_SCRIPT_DEPS**}
}

필자의 경우엔 위와 같이 gradle 버전이 3.4.0으로 되어있었는데, 해당 부분을 3.3.2로 변경후 저장, 빌드를 시도해봤다.

 

결과 : 성공

 


급하게 해결해야 했던 상황이라, 왜 저게 되는건지 자세한 사항은 파악하지 못했지만.. 일단 무사히 빌드가 되는것에 안도하고 위기를 넘기게 되었다.

 

자세한 사항은 추후 파악 후 서술할 예정.

반응형

+ Recent posts