[Unity] Bezier 곡선 그리기

Bezier 곡선이란 간단히 말해서 2개 이상의 점들로 이루어진 곡선을 말한다. 자세한 내용은 위키를 참고하자. 유니티에서는 하나의 점과 두개의 Tangent 포지션으로 그릴 수 있는데, 아래 두 개의 스크립트를 통해 Beizer 곡선을 구성해 보았다. BezierCurve.cs 각 점에 대한 정보 (위치, Tangent 시작점, Tangent 끝점) Editor/BezierCurveEditor.cs Handles 클래스를 이용하여 Scene상에서 위치 조정 BezierCurve.cs의 소스는 아래와 같다. ShowBezier와 PolyDivisionCount는 … Read more[Unity] Bezier 곡선 그리기

[Unity] 프로젝트의 Git 브랜치 이름과 커밋 Revision 얻기

커맨드 창을 열어, git 커맨드를 입력해보자. git이 설치되어 있고, 윈도우 시스템 PATH에 추가되어 있다면 아래와 같이 표시될 것이다. 현재 브랜치를 얻어오는 명령어는 git branch —show-current 이고, 입력이 틀리지 않는다면 현재 브랜치 정보만 심플하게 프린트해준다. 그럼 이제 저 명령어를 유니티 스크립트를 통해 실행하고, 브랜치 이름을 얻어보자. 우선 System.Diagnostics.Process의 instance를 하나 만들고, 그 instance를 실행할 때 필요한 … Read more[Unity] 프로젝트의 Git 브랜치 이름과 커밋 Revision 얻기

[Unity] Windows 네이티브 메세지 박스 띄우기

Windows 환경에서 게임을 배포하는 경우 팝업 창 리소스가 로딩 되기 전에 알림을 띄워야 되는 상황이 있다. 예를 들어 초기화 과정에서 에러가 발생하는 경우 유저에게 이를 알려야 하지만 메세지 리소스가 로딩되지 않았기 때문에 알리기가 쉽지 않다. 이를 위해 별도의 리소스를 만들어 사용할 수도 있지만 관리 비용도 커지고, 일도 많아진다. 이럴 때 간단히 Windows 네이티브 메세지 박스를 … Read more[Unity] Windows 네이티브 메세지 박스 띄우기

[Unity] Addressable과 메모리 관리

Addressable을 이용하고 있다면 메모리 관리 측면에서 잘 사용하고 있는지 체크해 볼 필요가 있다. LoadAssetAsync를 통해 해당 키를 가진 번들을 메모리에 올리고, Instantiate를 통해 오브젝트를 생성하는 루틴은 아무 문제가 없다. 더불어 OnDestory일 때, LoadAssetAsync에서 저장해둔 핸들을 통해 번들을 릴리즈함으로써 메모리에서 해제할 수 있다. (정확히는 Garbage Collect전까지 메모리에 상주한다.) 하지만, 만약 opHandle을 저장하고 있고, 여러 클래스에서 같은 … Read more[Unity] Addressable과 메모리 관리

[Unity] ParticleSystem의 성능 최적화 (Prewarm/Culling Mode)

보통 아트 부서에서 ParticleSystem을 이용하여 이펙트를 만들지만, 최적화는 프로그래머가 담당하게 된다. 이때 파티클의 emission 개수나 duration에 대한 조언을 하게 되는데, 이것들 외에 체크해 볼 것이 prewarm과 culling mode이다. Prewarm 기능은 파티클의 emission을 한번 한 상태로 만들어 주어 다음 파티클 플레이시 원하는 모양으로 분사되도록 한다. 하지만, 씬을 로딩할 때 부하를 주기도 하는데, prewarm된 파티클의 개수에 따라 … Read more[Unity] ParticleSystem의 성능 최적화 (Prewarm/Culling Mode)

[Unity] Composite Collider 2D의 성능 이슈

Composite Collider 2D는 Box Collider 2D 또는 Polygon Collider 2D를 사용할 때 하나의 콜라이더로 머지하여 사용할 수 있는 컴포넌트이다. 그러나 머지하는 단계가 런타임에서 이루어 지기 때문에 Scene 로딩시에 로딩 시간을 길어지게 하는 요인이 될 수 있다. Composite Collider 2D를 가지는 게임 오브젝트에 자식으로 많은 수의 Box 또는 Polygon Collider 2D를 배치할 경우 그 수 만큼의 … Read more[Unity] Composite Collider 2D의 성능 이슈

[Unity-C#] 특정 국가에서 크래시가 난다면 CultureInfo를 확인하자

Unity 2019부터 .NET 3.5는 더 이상 지원되지 않고, .NET Standard 2.0과 .NET 4.X가 지원된다. .NET Standard 2.0/.NET 4.X은 Unity 2017까지 사용하던 .NET 2.0/.NET 2.0 Subset과 같지 않다. 그래서 글로벌 게임을 서비스 중이라면 CultureInfo로 인해 특정 국가에서 크래시 같은 예기치 않은 상황이 발생하는지 확인해 볼 필요가 있다. String.ToLower 메서드는 소문자로 변환하기 위해 많이 사용하는 API이다. toLower를 … Read more[Unity-C#] 특정 국가에서 크래시가 난다면 CultureInfo를 확인하자

[Unity] SetScriptingDefineSymbolsForGroup으로 define 변경 및 적용이 잘 안될 때

PlayerSettings.SetScriptingDefineSymbolsForGroup을 이용하여 스크립트에 정의된 define을 변경할 때, 컴파일이 되지 않고 변경 전에 define으로 되어 있던 상태의 assembly로 남아있는 경우가 있다. 환경 Unity 2020.3.7f1 Android Platform on Windows 10 프로젝트 폴더 내에 아래와 같이 Library\ScriptAssemblies 폴더를 보면 Assembly-CSharp 관련 dll들이 있는데 이것들이 컴파일 되어 최신으로 변경되는 지 확인할 필요가 있다. 동일한 기능을 Unity 2017.4에서 문제없이 사용했었기 … Read more[Unity] SetScriptingDefineSymbolsForGroup으로 define 변경 및 적용이 잘 안될 때

[Unity-iOS] UnityFramework에 Crashlytics의 Run Script 적용

환경 Unity 2020.3.7f1 Crashlytics 7.5.0 Xcode 12.2 Unity 2019부터 적용되는 Unity as a Library로 인해 iOS빌드 시에 UnityFramework 타겟의 라이브러리 파트와 Unity-iPhone 타겟의 런처 파트로 나뉘게 된다.  여기서 Crashlytics를 적용 중인 프로젝트라면 Run Script가 두개의 타겟에 모두 적용되어 있는지 확인할 필요가 있다.  각 타겟의 Build Phase에서 아래 그림과 같이 되어 있는지 살펴보자. 현재 사용 중인 … Read more[Unity-iOS] UnityFramework에 Crashlytics의 Run Script 적용

[Unity] Assembly-CSharp-firstpass.dll의 Sharing violation on path 에러

환경 Unity 2020.3.7f1 Windows 10 Visual Studio Community 2019 증상 유니티 에디터와 Visual Studio가 열린 상태에서 스크립트가 컴파일 될 때 아래와 같은 에러 발생 Copying assembly from ‘Temp/Assembly-CSharp-firstpass.dll’ to ‘Library/ScriptAssemblies/Assembly-CSharp-firstpass.dll’ failed. Detailed error: Sharing violation on path 분석 Assembly-CSharp-firstpass.dll은 무엇인가. Assembly-CSharp-firstpass.dll은 컴파일 순서에 따라 첫번째로 컴파일 된 결과물이다. Standard Assets과 Plugins에 포함된 스크립트들이 대상이고 첫번째 … Read more[Unity] Assembly-CSharp-firstpass.dll의 Sharing violation on path 에러