전체 글

GP

    1인 개발 리소스 구하기

    1인 개발 리소스 구하기

    1. 사이트 : 에셋스토어 유니티 개발자라면 에셋스토어의 도움 없이 개발은 불가능하다. 다양한 리소스를 만들고 있는 게임에 쉽게 넣을 수 있다. 에셋스토어는 분기별로 큰 세일이나 이벤트를 진행하는데, 다소 뜬금없는 타이밍에 진행하기도 한다. 매일 에셋스토어를 들어갈 수는 없으니 새 소식을 이메일로 받아보는 것을 추천한다. 에셋스토어 - 오른쪽 상단의 계정 아이콘 - Personal Settings에 들어가면 알림 설정을 할 수 있다. 이제 막 1인 개발에 입문하고, 에셋스토어에서 뭐부터 사야 할지 모르겠다면 UI 패키지부터 사는 것도 나쁘지 않은 것 같다. UI가 없는 독특한 컨셉의 게임이 아니라면 모든 게임에는 UI가 들어가는데 적은 돈으로 게임의 시각적 퀄리티를 높이는 방법 중에는 UI가 대표적이라고..

    Weighted Random Picker (가중치 랜덤 뽑기)

    Weighted Random Picker (가중치 랜덤 뽑기)

    이번에도 예시는 Path Of Exile 게임이다. 이 게임은 아이템의 옵션을 무작위로 재설정할 수 있다. 그리고 등장할 수 있는 옵션들에는 사진과 같이 500, 1000, 250이라는 가중치가 붙어있다. 이 가중치에 비례해서 등장 확률이 결정된다. 대부분의 다른 게임들은 뽑기 확률을 %로 표기하는데, 이는 일반 유저들이 이해하기 쉽도록 그렇게 하는 것일 뿐 실제로는 확률이 아닌 가중치를 통해서 계산을 한다. 그리고 이 가중치에 의한 랜덤 뽑기 코드는 구글링 하면 꽤 많이 나오는데, https://rito15.github.io/posts/unity-toy-weighted-random-picker/ Weighted Random Picker (가중치 랜덤 뽑기) Note 게임에서 각각 n% 확률로 존재하는 ..

    Bit Flag Enum으로 스킬 태그 만들기

    Bit Flag Enum으로 스킬 태그 만들기

    Path Of Exile 게임의 스킬 툴팁을 보면 스킬마다 여러 가지 태그를 가지고 있는 것을 볼 수 있다. 스킬 태그 목록을 이용하여 여러가지 작업을 할 수 있다. 예를 들면 '카오스 스킬 사용시 잃은 체력 1% 회복'이라는 옵션을 가진 아이템을 플레이어가 착용했다면 어떤 스킬을 사용할 때마다, 해당 스킬의 태그 목록에 '카오스'가 있는지 확인하고 체력을 회복시키는 로직을 쉽게 구현할 수 있을 것이다. 아니면 '저주 면역'이라는 옵션을 가진 몬스터에게 플레이어가 어떤 스킬을 사용하면 해당 스킬의 태그 목록에 '저주'가 있는지 확인해서 해당 스킬이 몬스터에게 통할지 안 통할 지를 정할 수 있다. 또 다른 예시로, 궁수의 전설의 스킬 툴팁을 보자. 어떤 태그들을 가지고 있는지 표시하고 있지 않지만, 만약 ..

    enum 클래스 다루기

    enum 클래스 다루기

    1. enum 클래스 선언 export enum TYPE_TRASH{ PAPER, VINYL, PLASTIC, CAN}enum 클래스의 선언과 정의는 C#과 거의 동일하다. enum도 클래스기 때문에 export 키워드를 붙여야 외부 클래스에서 import를 하고서 접근할 수 있다.    2. enum 클래스 사용 var temp = TYPE_TRASH.CAN;enum 클래스의 사용도 C#과 동일하다.  cc.log(TYPE_TRASH[0]); // PAPERcc.log(TYPE_TRASH["PLASTIC"]); // 2타입스크립트에서는 enum 클래스를 좀 더 폭넓게 활용할 수 있다. enum 클래스에 key값과 value값으로 접근해서 각각 value값과 key..

    getChildByName

    getChildByName

    1. 유니티의 Transform.Find 유니티에서 특정 오브젝트를 검색해서 찾아주는 함수는 Transform의 Find 함수가 대표적이다. 스크립트에서 간단하게 자식 노드들에 접근할 수 있고, 파라미터로 들어가는 path에 경로를 더하고 빼면서 다양하게 활용할 수 있다. 2. 코코스 크리에이터의 Node.getChildByName 유니티의 Find와 대응되는 함수가 코코스 크리에이터에는 getChildByName 이라는 함수로 존재한다. 문제는 이 함수는 노드의 자식을 한 단계밖에 검색하지 못 한다는 것이다. A 노드에서 getChildByName 함수를 통해서 B, C는 찾을 수 있지만 그 아래 D, E, F, G는 못 찾는다. 이런 큰 단점이 있지만 코코스 2.4.8 기준으로, 유니티의 Find와 ..

    cc.tween

    cc.tween

    1. 유니티 Dotween 유니티에서 범용적으로 사용되는 에셋 중에 Dotween 이라는 에셋이 있다. 거의 필수 에셋으로 취급받고 있다. (UI를 포함하는) 어떤 오브젝트에 관한 컨트롤을 스크립트로 할 때 정말 편하게 사용할 수 있는 API다. 기능도 매우 다양하다. 트윈 간의 결합이나 콜백도 간단해서, 직관적이고 읽기 편한 코드를 추구하는 사람에게는 최고의 에셋인것 같다. 2. 코코스 크리에이터 cc.tween 그리고 코코스 크리에이터 v2.0.9 버전부터 dotween을 벤치마킹한 cc.tween이 업데이트됐다. 참고할 수 있는 레퍼런스 페이지는 두 개가 있다. https://docs.cocos.com/creator/manual/en/scripting/tween.html https://docs.co..

    [예제 게임] GameScene #5 (스프라이트 로드와 교체)

    [예제 게임] GameScene #5 (스프라이트 로드와 교체)

    게임 일시정지 온오프 버튼과 사운드 음소거 온오프 버튼을 만든다. 버튼은 누를 때마다 2장의 스프라이트를 번갈아서 교체하는 Toggle 형식으로 만든다. 오른쪽 상단에 버튼 두 개를 만들어준다. 버튼의 스프라이트 교체는 버튼 컴포넌트의 Transition 속성으로 구현할 수도 있다. 기본 트랜지션 상태는 보다시피 4 종류밖에 제공하지 않는데, 버튼을 누를 때마다 스프라이트를 교체하는 건 이 상태들로 구현할 수 없다. 그래서 트랜지션은 NONE으로 두고서 스크립트로 조작을 한다. @property(cc.Sprite) pauseGameButton:cc.Sprite = null; @property(cc.Sprite) pauseSoundButton:cc.Sprite = null; pauseGameSprite:c..

    [예제 게임] GameScene #4 (오디오 매니저)

    [예제 게임] GameScene #4 (오디오 매니저)

    배경 음악, 물고기 잡았을 때 효과음, 떨어트렸을 때 효과음. 3개를 준비한다. 그리고 씬에 AudioManager 노드를 만들고 AudioSource 컴포넌트를 추가한다. AudioSource와 AudioClip 개념은 유니티와 거의 동일하다. AudioSource 컴포넌트가 붙은 노드는 일종의 MP3 플레이어가 된다. 이번 포스팅에서는 오디오 매니저가 클립 리스트를 가지고 있고 외부에서 오디오 매니저에게 클립의 키 값(음원 이름)을 주고서 재생해달라고 요청하는 방식에 대해 쓰려고 한다. 그리고 재생 요청을 받은 오디오 매니저는 자신이 가지고 있는 오디오 소스로 클립을 재생할 수도 있고 코코스 오디오 엔진에게 클립을 다시 전달해서 엔진이 재생시키도록 할 수 있다. 1. AudioManager const..