Git 협업 시 가지치기를 통해 메인 브랜치에 영향을 주지 않고 테스트 및 기능추가가 가능하다고 했다. 하지만 분기 후 작업을 하고, 사전에 합의되지 않은 병합을 무분별하게 진행하게 되면 결국 메인 브랜치가 꼬이는 불상사가 발생하는 상황이 올 수 있다. 이런 상황을 방지하기 위해 저장소의 관리자를 제외한 나머지 (Collaborator로 등록된) 인원은 메인 브랜치로의 병합 권한을 주지 않고, 분기된 브랜치를 끌어오기 요청 함으로써 저장소 관리자가 메인 브랜치에 병합하기 전에 충돌이 없는지 확인 후 메인 브랜치에 병합하는 작업을 수행한다.형상관리 전략끌어오기 요청(Pull Request, 이하 PR)은 형상관리 전략에 따라 수행하는데, 크게 Git Flow와 Trunk Based로 나눠볼 수 있다.형상관..
Jade's Hello World
Node 실행하기각 노드의 이름을 클릭해보면 시스템에 맞는 Agent 실행 커맨드라인이 보인다. java -jar agent.jar -url http://127.0.0.1:8080/ -secret 2ab17036e507d3d852b6d245dde21f6817ce35e4fc0582484d85124b29392edd -name "Windows-x64" -workDir "E:\Jenkins" URL을 본인 상황에 맞게 바꿔서 터미널에 입력해주면 Connected가 뜨며 웹 UI상 빌드 실행 상태가 "대기중"으로 바뀐다. 프로젝트 설정하기새로운 아이템 - FreeStyle Project General에 "이 빌드는 매개변수가 있습니다" 클릭 후 매개변수 추가Label 선택 후 Node에서 설정한 라벨을 순차적으..
진행중인 프로젝트는 macOS와 Windows 두가지 OS를 지원한다. 매번 빌드때마다 git push / pull 후 수동 빌드하기가 번거로워서 Jenkins로 자동 빌드 환경을 구성했다. Github를 사용하지 않고 Gitea를 사용하는 이유는.....LFS Bandwidth 무료 사용량을 초과해서.......... 이지만, Github와 Gitea의 설정 방법은 완전히 동일하다. 유니티 빌드 스크립트 작성유니티 에디터의 CLI 빌드 시 빌드 스크립트가 있어야 한다. - 유니티 스크립트 추가 : "Assets/Editor/CLIBuild.cs"에디터 폴더에 작성해야 하며, 모든 멤버는 static이어야 한다. using System.Linq;using UnityEditor;using UnityEng..
https://jyspw.tistory.com/72 [Unity] 2D 쿼터뷰 공간 바닥에 랜덤 스폰하기개발 진행중인 프로젝트는 2D게임인데, 쿼터뷰 형식으로 되어있다. 3D공간에 물체를 배치하고 Orthographic View로 보여주는게 아니라 각각의 장소가 모두 1장의 Sprite이다. 그렇기 때문에 공간 내에blog.ysoft.kr 위 글에서 Y축을 기준으로 0~100까지 Layer Order를 줬다. 당연하게도 제대로 안된다. 아래 그림과 같이 각각의 Vector A, B, P가 있다고 가정할 때점 P에서 선분 BA로 수선의 발을 내린 후, 0~1로 Normalize된 선분 BA와 수선의 발의 접점을 찾는다. public float FindShortest(Vector2 point, Vector2..
유니티에서 The requested operation caused a stack overflow 오류가 발생했다. 타이틀에서 메인 게임 씬으로 넘어갈 때 발생했는데, 타이틀 씬에 들어가는건 게임매니저 외엔 수정한게 없는데 똑같은게 들어간 메인 씬은 또 잘 된다..; 그래도 알 수 없으니 콘솔에 뜬 호출스택을 하나하나 찾아가며 본 결과 setter에서 다른 값을 변경해줄 때 발생한 오류였는데 public int playerStamina { get { return _playerStamina; } set { _playerStamina = value; if(_playerStamina 스태미너 0으로 설정->시간대 변경 호출->스태미너 0으로 설정... 무한 반복이 일어나 호출스택이 터져버린 것. 데이터를 새로 ..
개발 진행중인 프로젝트는 2D게임인데, 쿼터뷰 형식으로 되어있다. 3D공간에 물체를 배치하고 Orthographic View로 보여주는게 아니라 각각의 장소가 모두 1장의 Sprite이다. 그렇기 때문에 공간 내에 물체를 랜덤하게 배치할 때 계산을 자칫 잘못하면 맵 밖으로 튀어나가거나 공중에 붕 떠있는 것처럼 보이게 된다. 위와 같은 상황을 방지하기 위해 바닥면을 기준으로 오브젝트를 배치해 주어야 하는데, 바닥면의 좌표를 구하는 방법은 축과 평행하지 않은 평면상의 좌표를 구하는 것과 같다. 먼저 바닥 위에 배치할 오브젝트 Sprite의 Pivot포인트를 Bottom으로 설정해 준다. 그 다음 위 그림과 같이 바닥면의 네 꼭짓점에 적당한 Padding을 준 위치에 네 개의 Empty Object를 생성한다..
C# 스크립트로 스토리 진행 로직 작업을 하다가 문득 그런 생각이 들었다. Xml이나 Json에 프리팹이나 리소스와 스토리 내용을 등록해 직렬화 하고, 거기에 필요한 데이터만 런타임중에 불러와서 표시해주면 간단하지 않을까? 바로 해보자. Editor 폴더에 스크립트를 작성한다. Story Scene Editor는 스토리 내용과 리소스를 등록해줄 에디터 Story Scene List는 위 에디터에서 직렬화 후 저장한 데이터들을 한번에 볼 수 있는 창이다. [SerializeField] public Dictionary storySceneList; private SerializedObject storySceneObject; private SerializedProperty storySceneListPropert..
SaveData가 있으면 버튼에 이벤트를 동적으로 할당하게 처리해줬다. 근데 자꾸 0~4의 범위를 벗어나 5번에다 저장한다...ㅜㅜ 검색해보니 for loop 안에서 람다함수 사용 시 발생하는 Closure 문제라고 한다... for loop 내부에서 i값을 그때그때 값 복사, 참조하면 해결 Reference: https://velog.io/@jh11240/Unity%EB%B0%98%EB%B3%B5%EB%AC%B8%EC%97%90%EC%84%9C-%EB%9E%8C%EB%8B%A4delegate%ED%95%A8%EC%88%98-%EC%82%AC%EC%9A%A9%EC%8B%9C-%EB%AC%B8%EC%A0%9C%EC%A0%90%ED%81%B4%EB%A1%9C%EC%A0%80-%EB%AC%B8%EC%A0%9C
어째 인게임 로직 구현보다 UI 구성하는데 시간이 더 오래 걸리는 것 같다..ㅜㅜ DJMAX RESPECT V는 대부분의 UI가 사선으로 깎여서 채워지는데, 쉐이더는 도저히 모르겠어서 아래와 같이 처리했다. 흰 배경 이미지 하나를 넣고 Mask 컴포넌트 추가, 스크립트로 Fill Amount를 0.3~0.5초에 걸쳐 채워주도록 했다. 4, 5, 6, 8 버튼 순환 시 BUTTON TUNES와 배경 사이에 나오는 이펙트는 프리팹으로 만들어서 Start() 함수에서 Fill Amount 호출 왼쪽에서부터 다 채워지면 fillOrigin을 오른쪽으로 바꾼 다음 1.0f -> 0f로 다시 빼도록 처리해줬다. - 사선의 방향이 반대로(45도 or -45도) 되게 하고 싶다면 fillMethod를 Top으로 바꿔주..
앞선 포스팅에서 Git을 사용하는 이유로 협업의 용이성과 테스트를 들었다. 위 두가지 모두 가지치기가 필수라고 볼 수 있는데, 이번엔 가지치기에 대해 알아보도록 하자. 가지치기? 영어로는 Branch라고 하며, git 명령어 또한 git branch로 사용한다. 앞서 로컬 저장소를 만들었을 당시 디렉터리 뒤에 master라고 나와있던것을 기억하는가? 그것이 바로 브랜치명이다. 디렉터리명 뒤에 있는 민트색 master가 브랜치명이다. 나무의 줄기(메인 브랜치)에서 별도의 가지(새 브랜치)를 작성, 메인 브랜치에 영향을 주지 않고 코드를 자유롭게 추가, 수정, 삭제가 가능하다. 큰 가지에서 또 다른 갈래가 뻗어나가듯, 메인 브랜치가 아닌 다른 브랜치에서 분기가 가능하다. 테스트가 완료되었다면 메인 브랜치에 ..