database 생성

create database bow

 

database 삭제

drop database bow

 

query를 보낼 database 설정

use bow;

table 생성

create table bow
(
    id int primary key auto_increment,
    name varchar(20),
    rarity varchar(20)
);

 

table 삭제

drop table bow;

attribute 추가

alter table bow
add column damage int;

 

attribute 삭제

alter table bow
drop column damage;

tuple 추가

insert into bow (name, rarity) values ('Wooden Bow', 'Common');

 

tuple 삭제

delete from bow
where id = 3;

 


읽어주셔서 감사합니다!

시작하기에 앞서...

이 공략은 초보자를 위한 것이다. (나무 갑옷과 칼만으로도 잡아내는 고인물은 조용히 뒤로가기를 눌러주세요... 잠깐 근데 그게 가능하긴 한가...?)


세팅 - 인벤토리

 

왼쪽에서부터...

 

Gold Bow

>> 제작법 : 모루에서 금 주괴 7개로 제작할 수 있다. (참고 : 금 주괴 = 금 광석 4개, 용광로에서 제작)

>> 이 시점에서는 (고인물이 아닌 이상) 리포징이 불가능하므로, 아무런 리포지를 하지 않았다. 말 그대로 무()-옵션!

>> 자매품으로 Platinum Bow가 있다. (플래티넘은 금의 대체 광물이며, 성능이 더 좋다.)

 

Flaming Arrow

>> 제작법 : 나무 화살 10개횃불로 제작할 수 있다. (맨손으로도 제작 가능)

>> 500개 정도 준비해주자. 그렇지만 초심자라면 1000개 정도 만드는 게 좋다.

>> 밤에도 궤적이 잘 보여서 좋아한다.

>> 보다 번거롭지만 성능이 더 좋은 서리불 화살도 추천한다.

 

Suspicious Looking Eye
>> 소환 아이템이다. 사실 없어도 된다. "체력 200 이상, 방어력 10 이상, NPC 4명 이상"이면 밤마다 1/3 확률로 스폰되기 때문... 그렇지만 지하를 돌아다니다 보면 한두 개쯤은 얻게 될 것이다!

 

Lesser Healing Potion

>> 항아리만 부숴도 얻을 수 있다.

>> 사실 3개 정도만 준비해도 된다. 보스전이 4분 이상 지속되는 경우는 드물기 때문.


세팅 - 갑옷

 

금 갑옷을 맞춰주면 된다.

 

75개의 금 주괴가 필요하다. 광석으로 환산하면 300개!

 

만일 '금이 안 보인다!' 싶으면 백금만 생성되는 세계일 가능성이 높다. 백금으로 갑옷을 맞춰주자. (백금이 금보다 더 좋으니 걱정하지 말자!)

 

솔직히 이렇게까지 맞추는 경우는 드물고, 익숙해지면 남는 광석들을 잘 짜집기하여 누더기...처럼 입게 된다. 그렇지만 세트 보너스 때문에 "초심자"라면 위와 같이 맞춰 입는 것을 추천한다.

 

Gold Helmet
>> 제작법 : 금 주괴 20개 (모루에서)
>> 방어력 : 4

 

Gold Chainmail
>> 제작법 : 금 주괴 30개 (모루에서)

>> 방어력 : 5

 

Gold Greaves
>> 제작법 : 금 주괴 25개 (모루에서)

>> 방어력 : 4

 

세트효과
>> 방어력 3 추가
>> 그러므로 총 방어력은 16이 된다.


세팅 - 장신구

 

위에서부터...

 

Hermes Boots
>> 획득 경로 : 황금 상자 (지하, 대동굴)
>> 생각보다 확률이 괜찮다. "재생 밴드, 마법 거울, 병 속의 구름, 헤르메스 부츠, 철퇴, 등산용 발톱, 조명탄, 추출기" 이렇게 8개 중에 하나가 확정적으로 들어있는 메커니즘이기 때문.

 

Cloud in a Bottle
>> 획득 경로 : 황금 상자 (지하, 대동굴)

>> 이 게임에는 "??? in a Bottle" 시리즈가 있다. 다른 "??? in a Bottle"이 있다면 스킵해도 무관하다. (사실 Cloud in a Bottle이 제일 성능이 딸린다...)

 

Band of Regeneration
>> 획득 경로 : 황금 상자 (지하, 대동굴)

>> 사실 필수는 아니다. 그냥 있으면 좋은 정도?

 

나머지 3칸은 마음대로 맞춰도 좋다. (어짜피 초반에는 저 셋을 제외하면 "전투에서 쓸만한" 장신구가 없기 때문에...ㅋㅋㅋ)

 

추가적으로, 가능한... 방어력 옵션이 붙은 장신구를 채용하도록 하자. 방어력 옵션으로는 Hard(+1), Guarding(+2), Armored(+3), Warding(+4)이 있다.


세팅 - 아레나

 

200개 정도의 나무 플랫폼을 깔고, 25 블럭 간격으로 횃불을 깔았다.

 

참고로 모닥불과 하트 랜턴을 제외한 나머지는 삶의 질(?)을 올려주기 위한 편의성 가구들일 뿐이다.

 

Campfire
>> 제작법 : 아무 나무 10개횃불 5개로 제작할 수 있다. (맨손으로도 제작 가능)

>> Cozy Fire 버프를 준다; +0.5 초당 체력 재생 & +10% 체력 재생률

 

Heart Lantern
>> 제작법 : 생명 수정과 사슬 4개로 제작할 수 있다. (맨손으로도 제작 가능)

>> Heart Lamp 버프를 준다; +1 초당 체력 재생


그리고 가장 중요한 건...

 

의문사를 막아줄 넉넉한 체력이다!

 

지하, 대동굴에서 위에서 말한 필수 장신구를 파밍하며 생명 수정도 틈틈히 모아주면 쉽게 달성할 수 있다.

 

마스터 모드면 3시간 넘게 걸릴 수도 있다. 딸깍 소리가 나는 순간 "너는 이미 죽어있다"가 시전되기 때문... 바위 함정 언제 너프 되나요?


플레이 영상

난이도는 마스터.

 

무기와 장신구가 전부 무()-옵션인 채로 플레이 영상을 찍었다.

 

그리고 장신구도 위에서 말한 3개만 꼈다.

 

https://youtu.be/C09rwcGrE6o

매우 힘들게 잡았습니다...

도저히 못 잡겠다면?

 

인권(?) 도핑 세트를 이용하자! 포션과 음식은 게임의 난이도를 대폭 낮춰준다!

 

참고로 필자가 초심자였을 무렵, 물병배치된 병에 대해 알아보느라 1시간을 썼기 때문에... 미리 정리하고 진행하겠다;

>> 물병 모래 2개 용광로에서 유리로 만든 뒤, 다시 용광로에서 유리병을 만들고, 물가에서 맨손으로 제작하면 된다. 

>> 배치된 병이라고 하니까 생소할 수도 있는데, 그냥 유리병 아무 플랫폼 위에 배치하면 된다. 대충 이런 모양;

 

다시 돌아와서, 왼쪽에서부터...

 

Bowl of Soup

>> 제작법 : 과 금붕어가마솥에서 제작.

>> 버섯지상에서 캐면 되고, 금붕어상인으로부터 잠자리채를 산 뒤, 물속을 돌아다니다보면 잡을 수 있다.

>> 가마솥은 이렇게 생겼다 (제작법 : 모루에서 철/납 주괴 10개아무 나무 2개로 제작);

>> 참고 : 아직 크툴루의 눈을 잡지 못했으므로 드라이어드가 입주하지 않아 호박 파이를 만들 수가 없기 때문에 수프로 대체한 것이다. 드라이어드가 보이면 바로 "호박 파이"로 갈아타자!

 

Endurance Potion

>> 제작법 : 물병, 갑주동굴어(Armored Cavefish), 반짝이꽃(Blinkroot)으로 배치된 병에서 제작.

>> 갑주동굴어는 지하, 대동굴, 지옥에서 낚을 수 있다. 철/납 낚싯대마법의 큰지렁이(Enchanted Nightcrawler)를 사용하여 지하에서 낚는 것을 추천한다. 

>> 반짝이꽃은... 지하에서 적당히 칼을 휘두르고 다니면 어느새 인벤토리에 쌓여있을 것이다.

 

Regeneration Potion

>> 제작법 : 물병, 해맞이꽃(Daybloom), 버섯으로 배치된 병에서 제작.

>> 해맞이꽃버섯은 지상에서 흔히 볼 수 있다. 칼 휘두르기를 생활화하자!

 

Swiftness Potion

>> 제작법 : 물병, 반짝이꽃(Blinkroot), 선인장으로 배치된 병에서 제작.

>> 선인장사막에 널려있다. 도끼로 적당히 캐오자.

 

Ironskin Potion

>> 제작법 : 물병, 해맞이꽃(Daybloom), 철/납광석으로 배치된 병에서 제작.

>> 철과 납은 "대체 광물" 관계이다. 월드에 철이 있다면 납이 없고, 그 반대의 경우도 존재한다.


추가적으로...

해바라기를 사용할 수도 있다. 아레나 주변에 심어주자.

 

잔디 위(초록 땅)에만 심을 수 있으며, 이동속도를 10% 증가시켜주고 적의 스폰률을 17% 낮춘다. 


모든 준비를 마쳤다...

풀도핑 + 풀와딩(Warding)을 했을 경우, 크툴루의 눈이 얼마나 쉬워질지 궁금해서 한 번 해봤다. 

 

https://youtu.be/U31apRYgmRc

이 정도면 괴롭히기...라고 해도 될 것 같다 ㅋㅋㅋ


결과 : 이거 마스터 모드 맞나...?


읽어주셔서 감사합니다!

문제

각 장르별로 2개씩, 많이 재생된 노래를 출력하여라. 기준은 다음과 같다;

  1. 재생 횟수가 가장 많은 장르를 먼저 출력한다.
  2. 많이 재생된 노래를 먼저 출력한다.
  3. 재생 횟수가 같은 경우, 고유 번호가 낮은 노래를 먼저 출력한다.
  4. 재생 횟수가 같은 장르는 주어지지 않는다.

https://school.programmers.co.kr/learn/courses/30/lessons/42579

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr


풀이

조건을 따라가며 정렬하면 되는 문제이다. 1번 조건을 위해 맵을 사용하였다. 이후 정렬의 우선순위를 고려하여 compare 함수를 작성하였다. 처음으로 풀어보는 레벨 3 문제라 긴장했는데, 별로 어렵지 않아서 기뻤다 ㅎㅎ


코드

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <map>

using namespace std;

map<string, int> genre_play_count;
map<string, int> genre_print_count;

typedef struct Song
{
    string genre;
    int play;
    int id; // original id
} song;

bool compare(const song &a, const song &b)
{
    if (genre_play_count[a.genre] != genre_play_count[b.genre])
        return genre_play_count[a.genre] > genre_play_count[b.genre];
    
    if (a.play != b.play)   
        return a.play > b.play;

    return a.id < b.id;
}

vector<int> solution(vector<string> genres, vector<int> plays) 
{
    // insert info
    vector<song> songs;
    int loop_count = genres.size();
    for (int i = 0; i < loop_count; i++)
    {
        song temp_song;
        temp_song.genre = genres[i];
        temp_song.play = plays[i];
        temp_song.id = i;
        songs.push_back(temp_song);
    }

    for (const song entity : songs) {
        genre_play_count[entity.genre] += entity.play;
    }

    // sort
    sort(songs.begin(), songs.end(), compare);

    // answer from songs list
    vector<int> answer;
    for (const song entity : songs) 
    {
        genre_print_count[entity.genre]++;
        if (genre_print_count[entity.genre] > 2) continue;
        answer.push_back(entity.id);
    }
    return answer;
}

int main(void)
{
    vector<string> genres = { "classic", "pop", "classic", "classic", "pop" };
    vector<int> plays = { 500, 600, 150, 800, 2500 };
    vector<int> answer = solution(genres, plays);

    for (const int entity : answer)
    {
        cout << entity << endl;
    }
}

읽어주셔서 감사합니다!

먼저...

나무 플랫폼으로 아레나를 지어준다. 필자는 기계 보스 3마리를 모두 여기에서 잡을 생각이라 7줄 정도를 깔았지만 파괴자만을 잡을 생각이라면 3~5줄 정도만 깔아줘도 된다. (아레나 가운데에 있는 것들은 뭔가요? 추후 설명할 것이다!)

아직 쓸쓸한 마을...


아레나 가운데에 있는 것들...

  • 모닥불과 하트 랜턴을 제외하면 나머지는 추천 사항이다. 만약 어떻게 구하고 만드는지 안다면 넘어가도 되고, 아니라면 아래 설명을 보자!
  • 왼쪽부터 숫돌(Sharpening Station), 바스테트 조각상(Bast Statue), 모닥불(Campfire)이며 위에 달려있는 것들은 하트 랜턴(Heart Lantern)과 병 속의 별(Star in a Bottle)이다.

  • 모닥불 :
    > 체력 재생력을 늘려준다.
    > 주위에 머무르기만 해도 버프가 적용된다. (패시브)
    > 아무 종류의 나무 10개와 횃불 5개로 "맨손" 제작.

  • 하트 랜턴 : 
    > 체력 재생력을 늘려준다.
    > 주위에 머무르기만 해도 버프가 적용된다. (패시브)
    > 생명 수정과 사슬 4개로 "맨손" 제작. 참고로 사슬은 철/납 주괴 15개로 모루에서 제작할 수 있다. 

  • 바스테트 조각상 :
    > 방어력을 5 늘려준다.
    > 주위에 머무르기만 해도 버프가 적용된다. (패시브)
    > 사막 지하의 오두막에서 떼어오거나, 사암 상자(=사막 상자)에서 14.29%의 확률로 얻을 수 있다.

  • 숫돌 : 
    > 근접 무기의 방어력 무시도를 5 늘려준다.
    > 우클릭으로 버프를 얻어줘야 한다. 죽으면 초기화된다.
    > 정글 지하의 오두막에서 떼어오거나, 상인으로부터 10 골드에 구매할 수 있다.

  • 병 속의 별(이 전략에서는 사용하지 않는다!) : 
    > 마나 재생력을 늘려준다.
    > 주위에 머무르기만 해도 버프가 적용된다. (패시브)
    > 유리병과 별똥별로 "맨손" 제작. 참고로 유리병은 유리 2개로 만들 수 있고, 유리는 모래 블록 2개로 만들 수 있다. 둘 다 "용광로"에서 제작할 수 있다.

갑옷과 무기

  • 티타늄/아다만타이트 풀셋을 맞춘다. 흉갑과 바지는 선택권이 없지만, 헬멧은 가장 높은 방어력을 제공해주는 것으로 맞춘다.
  • 티타늄/아다만타이트 검을 만든다. 미스릴/오리칼쿰 검이나 코발트/팔라듐 검도 괜찮다. 솔직히 공격력이 60 언저리이면서 공격 속도가 "매우 빠름"이기만 하면 다 된다. 수식어는 Legendary가 가장 좋고, Godly도 차선책으로는 괜찮다. 

장신구

  • 코발트 방패와 재생의 밴드를 제외하면 나머지는 자유롭게 맞춰도 좋다. 필자는 요정의 날개, 전사의 휘장, 야수의 발톱으로 빈 칸을 채웠다. 자세한 설명은 하단 참조!
  • 수식어는 Warding으로 맞추자. Armored도 차선책으로는 괜찮다.
  • 장신구를 맞추느라 허비하는 시간을 줄이기 위해, 최대한 쉽게 구할 수 있는 것들로만 골라 적었다.

  • 코발트 방패(Cobalt Shield) : 
    > 넉백 면역과 방어력 1을 제공한다. 
    > 던전의 잠긴 황금 상자로부터 획득할 수 있다.

  • 재생의 밴드(Band of Regeneration) : 
    > 초당 0.5 체력 재생력을 제공한다. 
    > 지하, 대동굴의 황금 상자로부터 획득할 수 있다. 질리도록 나오므로 입수 난이도가 매우 낮다...

  • 요정의 날개(Fairy Wings) : 
    > 비행 능력을 제공한다.
    > 픽시 가루 99개와 비행의 영혼 20개로 제작한다. 어디까지나 편의용이므로, 다른 이동용 장신구로 대체할 수 있다.

  • 전사의 휘장(Warrior Emblem) : 
    > 근접 공격력을 15% 올려준다.
    > 월 오브 플래시를 처치하여 25% 확률로 획득할 수 있다.

  • 야수의 발톱(Feral Claws) : 
    > 근접 공격 속도를 12% 올려준다.
    > 정글 지하의 넝쿨 상자(=정글 상자)로부터 21.72% 확률로 획득할 수 있다.

추가적으로...

  • 이미 위의 세팅만으로도 충분히 잡지만, 혹시 모른다 싶으면 철피부 포션(Ironskin Potion)을 먹자.
  • 음식을 먹는 것도 도움이 된다.

패턴 공략

  • 보스가 땅 속으로 깊이 들어가서 꼬리만 보일 듯 싶을 때, 갑작스럽게 머리를 필두로 플레이어에게 돌진하는 경우가 있다. 이 패턴만 잘 피해주면 한 손으로도... 공략할 수 있다. (물론 맞으면서 해도 그렇게까지 위험하지는 않다. 세팅의 무서움을 보여주자!)

플레이 영상

https://youtu.be/iiYJ61Rli2Y

침대같은 편안함~

읽어주셔서 감사합니다!

개요

  • 서머너는 다른 직업과는 다르게 최종 세팅이 정해져 있다.
  • 여러모로 추가 업데이트가 더 필요한 직업인 셈이다...
  • 참고로 어떤 직업이든지 간에 Legendary Zenith가 있으면 좋다.
  • 무기 앞에 써져 있는 수식어는 최고 수식어이다.

무기

    • Legendary Kaleidoscope :
      밤 신성지대에서 나오는 선명한 풀잠자리를 죽였을 때 소환되는 빛의 여제를 처치하여 25% 확률로 획득.
    • Ruthless Terraprisma :
      낮 신성지대에서 선명한 풀잠자리를 죽였을 때 소환되는 강화된 빛의 여제를 처치하여 100% 확률로 획득. 선명한 풀잠자리를 사전에 포획한 뒤 죽여야 한다.
    • Ruthless Stardust Dragon Staff :
      Lunatic Cultist를 처치한 뒤 소환되는 소성단의 기둥을 파괴하여 획득한 Stardust Fragment로 제작.

방어구

    • Stardust 세트 :
      달의 군주를 처치하여 Luminite 주괴를 획득한 뒤, 그걸 Stardust Fragment와 조합하여 제작.

장신구

    • Menacing Summoner Emblem
      Wall of Flesh를 처치하여 25% 확률로 획득.
    • Menacing Hercules Beetle
      플랜테라를 처치한 이후에, 정글에 거주하는 주술사 NPC를 통해 구매.
    • Menacing Pygmy Necklace
      주술사 NPC를 통해 구매.
    • Menacing Necromatic Scroll
      펌킨문 이벤트에서 탄식하는 나무가 2%~20%의 확률로 드롭. 웨이브가 높아질수록 확률도 늘어남.
    • Menacing Papyrus Scarab
      Necromatic Scroll과 Hercules Beetle을 땜장이의 작업대에서 조합.

탈 것

  • Cosmic Car Key (흔히 말하는 UFO) : 
    화성의 광기 이벤트에서 우주선을 파괴하면 16.66%의 확률로 획득 가능.

보조

  • Summoning Potion
    Variegated Lardfish, Bottled Water, Moonglow를 조합하여 포션 제작대에서 제작. Variegated Lardfish는 대동굴 레벨 이하의 Underground Jungle에서 낚을 수 있고, Moonglow는 정글 지하에서 적당히 씨앗 몇 개만 캐온 뒤, 드라이어드가 파는 화분을 사서 재배하면 편하다.

추가적으로...

  • Terraprisma는 AFK 파밍용, Stardust Dragon Staff는 보스용이다.
  • 그러나 빠르게 움직이는 보스에게는 Terraprisma가 훨씬 나은 경우도 많다.
  • 펌킨문과 주술사만 있으면 모든 장신구를 쉽고 빠르게 맞출 수 있어서 엔딩을 본 이후에 재미로 플레이하기에는 가장 좋은 직업이다.

읽어주셔서 감사합니다!

개요

  • 아직까진 적이 기지로 쳐들어오는 일은 없다. 그러나 "미션을 클리어하기 위해서 전투를 해야"하는 최초의 미션이다.

Mission Objective

  • Eradicate the alien infestation.
  • Raynor must survive.

공략

  • 투 트랙으로 나눠진다; 1. 적당히 운영을 할 것이냐? 2. 아니면 빠르게 클리어할 것이냐?
  • 1. 11시로 달려가서 멀티를 공짜로 하나 얻는다. 이후 3배럭으로부터 마린 & 파벳을 충원하여 1시를 천천히 밀면 된다.
  • 2. 초반에 주어지는 레이너와 마린 4마리 + 구출한 파벳을 모두 끌고 1시로 달려가도 미션을 깰 수 있다.

플레이 영상

https://youtu.be/_hDEyXvaL9Y

처음으로 감염된 커맨드 센터를 봤을 때의 그 충격이란...

소감

    • 메딕을 못 쓰니 마린의 허약한 체력만이 부각된다. 같은 머릿수의 저글링조차도 못 잡는 것 같다... 그나마 레이너를 탱으로 세우면 본래의 DPS를 발휘할 수 있다는 점이 참 다행이다. 

읽어주셔서 감사합니다!

개요

  • 아직까진 초반부, 튜토리얼격 미션이다. 편한 마음으로 하자!

Mission Objective

  • Find Raynor
  • Build a Barracks
  • Train 10 Marrines

공략

  • 커맨드를 띄워서 미네랄 지대에 가까이 붙이면 좋다. (경험상 모든 오리지널 미션에 해당하는 듯?)
  • 인구수가 부족할 일은 없다. (커맨드 + 서플라이 1개를 제공받기 때문)
  • 맵 상에 널려있는 저글링이 기지로 쳐들어오는 일은 없으니, 마음 놓고 플레이해도 된다.

플레이 영상

https://youtu.be/AVuZE9bcMEc

??? : 황무지로 가라니, 말도 안 돼!

소감

  • 레이너의 강력함을 체감할 수 있는 미션이었다. 어택땅만 해도 맵 상에 있는 모든 저글링을 잡을 수 있을 거라 확신한다 ㅋㅋ...

다음 글

캠페인 에피소드 1.2 Backwater Station

 

[스타크래프트] 캠페인 에피소드 1.2 Backwater Station

개요아직까진 적이 기지로 쳐들어오는 일은 없다. 그러나 "미션을 클리어하기 위해서 전투를 해야"하는 최초의 미션이다.Mission ObjectiveEradicate the alien infestation.Raynor must survive.공략투 트랙으로 나

quickclid.tistory.com

개요

  • 첫 미션이다. 참고로 브리핑 화면에서 좀 오래 기다리면, AI가 레몬치킨 조리법을 읊는다...

Mission Objective

  • Build 3 Supply Depots
  • Build a Refinery
  • Gather 100 Vespene Gas

공략

  • 커맨드를 띄워서 미네랄 지대에 가까이 붙이면 좋다.
  • 마린을 쓸 일이 없다. 마침 인구도 부족하므로, 마린 몇 마리를 좋은 곳으로 보내주자.
  • 맵 상에 널려있는 저글링이 기지로 쳐들어오는 일은 없다. 마음 놓고 플레이해도 된다.

플레이 영상

https://youtu.be/5SFvqbE4Nps

스타크래프트에 입문한 것을 환영한다!

소감

  • 뭔가 기초부터 다져가는 느낌이다. 그리고 생각보다 쉬워서 안심했다. 아무렴 브루드워 챕터 6까지 순조롭게 클리어할 수 있으면 좋겠다!

다음 글

캠페인 에피소드 1.1 Wasteland

 

[스타크래프트] 캠페인 에피소드 1.1 Wasteland

개요아직까진 초반부, 튜토리얼격 미션이다. 편한 마음으로 하자!Mission ObjectiveFind RaynorBuild a BarracksTrain 10 Marrines공략커맨드를 띄워서 미네랄 지대에 가까이 붙이면 좋다. (경험상 모든 오리지널

quickclid.tistory.com

 

이 부분을 완전히 정복해보자!


목차

  1. Has Exit Time
  2. Exit Time
  3. Fixed Duration
  4. Transition Duration
  5. Transition Offset
  6. 현재 State를 받는 법

Has Exit Time

  • Exit Time의 사용 여부를 결정한다.

Exit Time

  • Exit Time이란 특정 State에 진입했을 시, Transition 조건을 충족했더라도 다음 State로 넘어가지 않은 채로 버티는 시간을 말한다. 단위는 (Animation Clip의 재생 시간에 기반한) normalized이다.
  • 주로 격투 게임에서 State Delay를 구현하는 데 사용된다. (예 : 땅에 착지하는 모션이 모두 재생된 다음에야 파동권을 쏠 수 있도록 만들기 위해 사용됨)

Fixed Duration

  • Transition Duration의 단위를 결정한다; "실제 초(fixed)"로 할 것인지, "normalized(%)"로 할 것인지?

Transition Duration

  • 현재 State와 다음 State를 얼마만큼 Blend하여 Transition할 것인지 결정한다. 범위는 0 ~ 1까지이다. 이 값이 크면 클수록 자연스럽다. 그러나 너무 크면 Input과 Action의 딜레이가 크다는 느낌을 받을 수도 있으니, 0.2 ~ 0.25 정도로만 정하자.
  • 참고로 Sprite Sheet Animation이라면 무조건 0으로 설정해야 한다. 자연스러운 Blend가 불가능하다.

Transition Offset

  • 애니메이션을 어느 시점에서부터 재생할지 결정하는 옵션이다.
  • 대표적인 사용처로는 Idle -> Walk Transition에서 Walk State의 Transition Offset을 25%로 설정하는 것이다. 그러면 발이 순간이동하는 것처럼 보이는 문제를 해결할 수 있다.

현재 State를 받는 법

  • AnimatorStateInfo를 통해 받을 수 있다.
  • 사용 예 : Update() 내부에 AnimatorStateInfo stateinfo_base = anim.GetCurrentAnimatorStateInfo(0)를 넣는다.
  • 참고로 GetCurrentAnimatorStateInfo(int)에서 int는 레이어를 넣는 곳이다. 3D Rig Humanoid Animation에서 자주 사용되는 개념으로 0이면 Base, 1이면 Upper Body이다.

읽어주셔서 감사합니다!

GitHub Desktop 최고!


Unity 전용 .gitignore

  • GitHub에서 Repository를 새로 만들 때 .gitignore 항목에서 다운로드 받을 수도 있다. 

.gitignore
0.00MB


Unity Editor 설정 변경

  • Edit >> Project Settings >> Version Control >> Mode를 Visible Meta Files로 변경
  • git push & pull을 할 때마다 mesh collider의 위치가 엇갈리는 것을 방지해준다.

초기화 (자신이 팀장인 경우)

  • 작업하는 directory는 Unity > Project > Currently Working Project인 것으로 간주한다.
  1. Unity 전용 gitignore을 Currently Working Project에 넣어준다.
  2. git config --global init.defaultBranch main를 친다. 이후에 git init을 할 때마다 기본 branch가 main이 된다. 
  3. git init
  4. git remote add origin url (remote에 있는 빈 리포지토리의 url)
  5. git add .
  6. git commit -m "first commit"
  7. git push

초기화가 올바르게 진행됐는지 확인

  1. git remote add origin 이후에 git remote -v
  2. git add . 이전에 git status

이후 작업할 때

  1. git checkout main (현재 브랜치를 main으로 이동)
  2. git pull (최신 상태 반영)
  3. git branch 브랜치이름 (작업용 브랜치 생성)
  4. git checkout 브랜치이름
  5. 작업하기... (git add ., git commit -m "asdf", git push)
  6. 이후 GitHub Repository에 가보면 PR이 있을 것. 
  7. git conflict를 해결한 뒤, merge. 또한 밑에 delete branch 버튼이 있을 것. 이것도 눌러준다.
  8. git branch -d 브랜치이름 (작업한 브랜치를 로컬에서 지운다)

차선책

  • 엔진을 다룰 수 있는 기획자 & 아트 직군과 협업하는 경우, git보다는 GitHub Desktop을 사용하는 것이 더 효율적일 수도 있다.
  • GitHub Desktop은 GUI로, commit, push, pull, branch 교체가 자유롭고 편하다.
  • 이렇게 작업하는 경우, 주로 리드 프로그래머가 베이스 프로젝트를 main에 push 한 뒤, stage와 같은 협업용 branch를 따로 판다.
  • 협업용 branch에는 자유롭게 push를 할 수 있으나, conflict를 방지하기 위해 push 여부를 최대한 자주 디스코드에 알려줘야 한다.
  • conflict가 난 경우 VS Code를 통해 빠르게 고칠 수 있다; HEAD 쪽을 잘 보면 위에 작은 글씨로 incoming과 같은 옵션을 선택할 수 있다.

읽어주셔서 감사합니다!

+ Recent posts