반응형 개발900 알고리즘) 플러드 필 (Flood Fill) 플러드 필 (Flood Fill) 플러드 필이라는 알고리즘은 다차원 배열(2차원 이상)에서 화면을 격자(Grid)로 분할하거나 체우는과정에서 사용되는 알고리즘이다.이번에 필자는 특정 맵을 포인트화하는 과정에서 해당 알고리즘을 사용했다.타일맵으로 만드는 과정에서 굉장히 많이 사용한다.구현방법은 다음과 같다. 특정 기준이되는 좌표를 정한다.기준좌표의 방향(4방향 , 8방향)에 대한 확장형 로직을 작성한다.해당 로직을 재귀처리한다.재귀처리를 하는과정에서 해당 조건이 맞지 않으면 종료한다. (조건은 맵의 크기 or 갈수없는 영역 등등) 작업된 코드는 다음과 같다. private void GetGridPoint(int _x, int _z){ SceneInGame scene = Scen.. 2020. 1. 14. 게임개발) 레이싱 길 만들기 - 방법론 레이싱 길 만들기 - 방법론 길을 만드는 과정에는 여러가지 방법이 존재한다. 이번에 레이싱 길 처럼 곡선으로 이어진 길을 만들어야하는 상황이 생겼다. 레이싱 길을 만드는 과정은 다음과 같다. 1. 라인을 그린다. 2. 라인사이의 중점 지점을 일정한 간격으로 재생성한다. 3. 중심 라인의 양 방향(좌 , 우)의 폭(Width)만큼의 갭으로 2가지의 선을 만든다. 4. 두가지 선을 기준으로 정점 벡터를 생성한다. 5. 삼각형 폴리곤의 정점들을 연결한다. 레이싱 길은 이런형태로 만들어진다. 그냥 노가다 방법으로 만드는과정도 있긴하지만 대체적으로 게임은 특정기준으로 생성이되는 에디터 형태가 되어야한다. ★★★★☆ 2020. 1. 14. 게임개발) 피킹(Picking)기법 피킹(Picking)기법 개발에서 피킹(Picking)이라는 기법은 클릭된 곳의 객체들을 선택해주는 기능이다. 대부분의 툴에서 Viewing 된 영역에서 편의성을 위해서 쉽게 선택을 하는 방법이다. 2D 인 스크린좌표를 통해서 해당 오브젝트를 판별하기 때문에 여러가지 충돌 및 판별 로직이 들어간다. 대략적인 구현론은 다음과 같다. 2D 스크린 좌표를 월드 좌표로 변환 2D 스크린 좌표를 기준으로 Ray를 쏜다. Ray에 모든 충돌되는 오브젝트들을 판별한다. 오브젝트들중에서 가장 Depth가 적은 오브젝트를 반환 피킹의 기법에서 가장 중요한건은 좌표계의 일치화와 충돌에 대한 판단이다. ★☆☆☆☆ 2020. 1. 10. 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. Tip) Cocos Creator 안드로이드 실시간 디버깅 방법 Cocos Creator 안드로이드 실시간 디버깅 방법 콘솔 커맨드창 cd C:\Users\drehzr\AppData\Local\Android\Sdk\platform-tools adb.exe forward tcp:5086 tcp:5086 앱실행 - Connected chrome-devtools://devtools/bundled/inspector.html?v8only=true&ws=127.0.0.1:5086/00010002-0003-4004-8005-000600070008 --------- ※주의사항 -디버그 모드만 됨. URL : https://medium.com/@nwigi/cocos-creator-how-to-debug-native-android-58a8ac899fea Cocos Creator — H.. 2019. 12. 27. 알고리즘) Flocking Algorithm (군중이동 알고리즘) Flocking Algorithm (군중 이동 알고리즘) 군중 이동에 대한 알고리즘으로 많이 쓰이고 대중적인 알고리즘이다.새 떼라던지 물고기들의 움직임 등 여러 집단이 함께 움직이는 모습을 구현한 알고리즘이다. FSM!= Flocking Alogrithm (상태 머신이 없다)Emergent Behavior (임기응변적인 행동)개별적인 정보로 행동!= 집단의 움직임특징은 다음과 같다. 예전부터 한 번쯤은 구현해보려고 했던 Flocking Alogrithm을 구현을 했다.처음부터 내가 구성해서 작업한 건 아니고 다른 코드를 많이 참고했다. Flock에서는 각 가중치에 의거해서 회피, 집합, 정렬에 대한 처리를 하게 되고 집합 그룹이 되면 움직임에 대해서 평균 처리를 하게 된다.수학적인 로직이 꽤나 많이.. 2019. 12. 26. 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. 게임개발) io 게임장르 io 게임장르 요즘 모바일이나 유튜브 같은 플레이 영상들을 보다보면 xx .io 으로 게임이 나오는 경우가 꽤나 많다많다. 작성일 기준 19.01.30일 구글(인기 차트- 무료 게임)순위이다게임) 순위이다. 통칭 io 게임이라고 불르는 게임은 뭘까? io 게임의 원조라고 불리리는 agar.io (아가리오)의 게임이 있다. http://agar.io Agar.io The smash hit game! Control your cell and eat other players to grow larger! Play with millions of players around the world and try to become the biggest cell of all! agar.io io 게임은 특정 장르를 지칭하지는 .. 2019. 12. 6. 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. 자료구조) Map 의 파생 클래스 Map의 파생 클래스 Map의 파생된 클래스는 대략 다음고 ㅏ같다. Map을 기본 베이스로 HashTable , Hash Map, SortedMap이 있고 HashMap의 파생으로 LinkedHash Map ( 해쉬 맵 + 링크드 리스트) SortedMap의 파생으로는 Tree Map이 존재한다. ★☆☆☆☆ 2019. 12. 3. 이전 1 ··· 53 54 55 56 57 58 59 60 다음 반응형