Unity 엔진용 VkQuality 플러그인은 시작 시간 권장 사항을 제공합니다. 특정 운영체제에서 게임에 사용할 그래픽 API인 Vulkan 또는 OpenGL ES의 기기에서 사용할 수 있습니다.
VkQuality는 Unity보다 더 제한된 기기 세트에서 Vulkan을 권장합니다. 엔진의 기본 허용 목록입니다. VkQuality를 사용하여 최신 그래픽이 있는 최신 기기에서 Vulkan 사용을 제한함 드라이버 문제의 영향을 받을 수 있습니다. VkQuality만 품질 보증이 아닌 추천을 제공합니다. 권장 기기에서 드라이버 문제가 발생할 수 있습니다. VkQuality는 맞춤 목록을 지원하며 이렇게 하면 나에게 맞는 기기 추천을 추가하거나 삭제할 수 있습니다. 있습니다.
Unity 엔진 게임에서 Vulkan 사용 설정
VkQuality를 사용하려면 게임에 OpenGL ES와 Vulkan 렌더기가 모두 있어야 합니다. 사용 설정할 수 있습니다 Auto 그래픽 API 옵션을 선택하거나 그래픽 API를 수동으로 설정합니다.
Unity 엔진용 VkQuality 플러그인 가져오기
GitHub에서 VkQuality 플러그인을 다운로드합니다. 플러그인은 Unity 2021 이상과 호환됩니다. Unity 2021 LTS 이상을 사용하여 사용 설정 Android의 Vulkan 플러그인 패키지에는 플러그인의 기본 샘플 프로젝트가 포함되어 있습니다. 시작 시 플러그인에서 그래픽 API를 설정한 다음 그래픽 API가 포함되어 있습니다.
VkQuality Vulkan 권장사항 목록 관리
VkQuality에는 지원되는 기기의 기본 권장사항 목록이 포함되어 있습니다. 대상 커스텀 권장사항 목록 사용에 대한 자세한 내용은 커스텀 권장사항 사용 권장사항 목록 섹션을 참조하세요.
권장사항 목록에는 다음과 같은 세 가지 카테고리가 있습니다.
- Vulkan 기기 허용 목록
- GPU 추천 허용 목록
- GPU 추천 거부 목록
기기 허용 목록 일치
VkQuality는 먼저 활성 기기가 기기에서 허용되는지 여부를 확인합니다.
최소 Android 버전 및 Vulkan 드라이버를 실행하는지 여부
지정된 버전이 있는 경우에만 전송합니다. 이러한 기준이 충족되면
VkQuality는
RECOMMENDATION_VULKAN_BECAUSE_DEVICE_MATCH
열거형 값입니다.
기기가 허용 목록에 있지만 Android 버전 또는 드라이버를 실행 중인 경우
VkQuality인 허용 목록에 지정된 최소 버전보다 낮은 버전
RECOMMENDATION_GLES_BECAUSE_OLD_DRIVER
를 반환하여 OpenGL ES를 권장합니다.
GPU 추천 일치
기기 허용 목록에 일치하는 기기가 없으면 VkQuality가
GPU 권장사항과 비교하여 GPU 모델 및 드라이버 버전이 허용 및 거부됨
할 수 있습니다. GPU 모델과 드라이버 버전이 GPU의 항목과 일치하는 경우
VkQuality는
RECOMMENDATION_VULKAN_BECAUSE_PREDICTION_MATCH
열거형 상수.
GPU 모델과 드라이버 버전이 GPU의 항목과 일치하는 경우
추천 거부 목록으로, VkQuality는 다음을 반환하여 OpenGL ES를 추천합니다.
RECOMMENDATION_GLES_BECAUSE_PREDICTION_MATCH
일치하지 않는 맞춤 동영상
일치하는 항목이 없으면 VkQuality는
실행 중인 기기가
권장사항 목록입니다 기본 추천 목록의 향후 API 수준은 다음과 같습니다.
36(API 수준 36 이상을 실행하는 일치하지 않는 기기에서 VkQuality)
RECOMMENDATION_VULKAN_BECAUSE_FUTURE_ANDROID
enum 상수를 반환합니다.
기기 허용 목록 또는 GPU 추천 목록에 일치하는 항목이 없으면
기기의 API 수준이 향후 API 수준인 VkQuality보다 낮은 경우
RECOMMENDATION_GLES_BECAUSE_NO_DEVICE_MATCH
를 반환하여 OpenGL ES를 권장합니다.
프로젝트에 VkQuality 보관 파일 추가
VkQuality 플러그인은 다음 위치에 있는 VkQuality-1.x.x.aar
파일입니다.
다운로드한 패키지 보관 파일의 Assets/Android/Plugins
디렉터리 실제
.aar 파일의 버전 번호가 패키지의 버전 번호와 일치함
보관 파일 이름 플러그인을 설치하려면 다음 단계를 따르세요.
- .aar 파일을
Assets/Android/Plugins
디렉터리에 복사합니다. 살펴보겠습니다 필요한 경우Android
및Plugins
하위 디렉터리를 만듭니다. 존재하지 않습니다.)
- Unity Project 계층 구조에서
VkQuality-1.x.x
플러그인 파일을 선택합니다. Inspector(검사기) 창에 Import Settings(가져오기 설정)가 표시됩니다. Android 플랫폼이 선택되어 있는지 확인합니다.
맞춤 활동을 사용하여 VkQuality 호출
일반적인 Unity 엔진 플러그인과 달리, VkQuality는 Unity 엔진이 초기화되기 전에 그래픽 API를 권장합니다. 그런 다음 Unity 플레이어 명령줄 인수 기능을 사용하여 그래픽 API를 선택할 수 있습니다. Android에서 명령줄 인수를 사용하려면 UnityPlayerActivity를 인스턴스에서 활동을 참조하세요.
게임에서 이미 맞춤 활동을 사용하고 있다면 기존 맞춤 활동 섹션에 표시됩니다. 새 맞춤 활동을 생성하려면 게임의 경우 다음에 나오는 Unity 프로젝트에 맞춤 활동 추가를 참조하세요.
Unity 엔진 프로젝트에 맞춤 활동 추가
VkQuality를 사용하는 맞춤 활동의 예는 플러그인에 포함되어 있습니다.
패키지를 Assets/Plugins/Android/VkQualityTestActivity.java
에 포함합니다.
파일을 맞춤설정하고 게임에서 사용하려면 다음 단계를 따르세요.
VkQualityTestActivity.java
파일을Assets/Plugins/Android
디렉터리- 게임에 적합한 이름으로 바꿉니다 (예:
MyGameActivity.java
)을 입력합니다. - 텍스트 편집기에서 파일을 엽니다.
- 클래스 이름을
VkQualityTestActivity
에서 지정한 이름으로 변경합니다. 파일 (예:MyGameActivity.java
) - 패키지 이름을
com.google.android.games.VkQualityTest
에서 다음으로 변경합니다. Unity 프로젝트 설정의 Package Name 필드 값과 일치해야 합니다. Other Settings(기타 설정)의 Player(플레이어) 카테고리(예:com.mycompany.mygame
). - 파일을 저장하고 닫습니다.
맞춤 활동을 참조하는 맞춤 매니페스트 파일을 추가하고 Unity에 이를 알립니다. 다음과 같이 맞춤 매니페스트 파일을 사용하세요.
Assets/Plugins/Android
에서AndroidManifest.xml
파일을 복사합니다. 프로젝트의Asset/Plugins/Android
에 플러그인 패키지의 디렉터리를 찾습니다. 디렉터리- 텍스트 편집기에서 파일을 엽니다.
activity android:name
설정 값을 다음과 같이 변경합니다.com.google.android.games.VkQualityTest.VkQualityTestActivity
(으)로 이전 단계에서 사용한 패키지와 활동 이름 (예:com.mycompany.mygame.MyGameActivity
)을 입력합니다.- 파일을 저장하고 닫습니다.
- Unity 설정 창을 열고 Player 설정을 선택합니다. 펼치기 Publishing Settings(게시 설정) 섹션에서 Custom Main Manifest(맞춤 기본 매니페스트)를 확인합니다. 체크박스를 선택합니다.
이제 프로젝트가 다음 위치에서 VkQuality를 호출하는 맞춤 활동을 사용하도록 설정되었습니다. 시작하고 VkQuality 권장사항에 따라 Vulkan 또는 OpenGL ES를 선택합니다.
기존 맞춤 활동에 VkQuality 추가
게임에 이미 기본값을 재정의하는 맞춤 활동이 있는 경우
UnityPlayerActivity
,
다음 코드를 참조하세요.
먼저 VkQuality 가져오기 문을 다음과 같이 설정합니다.
Kotlin
import com.google.android.games.vkquality.VKQuality;
자바
import com.google.android.games.vkquality.VKQuality;
다음으로 Activity
클래스의 본문에
선택사항:
Kotlin
companion object { private const val OVERRIDE_NONE = 0 private const val OVERRIDE_GLES = 1 private const val OVERRIDE_VULKAN = 2
자바
private static final int OVERRIDE_NONE = 0; private static final int OVERRIDE_GLES = 1; private static final int OVERRIDE_VULKAN = 2;
API 선택을 추적할 변수를 만듭니다.
Kotlin
private var apiOverride = OVERRIDE_NONE
자바
private int apiOverride = OVERRIDE_NONE;
Activity
클래스에 다음 함수를 추가합니다.
Kotlin
private fun CheckVkQuality() { val vkQuality = VKQuality(this) val startResult = vkQuality.StartVkQuality("") if (startResult == VKQuality.INIT_SUCCESS) { // In the current release, we can assume GetVkQuality is // ready as soon as StartVkQuality has returned success. val getResult = vkQuality.GetVkQuality() LogVkQualityResult(getResult) apiOverride = when (getResult) { VKQuality.RECOMMENDATION_VULKAN_BECAUSE_DEVICE_MATCH, VKQuality.RECOMMENDATION_VULKAN_BECAUSE_PREDICTION_MATCH, VKQuality.RECOMMENDATION_VULKAN_BECAUSE_FUTURE_ANDROID -> OVERRIDE_VULKAN VKQuality.RECOMMENDATION_GLES_BECAUSE_OLD_DEVICE, VKQuality.RECOMMENDATION_GLES_BECAUSE_OLD_DRIVER, VKQuality.RECOMMENDATION_GLES_BECAUSE_NO_DEVICE_MATCH, VKQuality.RECOMMENDATION_GLES_BECAUSE_PREDICTION_MATCH -> OVERRIDE_GLES else -> OVERRIDE_GLES } vkQuality.StopVkQuality() } else { Log.e("VKQUALITY", "VkQuality start failed with result: $startResult") } }
자바
private void CheckVkQuality() { VKQuality vkQuality = new VKQuality(this); // An empty string specifies use of the default // built-in device list file. int startResult = vkQuality.StartVkQuality(""); if (startResult == VKQuality.INIT_SUCCESS) { // In the current release, we can assume GetVkQuality is // ready as soon as StartVkQuality has returned success. int getResult = vkQuality.GetVkQuality(); switch (getResult) { case VKQuality.RECOMMENDATION_VULKAN_BECAUSE_DEVICE_MATCH: case VKQuality.RECOMMENDATION_VULKAN_BECAUSE_PREDICTION_MATCH: case VKQuality.RECOMMENDATION_VULKAN_BECAUSE_FUTURE_ANDROID: apiOverride = OVERRIDE_VULKAN; break; case VKQuality.RECOMMENDATION_GLES_BECAUSE_OLD_DEVICE: case VKQuality.RECOMMENDATION_GLES_BECAUSE_OLD_DRIVER: case VKQuality.RECOMMENDATION_GLES_BECAUSE_NO_DEVICE_MATCH: case VKQuality.RECOMMENDATION_GLES_BECAUSE_PREDICTION_MATCH: default: apiOverride = OVERRIDE_GLES; break; } vkQuality.StopVkQuality(); } else { Log.e("VKQUALITY", "VkQuality start failed with result: " + startResult); } }
onCreate()
재정의 상단에서 CheckVkQuality
함수 호출
함수를 호출합니다.
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { CheckVkQuality() super.onCreate(savedInstanceState) }
자바
@Override protected void onCreate(Bundle savedInstanceState) { CheckVkQuality(); super.onCreate(savedInstanceState); }
마지막으로 updateUnityCommandLineArguments()
함수의 재정의를 추가합니다.
apiOverride
값을 사용하여
사용할 그래픽 API를 지정하는 Unity 엔진:
Kotlin
override fun updateUnityCommandLineArguments(cmdLine: String): String { if (apiOverride == OVERRIDE_VULKAN) { Log.i("VKQUALITY", "Passing -force-vulkan") return appendCommandLineArgument(cmdLine, "-force-vulkan") } else if (apiOverride == OVERRIDE_GLES) { Log.i("VKQUALITY", "Passing -force-gles") return appendCommandLineArgument(cmdLine, "-force-gles") } Log.i("VKQUALITY", "No override passed") // let Unity pick the Graphics API based on PlayerSettings return cmdLine } private fun appendCommandLineArgument(cmdLine: String, arg: String?): String { return if (arg == null || arg.isEmpty()) cmdLine else if (cmdLine == null || cmdLine.isEmpty()) arg else "$cmdLine $arg" }
자바
@Override protected String updateUnityCommandLineArguments(String cmdLine) { if (apiOverride == OVERRIDE_VULKAN) { Log.i("VKQUALITY", "Passing -force-vulkan"); return appendCommandLineArgument(cmdLine, "-force-vulkan"); } else if (apiOverride == OVERRIDE_GLES) { Log.i("VKQUALITY", "Passing -force-gles"); return appendCommandLineArgument(cmdLine, "-force-gles"); } Log.i("VKQUALITY", "No override passed"); // let Unity pick the Graphics API based on PlayerSettings return cmdLine; } private String appendCommandLineArgument(String cmdLine, String arg) { if (arg == null || arg.isEmpty()) return cmdLine; else if (cmdLine == null || cmdLine.isEmpty()) return arg; else return cmdLine + " " + arg; }
이제 맞춤 활동이 시작 시 VkQuality를 호출하고 Vulkan 또는 OpenGL을 선택합니다. VkQuality 추천을 기반으로 한 ES입니다.
커스텀 추천 목록 사용
파일 이름을 전달하여 커스텀 추천 목록 파일을 지정합니다.
빈 문자열을 전달하는 대신 StartVkQuality()
에 목록을 포함합니다.
Kotlin
val startResult = vkQuality.StartVkQuality("CUSTOM_FILE_NAME.vkq")
자바
int startResult = vkQuality.StartVkQuality("CUSTOM_FILE_NAME.vkq");
VkQuality는 먼저 애플리케이션의 내부 저장소에서 파일을 찾습니다.
디렉터리 파일이 내부 저장소에 없으면 VkQuality가
파일을 삭제합니다. 파일이 두 위치 중 한 곳에도 없는 경우
VkQuality는 ERROR_MISSING_DATA_FILE
enum 값을 반환합니다.
맞춤 추천 목록 파일을 만들려면 VkQuality 목록 편집기를 사용하세요. 이 도구는 GitHub 저장소에 있습니다. 도구는 README에 있습니다.