[Unity] Unity가 Headless 모드로 시작되었는지 확인하는 방법[UNET]
개시하다
UNET를 전용 서버로 구축할 때는Headless 모드로 실행/구축하는 것이 좋을 것 같지만 한번 시도해 보면 호출NetworkManager.StartServer()의 단추를 누르지 못함→전용 서버로 시작할 수 없음(원래 UI가 표시되지 않는 모드임)을 알아차릴 수 없다.
운행시간에 헤드리스 모드 여부를 알지 못한 API는 자체 판단이 필요한 것으로 조사됐다.
이른바 Headless 모드
인용Unity 독립 유저의 명령행 매개 변수(공식 수첩).
게임이 표시되지 않고 사용자의 입력을 받지 않습니다.이것은 인터넷 게임에서 서버 운행이 가장 편리하다.
Headless 모드로 시작
구축된 응용 프로그램이 시작될 때 명령행 인자 '-batchmode' 를 입력하면Headless 모드에 들어갑니다.
Mac는 $ open (アプリ名).app --args -batchmode
에서 부팅됩니다.
Headless 모드로 구성
"Build Settings"에서 Target Platform을 "Linux"로 설정한 후 "Development Build"검사를 취소하고 "Headless Mode"확인란에서 선택하여 구성합니다.
정부 수첩의 압출
Target Platform을 "Linux"로 설정하지 않으면 원래 확인란이 표시되지 않으며, "Development Build"에 확인란이 있으면 "Headless Mode"확인란에서 선택할 수 없습니다.
편집기 API에서 빌드 옵션의 Headless 모드를 True 으로 설정합니다.
APIEditorUserBuildSettings.enableHeadlessMode가 있습니다.Unity CloudBuild를 사용할 때 이 API를 사용하는 것 같습니다.
참조: How to enable headless mode on Unity Could Build?
확인 방법
두 가지 유형이 있는 것 같아요.
2019/9/13 보충
문서의 경우 Unity 2018.2부터는 일괄 처리 모드인지 판단하는 API가 추가된 것 같은데 그걸로 하는 게 좋을 것 같아요.
Application.isBatchMode(공식 문서)
추기는 여기까지다
SystemInfo.graphicsDeviceType으로 판단하기
인용자 Detect Headless Mode in Unityusing UnityEngine.Rendering;
// detect headless mode (which has graphicsDeviceType Null)
bool IsHeadless() {
return SystemInfo.graphicsDeviceType == GraphicsDeviceType.Null;
}
SystemInfo.graphicsDeviceID로 판단
인용자 Determine if Unity is running in batch mode/headless mode
Checking SystemInfo.graphicsDeviceID == 0 works.
나는'헤헤~'하고 싶어서 iOS로 구축했다true
(^o^)\Windows라면 제대로 작동합니까?나는 이 방법을 추천하지 않는다.
Mac의 독립판은 다른 방법이 필요합니다
"그랬구나~"라고 생각하며 맥의 독립된 아론-batchmode
에 지었는데, 왠지 상술한 수치가 변하지 않았기 때문에 단순히 명령선 파라미터로 판단하는 것이 좋다(참고: Read Command Line Arguments.return System.Environment.GetCommandLineArgs().Any(arg => arg == "-batchmode");
그나저나 -batchmode
시동을 걸어봐SystemInfo
의 값을 모두 조사해 봤어요SystemInfo.graphicsMultiThreaded
만 true
네false
였어요.하지만 이 값으로 판단하기에는 좀...
총결산
다음 코드로 판단하는 것이 좋습니다.public bool isHeadlessMode
{
if (Application.isMobilePlatform)
{
return false;
}
#if UNITY_STANDALONE_OSX
return System.Environment.GetCommandLineArgs().Any(arg => arg == "-batchmode");
#else
return SystemInfo.graphicsDeviceType == GraphicsDeviceType.Null;
#endif
}
연관성
인용Unity 독립 유저의 명령행 매개 변수(공식 수첩).
게임이 표시되지 않고 사용자의 입력을 받지 않습니다.이것은 인터넷 게임에서 서버 운행이 가장 편리하다.
Headless 모드로 시작
구축된 응용 프로그램이 시작될 때 명령행 인자 '-batchmode' 를 입력하면Headless 모드에 들어갑니다.
Mac는
$ open (アプリ名).app --args -batchmode
에서 부팅됩니다.Headless 모드로 구성
"Build Settings"에서 Target Platform을 "Linux"로 설정한 후 "Development Build"검사를 취소하고 "Headless Mode"확인란에서 선택하여 구성합니다.
정부 수첩의 압출
Target Platform을 "Linux"로 설정하지 않으면 원래 확인란이 표시되지 않으며, "Development Build"에 확인란이 있으면 "Headless Mode"확인란에서 선택할 수 없습니다.
편집기 API에서 빌드 옵션의 Headless 모드를 True 으로 설정합니다.
APIEditorUserBuildSettings.enableHeadlessMode가 있습니다.Unity CloudBuild를 사용할 때 이 API를 사용하는 것 같습니다.
참조: How to enable headless mode on Unity Could Build?
확인 방법
두 가지 유형이 있는 것 같아요.
2019/9/13 보충
문서의 경우 Unity 2018.2부터는 일괄 처리 모드인지 판단하는 API가 추가된 것 같은데 그걸로 하는 게 좋을 것 같아요.
Application.isBatchMode(공식 문서)
추기는 여기까지다
SystemInfo.graphicsDeviceType으로 판단하기
인용자 Detect Headless Mode in Unityusing UnityEngine.Rendering;
// detect headless mode (which has graphicsDeviceType Null)
bool IsHeadless() {
return SystemInfo.graphicsDeviceType == GraphicsDeviceType.Null;
}
SystemInfo.graphicsDeviceID로 판단
인용자 Determine if Unity is running in batch mode/headless mode
Checking SystemInfo.graphicsDeviceID == 0 works.
나는'헤헤~'하고 싶어서 iOS로 구축했다true
(^o^)\Windows라면 제대로 작동합니까?나는 이 방법을 추천하지 않는다.
Mac의 독립판은 다른 방법이 필요합니다
"그랬구나~"라고 생각하며 맥의 독립된 아론-batchmode
에 지었는데, 왠지 상술한 수치가 변하지 않았기 때문에 단순히 명령선 파라미터로 판단하는 것이 좋다(참고: Read Command Line Arguments.return System.Environment.GetCommandLineArgs().Any(arg => arg == "-batchmode");
그나저나 -batchmode
시동을 걸어봐SystemInfo
의 값을 모두 조사해 봤어요SystemInfo.graphicsMultiThreaded
만 true
네false
였어요.하지만 이 값으로 판단하기에는 좀...
총결산
다음 코드로 판단하는 것이 좋습니다.public bool isHeadlessMode
{
if (Application.isMobilePlatform)
{
return false;
}
#if UNITY_STANDALONE_OSX
return System.Environment.GetCommandLineArgs().Any(arg => arg == "-batchmode");
#else
return SystemInfo.graphicsDeviceType == GraphicsDeviceType.Null;
#endif
}
연관성
using UnityEngine.Rendering;
// detect headless mode (which has graphicsDeviceType Null)
bool IsHeadless() {
return SystemInfo.graphicsDeviceType == GraphicsDeviceType.Null;
}
"그랬구나~"라고 생각하며 맥의 독립된 아론
-batchmode
에 지었는데, 왠지 상술한 수치가 변하지 않았기 때문에 단순히 명령선 파라미터로 판단하는 것이 좋다(참고: Read Command Line Arguments.return System.Environment.GetCommandLineArgs().Any(arg => arg == "-batchmode");
그나저나 -batchmode
시동을 걸어봐SystemInfo
의 값을 모두 조사해 봤어요SystemInfo.graphicsMultiThreaded
만 true
네false
였어요.하지만 이 값으로 판단하기에는 좀...총결산
다음 코드로 판단하는 것이 좋습니다.public bool isHeadlessMode
{
if (Application.isMobilePlatform)
{
return false;
}
#if UNITY_STANDALONE_OSX
return System.Environment.GetCommandLineArgs().Any(arg => arg == "-batchmode");
#else
return SystemInfo.graphicsDeviceType == GraphicsDeviceType.Null;
#endif
}
연관성
public bool isHeadlessMode
{
if (Application.isMobilePlatform)
{
return false;
}
#if UNITY_STANDALONE_OSX
return System.Environment.GetCommandLineArgs().Any(arg => arg == "-batchmode");
#else
return SystemInfo.graphicsDeviceType == GraphicsDeviceType.Null;
#endif
}
Reference
이 문제에 관하여([Unity] Unity가 Headless 모드로 시작되었는지 확인하는 방법[UNET]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/su10/items/a56762ce3fe1b529e0bd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)