본문 바로가기
반응형

개발/Unity310

Unity) 플랫폼 의존 컴파일 플랫폼 의존 컴파일 Unity는 “플랫폼 의존 컴파일”이라는 기능이 있는데 Unity의 특성상 멀티 플랫폼을 지원하다 보니 생긴 기능으로 스크립트에 해당 플랫폼에 대한 정의를 하게되면 해당 플랫폼일 때 분기를 처리가 가능하다 사용법은 다음과 같다.\ #if UNITY_EDITOR //유니티 에디터에서 실행될 스크립트 코드 #endif 유니티로 개발을 하는 이유는 원소스 멀티 플랫폼 빌드를 지원하기 때문이라고 생각한다. 그 외 여러 가지 에디터적인 엔진 이점도 있지만 다중 플랫폼을 개발해야 하는 개발 입장에서는 원소스 멀티 빌드는 굉장히 이점이라고 생각한다. 유니티에서 지원하는 플랫폼 매크로는 다음과 같다. 플랫폼 매크로 정의 UNITY_EDITOR Unity 스크립트에서 지원하는 플랫폼 매크로 정의 : .. 2020. 2. 12.
Unity) NevMesh 사용해서 길찾기 NevMesh 사용해서 길찾기 유니티에서는 NevMesh라는 길을 찾는 기능을 지원한다. 기본 원리는 다음과 같다. 특정 오브젝트들을 선택해서 'Bake' 이후에 만들어지는 NevMesh를 통해서 Agent들이 길을 찾는 것이다. Window - Ai - Navigation의 메뉴를 클릭한다. Navigation이라는 메뉴창이 나오는데 여기에서 Object 메뉴를 눌러서 hierarchy 상에서 맵으로 될 오브젝트를 선택한다. Navigation Area라는 항목에는 Walkable(이동 가능한) , Not Walkable(이동 불가능한), Jump(점프)라는 항목을 오브젝트마다 선택해준다. 이때 'Navigation Static이라는 건 움직이지 않는 정적인 오브젝트일 경우에 '체크'해준다. 오브젝트들.. 2020. 1. 10.
코드) Unity 마우스 위치로 유닛 이동 Unity 마우스 위치로 유닛 이동 간략한 설명은 다음과 같다 . Update 에서 Unity의 Input Touch 이벤트를 플랫폼에 따라 입력을 받는다. 입력한 상태에 따라서 이벤트에 대한 처리를 한다. 입력한 상태가 Click or Press 인 경우에 해당 유닛의 이동에 대한 처리를 한다 ( 마우스 위치 포지션기반) void Update() { if (RuleManager.Instance.GetRuleState() != eRULE_STATE.PLAY) { return; } Vector2 touchPosition = Vector3.zero; bool input = false; #if UNITY_EDITOR if (Input.GetMouseButton(0)) { touchPosition = Input.. 2020. 1. 8.
Unity) Mac / Window 에서 VScode 스크립트 자동정렬 Mac / Window 에서 VScode 스크립트 자동정렬 Window : ctrl + k + f Mac : command + Shift + f ★☆☆☆☆ 2020. 1. 6.
Unity) 최적화 - 정적 게임 오브젝트(Static Object) 정적 게임 오브젝트(Static Object) 최적화를 위해서는 게임 플레이 중에 어떤 오브젝트가 움직일 수 있는지 여부를 알아야 할 때가 있습니다. 정적(즉, 움직이지 않는) 오브젝트에 대한 정보는 에디터 상에서 흔히 미리 계산될 수 있는데, 이것은 오브젝트 위치변화로 인한 데이터 무효화가 일어날 일이 없다는 것을 보장함으로써 가능한 것입니다. 예를 들면, 렌더링은 여러 정적 오브젝트들을 _배치_라고 불리우는 하나의 큰 오브젝트로 결합시킴으로써 최적화될 수 있습니다. 게임오브젝트의 인스펙터에는 맨 우측상단에 Static 체크박스와 메뉴가 있습니다. 이것은 유니티 여러 다른 시스템들에게 해당 오브젝트가 움직이지 않을 것이라고 알려주기 위해 사용됩니다. 해당 오브젝트는 각각의 시스템에 대해서 개별적으로 s.. 2019. 12. 20.
Unity) 특정 값을 제외한 랜덤한 값 구하기 특정 값을 제외한 랜덤 한 값 구하기 개발을 진행하다보면 특정한 값을 제외한 랜덤 한 값을 구할 때가 있다. 그런 상황에서 썻던 코드이다. using System.Linq; public int GetRandomNotContain(int _min, int _max, int[] _notContainValue) { HashSet exclude = new HashSet(); for (int i = 0; i !exclude.Contains(i)); var rand = new System.Random.. 2019. 12. 16.
Unity) 특수 폴더 이름 (Special Folder Name) 특수 폴더이름 (Special Folder Name) ​유니티를 개발하다보면. 특정 폴더 이름을 지정해야 하는 경우가 있다. 이거는 유니티 엔진에서 룩으로 패스를 정해둔 것들이다. 해당 특수 폴더의 경로와 규칙을 잘 숙지해야 사용하는데 문제가 발생하지 않는다. 에셋(Assets) Assets 폴더는 Unity 프로젝트에서 사용하는 에셋이 포함되는 주 폴더입니다. 에디터 프로젝트 창의 콘텐츠는 에셋 폴더의 콘텐츠와 직접 연관됩니다. 대부분의 API 함수는 모든 것이 에셋 폴더 에 있다고 가정하므로 명시적으로 경로를 알려줄 필요는 없습니다. 그러나 일부 함수는 경로 이름에 에셋 폴더를 반드시 포함해야 한다. (Assets) 에디터(Editor) Editor 라고 하는 폴더에 있는 스크립트는 런타임 스크립트가.. 2019. 12. 6.
Unity) 10000번의 Update 호출 Unity 10000번의 Update 호출 유니티의 Message System에 대한 설명인데 다들 개발을 하면서 '프레임'에 대한 고민을 많이 할 것이다. 유니티는 Update를 호출하기 위해 모든 Behaviours 순회합니다. 프레임에 대해서는 그냥 단순히 어떤 순서상에 의거해서 계속적으로 Update라는 함수가 호출될 거라고 생각을 하고 작업을 하는데 과연 내부는 어떨까?? 유니티의 Life Cycle 순서상에 보면 Object - Awake - OnEnable - Start -FixedUpdate - Update -yield null - yield StartCoroutine -Late Update 순으로 이뤄져 있다. Update 문은 어떻게 호출되나? 유니티는 유저의 매직 함수를 한번 호출하기.. 2019. 12. 6.
Unity)문제해결) 유니티 빌드 에러 (CommandInvokationFailure: Gradle build failed.) 유니티 빌드 에러 (CommandInvokationFailure: Gradle build failed.) 유니티에서 안드로이드 빌드를 진행하면서 위와 같은 에러가 생겼다. CommandInvokationFailure: Gradle build failed. 열심히 찾다 보니 Gradle 빌드가 정상적으로 안 되는 현상이었다. 안드로이드 SDK과 NDK를 해당 빌드가 세팅되는 타깃 버전으로도 변경해도 안 되는 현상으로 골치가 아팠는데. 결국 해결한 방법은 다음과 같다. C:\Users\[사용자이름]\.gradle\caches 의 캐시파일을 모두 다 삭제하고 다시 빌드를 진행하니 진행이 되었다. 이슈는 아마 다른 Gradle버전으로 이것저것 테스트해보다가 맞지 않은 Gradle으로 캐싱이 되어있어서 그런 것으.. 2019. 12. 4.
Unity) 스크립트 템플릿 설정하기(Unity Script Template 전체) 스크립트 템플릿 설정하기(Unity Script Template 전체) 유니티로 코드를 개발하다 보면 스크립트의 기본 생성이 되는 여러 가지 규칙을 생길 수 있다. 그럴 경우에는 코드 템플릿을 설정하면 템플릿으로 설정된 기본 형태로 코드가 생성된다. 설치된 유니티의 경로에 Scripte Templete의 경로의 기본 생성 파일의 규칙을 변경하는 것인데 대체적으로 기본 경로에 설치가 됬다는 가정하에는 다음과 같다. 기본 경로 : C:\Program Files\Unity\Editor\Data\Resources\ScriptTemplates 유니티 허브 : C:\Program Files\Unity\Hub\Editor\2018.3.13f1\Editor\Data\Resources\ScriptTemplates Mac.. 2019. 11. 12.
반응형