Search Unity

Visual Studio 2019로 Unity의 프로그래밍 워크플로의 속도를 높이는 10가지 방법

, 7월 14, 2020

Visual Studio 2019는 코딩 환경을 원하는 방식으로 설정할 수 있도록 세계적인 수준의 디버깅과 새롭고 다양한 도구 및 커스터마이징 옵션을 제공합니다. Unity에서 C#을 활용하기 위한 여러 강력한 기능도 함께 제공되므로 그 어느 때보다 빠르게 코드를 작성하고 리팩터링할 수 있습니다. 이 블로그 포스팅에서는 워크플로의 속도를 높여줄 10가지 활용 팁을 살펴보겠습니다.

Unity 에반젤리스트인 Arturo Nereu와 Microsoft의 Unity용 Visual Studio Tools 프로그램 매니저인 Abdullah Hamed는 최근 Unite Now 세션에서 Unity로 개발할 때 Visual Studio 2019를 최대한 활용하는 방법을 공유했습니다.

이번 포스팅에서는 세션에서 제시한 방법 중 일부를 간략하게 다루며, 영상의 해당 섹션으로 바로 연결되는 링크와 관련 콘텐츠도 소개합니다.

팁 1: Unity에 디버거 연결하기

기존의 Console.Log를 사용하면 Unity의 콘솔 뷰를 활용하여 프로젝트를 쉽고 빠르게 디버그할 수 있었습니다. 하지만 Visual Studio 2019를 이용하면 보다 복잡한 프로젝트를 훨씬 효율적으로 처리할 수 있습니다. Visual Studio 메뉴에 있는 Attach to Unity 버튼을 클릭하면 두 애플리케이션이 연결되어 Play 모드에서도 코드에 중단점을 삽입하고 코드를 살펴볼 수 있습니다. 또한 Attach to Unity and play를 클릭하여 IDE에서 곧바로 실행을 시작할 수 있습니다. 이렇게 하면 런타임에 코드 흐름과 프로퍼티 값 등을 검토할 수 있다는 장점이 있습니다. 게임 플레이 중에 언제든지 실행을 일시 중지하고 특정 상태와 프로퍼티 값을 원하는 프레임에서 바로 검토할 수 있는 기능은 사소해 보일 수 있으나 디버깅 시 매우 강력한 기능입니다. 


중단점을 사용할 때 또 한 가지 편리한 기능은 디버깅 시 참(true)이 되어야 하는 조건식 등 관련 동작에 자체적인 조건을 삽입할 수 있다는 점입니다. 

팁 2: 성능 관련 정보를 활용하여 베스트 프랙티스 구축하기

Visual Studio 2019에는 Unity 분석기(Analyzers)가 도입되었습니다. 분석기는 코드 패턴을 감지한 후 더 적합한 패턴을 제시합니다. Unity 분석기는 Unity 전용 코드 진단과 코드 수정 기능을 포함하며, GitHub를 통해 오픈 소스로 제공됩니다. 분석기는 Unity 전용 진단에 대한 이해도를 높여 주며 Unity 프로젝트와 관련이 없는 일반적인 C# 진단을 제거하여 프로젝트를 지원합니다. 게임 오브젝트에 특정 동작을 적용하기 전에 특정 태그가 있는지 확인하는 간단한 조건문을 예로 들 수 있습니다.

분석기는 코드를 분석하여 패턴을 감지한 후 더 최적화된 메서드를 사용하도록 제안합니다. 이 예시에서 분석기는 더 효율적인 CompareTag 메서드를 제안합니다.

위의 예시는 단일 스크립트에 단일 게임 오브젝트가 연결되어 성능이 크게 최적화되지는 않지만, 스크립트에 연결된 게임 오브젝트가 수천 개에 달하는 대규모 프로젝트인 경우에는 성능에 큰 차이가 날 수 있습니다. 성능 향상을 위해 전반적인 최적화가 필요하므로, 분석기를 이용하면 코드 구문 최적화를 통해 불필요한 오버헤드를 줄여 손쉽게 성능을 개선할 수 있습니다.

여기에서 다양한 분석기를 찾아볼 수 있습니다. 더 자세한 내용은 다음 블로그 포스팅 또는 해당 Unite Now 세션을 참고하세요.

팁 3: 후속 작업을 위한 Task List

스크립트를 작성하고 시간이 어느 정도 지난 후 코드를 재점검해야 할 때가 있습니다. 예를 들어 게임 메카닉을 테스트하면서 코드가 현재 요구 사항에는 맞지만 나중에 더 나은 성능을 위해 리팩터링이 필요하다고 생각할 수 있습니다. 따라서 Visual Studio에서 제공하는 Task List라는 편리한 기능을 이용하면 TODO, HACK과 같은 토큰이나 커스텀 토큰을 사용하는 코드 주석을 추적할 수 있으며, 단축키를 이용하여 코드 내의 사전 정의된 위치로 직접 이동할 수도 있습니다. 나중에 코드 수정 작업을 편하게 하려면 다음과 같이 코드에 토큰을 추가하기만 하면 됩니다.

메뉴의 View를 통해 Task List 창을 연 후, 태그한 모든 작업을 간략하게 살펴보고 단 한 번의 클릭으로 코드의 특정 부분으로 바로 이동할 수 있습니다.  

//TODO:로 시작하는 주석을 추가하면 이미지 우측 상단의 Task List 창을 사용하여 후속 조치하고자 하는 액션 아이템에 간편하게 ‘태그를 지정’할 수 있습니다.

프로젝트의 액션 아이템 목록이 늘어나면 Task List에서 자체 커스텀 토큰을 구성한 다음 우선순위를 지정하여 리팩터링 과정을 효과적으로 정리할 수도 있습니다. Task List 토큰을 커스터마이즈하려면 Tools > Options로 이동하세요.


전체 예시는 Unite Now 세션에서 확인할 수 있습니다.

팁 4: 스니핏을 사용하여 워크플로 속도 높이기

코드 스니핏은 재사용 가능한 작은 코드 블록으로, 오른쪽 클릭 메뉴(컨텍스트 메뉴) 명령어나 단축키 조합을 사용해 코드 파일에 삽입할 수 있습니다. 보통 try-finally나 if-else 블록과 같이 일반적으로 사용되는 코드 블록이 포함되어 있으나, 전체 클래스 또는 메서드를 삽입하는 데도 사용할 수 있습니다. 즉, 상용구 코드를 만들어서 작업 시간을 많이 줄여주는 편리한 방법입니다.

네임스페이스나 영역과 같은 스니핏으로 코드를 감싸려면 Ctrl+K+S를 누릅니다. 이렇게 하면 아래 영상과 같이 스니핏을 적용할 수 있습니다.


Microsoft 문서(Visual StudioMac용 Visual Studio)에서 제공하는 단계별 안내를 따라 직접 코드 스니핏을 만들 수 있습니다.

팁 5: 변수 이름 한꺼번에 변경하기

코드 리팩터링 시 일반적으로 더 정확하고 구체적인 이름으로 변수명을 변경합니다. 한 곳에서 변수명을 변경할 경우 해당 변수의 모든 레퍼런스도 수정해야 합니다. 하지만 Visual Studio는 단축키로 변수명을 한꺼번에 변경해줍니다. 변경을 원하는 변수의 이름을 강조 표시한 다음 오른쪽 클릭(또는 키보드 단축키 Ctrl+R)하고 변수의 이름을 바꾸면 됩니다. 적용하기 전에 변경 사항의 결과를 검토하려면 Preview changes를 선택합니다.


스크립트의 클래스를 변경할 때도 이와 동일한 방법을 사용할 수 있지만 컴파일 오류를 방지하려면 C# 파일의 이름도 같이 변경해야 합니다. Unite Now 세션의 해당 부분에서 클래스 이름 변경 과정에 관해 자세히 알아보세요.

팁 6: 키보드 단축키를 이용한 코드 주석 처리

코드를 리팩터링하거나 디버깅할 때 자주 코드 블록을 주석 처리하거나 주석 제거합니다. 이 작업은 한 번에 한 줄씩 진행할 경우 시간이 많이 소요될 수 있습니다. 하지만 Visual Studio에서는 간단한 단축키 커맨드인 Ctrl+K+C를 사용하여 코드 블록 전체를 주석 처리하거나 Ctrl+K+U로 주석 제거할 수 있습니다. Mac에서는 CMD+K+C로 주석 처리하고 CMD+K+U로 주석 제거할 수 있습니다.


전체 블록을 신속하게 주석 처리하면 게임 플레이 테스트 중에 특정 게임 로직을 효율적으로 숨길 수 있습니다.

팁 7: 간편한 GitHub 통합 설정

사용자 친화적인 비주얼 인터페이스를 자랑하는 Unity Collaborate 덕분에 Unity에서 직접 손쉽게 프로젝트를 저장하고 다른 사용자와 공유 및 동기화할 수 있게 되었습니다. 하지만 GitHub와 같은 별도 소스 관리 솔루션을 선호하는 팀도 있습니다. 이제 Unity용 Github 플러그인을 사용하여 GitHub로 소스를 관리하기가 훨씬 간편해졌습니다. 완전히 오픈 소스로 제공되는 이 플러그인을 사용하면 프로젝트 이력을 확인하고 브랜치에서 실험을 진행할 수 있습니다. 또한 변경 사항을 커밋하고 Unity에서 GitHub로 코드를 직접 푸시할 수 있습니다. 2FA(이중 인증)를 비롯한 GitHub 인증이 Unity에 내장되어 있으므로 클릭 한 번으로 커맨드 라인 명령어를 사용하지 않고도 게임의 저장소를 빠르게 초기화할 수 있습니다. 따라서 수동으로 설정하지 않고도 Unity 전용 .gitignore 파일을 만들 수 있습니다. 또한 Visual Studio 2019에서는 새로워진 인터페이스 덕분에 IDE에서 바로 GitHub를 사용하기가 더욱 간편해졌습니다.

Visual Studio에서 새로운 인터페이스를 활성화하려면 Tools > Options > Environment > Preview features > New Git user experience로 이동하세요.

Unite Now 세션 영상에서는 시작 과정을 더 자세하게 안내합니다.

팁 8: Live Share를 통한 실시간 원격 협업

Live Share를 사용하면 링크 하나로 팀원과 Visual Studio의 인스턴스를 직접 공유하여 실시간으로 코드를 수정하고 프로젝트에 참여할 수 있습니다. 저장소를 클로닝하거나 별도의 공유 환경을 설정하지 않아도 됩니다. 팀원 모두가 Visual Studio를 설치했다면 클릭 한 번으로 Live Share 세션을 만들 수 있습니다. 

Visual Studio Live Share를 사용하면 Visual Studio 세션을 공유하고 다른 사람과 실시간으로 협업할 수 있습니다.

세션을 공유하려면 Live Share를 선택하고 Visual Studio 또는 Visual Studio Code를 설치한 사용자와 공유할 코드 부분에 대한 링크를 생성하기만 하면 됩니다. 에디터 설치만으로 사용자와 협업자 사이에 공유 세션이 생성되어 코드를 즉시 공유할 수 있습니다.

다음 Unite 세션에서 Live Share에 대해 자세히 알아보거나 Visual Studio 제품 페이지, 또는 빠른 시작 가이드를 활용해 보세요.

팁 9: 손쉽게 만드는 Unity 메시지용 상용구 코드

Unity 기술 자료를 참조하거나 MonoBehaviour 메서드의 시그니처를 일일이 외울 필요없이 Visual Studio의 IDE에서 바로 시그니처를 조회할 수 있습니다. Ctrl+Shift+M을 눌러서 원하는 함수를 검색하거나 검색 결과를 필터링하여 메서드를 찾을 수도 있습니다. 체크박스를 선택하고 ‘OK’를 클릭하면 메서드에 필요한 상용구 코드가 즉시 삽입되어 사용이 가능합니다.

팁 10: 키보드 단축키

위에서 언급한 여러 가지 팁은 간편한 단축키로도 사용할 수 있으며, 단축키를 알아두면 작업 시간을 크게 줄일 수 있습니다. 이어서 소개한 팁에 대한 키보드 단축키를 비롯한 몇 가지 추가 기능을 소개합니다.

기능 Windows Mac
프로젝트 전체에서 검색 수행 Use CTRL+T  CMD + .
Unity 메시지 구현 CTRL + Shift + M  CMD + Shift + M 
코드 블록 주석 처리 CTRL + K  / CTRL + C CMD + /
코드 블록 주석 제거 CTRL + K  / CTRL + U  CMD + /
클립보드 이력에서 복사 CTRL + Shift + V
작업 목록 보기 CTRL + T 기본 단축키는 없지만 지정 가능
네임스페이스와 같은 스니핏 삽입 CTRL + K + S: 기본 단축키는 없지만 지정 가능
변수명 변경 및 모든 레퍼런스 업데이트 CTRL + R CMD +R
코드 컴파일 CTRL+SHIFT+B  CMD + Shift + B

팁을 공유해 주세요

Visual Studio 2019에는 Unity 사용 시 생산성을 향상시킬 수 있는 여러 커스터마이징 옵션과 기능이 제공됩니다. 이번 포스팅에서는 제공되는 기능 중 일부만 다루었습니다. 공유해 드린 몇 가지 팁을 바탕으로 더 자세히 알아보실 수 있길 바랍니다. 포스팅에서 다루지 않은 팁이 있다면 댓글을 통해 커뮤니티와 공유해 주세요. 향후 블로그에서 다루었으면 하는 Unity 워크플로 개선 방안 및 특별한 주제가 있다면 알려주시기 바랍니다.

Visual Studio 사용 후기

유니티는 워크플로를 꾸준히 개선하고 있으며 최고의 IDE 환경을 제공하기 위해 Microsoft와 긴밀하게 협력하고 있습니다. 좋은 아이디어가 있다면 언제든지 알려주세요. Microsoft에서 Unity용 Visual Studio Tools를 담당하는 시니어 프로그램 매니저인 John Miller(@jmillerdev)에게 연락하거나 스크립팅 포럼에서 의견을 공유하시면 됩니다.

28 replies on “Visual Studio 2019로 Unity의 프로그래밍 워크플로의 속도를 높이는 10가지 방법”

The shortcut for renaming a variable (on Windows) is CTRL + R / R. The first key combination is for accessing the Refactor mode.

Visual Studio can now be used for diff/merge! In preferences, external tools just set the diff/merge tool to custom tool and set the path to devenv.exe. In the two way, 3way and merge set the parms.

JetBrains (and the ReSharper plugin for Visual Studio) has so much possibility of options customization for code layouts, ad refactoring hints. Unfortunately, it’s not affordable for everyone.

I really love Unity, and I quite like Visual Studio and Github, but I must say: Please don’t recommend Github for Unity. It has lots of bugs, it doesn’t have anyone actively maintaining it, it hasn’t had a release in over a year. It’s so ridden with bugs that sometimes it’s even scary to use it. Instead of making users life easier, it ends up making it hard. Right now, I’ve just found it thousands of times better to just use git and git-lfs normally, and though I wish I had a friendlier option, I’d much rather have some tutorials on how to use tech that works, than being officially pointed to use abandonware.

I understand that there is a Git for Unity package (https://github.com/Unity-Technologies/Git-for-Unity) that might fill a lot of the git-shaped hole in Unity, if not now, in the future. It’d be awesome to have some information about its status. There’s some basic but useful documentation for this package on Github, but I can’t found documentation in Unity’s sites. I can’t find any official mention of it. It’s kind of confusing to be recommended a buggy, abandoned, solution instead of the existing project in progress at Unity. It makes me wonder if Unity’s own Git project has been abandoned, or if it’s still planned to be released out of preview.

I agree and recommend GitHub Desktop instead. It’s outside Unity (so no slowdowns) and can be used on other projects (not just unity) by both artists and newer programmers. I’ve been very happy with it for the few years I’ve used it now and it has active development so you have no fear of the future with it.

https://desktop.github.com/

Yes, I tried to set up GitHub for Unity and couldn’t get it to work. Authentication wouldn’t succeed no matter what I tried. The interface looked pretty unpolished as well, compared to SourceTree and Github Desktop.

I absolutely agree. Having a git tool embedded within Unity, while sounding good on paper, works terribly in practice. Doing small things, sure – but actually managing your project with it? I can’t imagine even trying. With an external client, you can push and pull and do whatever you need to do without fearing recompiling or reloading or anything. Things can seriously get messed up otherwise.

I HIGHLY recommend the Fork client (https://git-fork.com/), the free version is free forever, and it’s by far the most stable and reliable client I’ve ever used.

Tip for Unity for XboxOne:
– Do not install Visual Studio 2019. XboxOne development supports only Visual Studio 2017 and older, but Unity automatically gets newest Visual Studio for compilation so when you install Visual Studio 2019 you cannot compile for XboxOne (even if you have also installed Visual Studio 2017). You cannot change it anywhere in project. It is builtin Unity “feature”.

Great advice.

Too bad I can’t use VS2019 because Microsoft account management is too much of a nightmare.

Tip 11
Use visual studio code…
Much faster, much more convenient, way better keyboard shortcuts.
Perfect for unity!

UsE vIsUaL sTuDiO cOdE.

I prefer the key bindings in VS 2019 so your point about them being “better” in code is just your opinion.

1. Ctrl + , brings up the “Go To” panel for looking up files, types, members, etc.
2. F12 while the cursor is over an item, goes to definition, Ctrl+F12 goes to implementation (Ctrl + F12 is for methods that are defined in an interface and implemented in a class).
3. While debugging in VS 2019, debug panels “watch”, “auto”, and “locals” let you search in object trees to find the current value for looked-up items.
4. If you don’t know where a certain item is located in VS, press Ctrl + Q and start typing, and VS shows a list of matched items with their keyboard shortcut.
5. View > Other Windows > C# interactive is a scratch pad that you can write some C# code and see the immediate result, without the need to put a breakpoint, etc.

In tip 2 there is a mistake.

if(collision.gameObject.CompareTag == “enemy”)

instead of

if(collision.gameObject.CompareTag(“enemy”))

Great post. There is a small problem with CompareTag code snippet, it should be if(collision.gameObject.CompareTag("enemy"))

Comments are closed.