본문 바로가기

프로젝트/게임 개발

[07] 230126 게임 개발 일지 - 악세서리 착용 제한 + 벌목 스킬 구현

요즘 일지를 안쓴지 꽤 됐다... 부지런히 써야되는데...

매일 10분 늦게자더라도 게임 개발 한 후에 짧게라도 쓰는 습관을 들여야 겠다.

 

1. 악세서리 착용 제한

현재 게임에서 악세서리 장비 칸은 두칸이다.

장비 칸 index는 두 가지 구분이 가능하지만, 아이템의 type은 악세서리 하나로 동일하다.

우리 게임에서 악세서리에 할당한 장비는 채집도구, 목걸이 이다.

같은 종류의 악세서리 (채집도구 + 채집도구 , 목걸이 + 목걸이) 의 착용을 제한해야 된다.

 

어떻게 구분할지 좀 고민을 했던 것 같다.

db번호 범위로 구분하고 싶진 않았지만... 결국 이것이 가장 편하고 변수를 적게 쓰는 방법인 듯 하여 이 방법으로 진행하였다.

 

조금 복잡하지만 더 좋은 방법이 생각이 나지 않아 장비 착용 시 실행되는 함수와 장비 해제시 실행되는 함수에 아래의 로직들 추가하였다.

 

<장비 착용 시 실행되는 로직>

  1. db의 번호로 해당 아이템이 목걸이인지 채집도구인지 구분하는 로컬 함수를 선언한다.
  2. 악세서리 종류를 착용시, 목걸이와 채집도구에 할당한 유저변수에 해당 아이템의 고유 id를 저장한다. (가장 마지막에 착용한 각각의 장비의 id가 변수에 저장되는 것)
  3. 장비 칸 악세서리 두 index에 착용된 장비의 악세서리 종류를 1번에서 선언한 함수를 통해 구분 할 때, 만약 두 악세서리의 종류가 같다면, id를 2번에 저장한 변수와 비교하여, 같다면, 같지 않은 칸의 장비를 착용 해제시킨다.
  4. 해제 시킨 칸에 새로운 악세서리를 끼기 전에 끼고 있던 다른 종류의 악세서리 (새롭게 착용한 악세서리에 의해 해제되었을 것이다.) 의 id를 2번 변수를 활용해 불러와 다시 착용시킨다.

장비를 해제했을 때 2번과정에서 유저변수에 저장한 악세서리 id를 초기화 할 필요가 있다. 초기화 하지 않으면 악세서리 착용으로 인한 악세서리 교체 경우 외에도 그냥 유저가 악세서리를 벗고 빈칸에 새 악세서리를 꼈을 때도 자동으로 다른 종류의 악세서리가 착용 될 수 있다. (4번 과정에서 구분이 필요하다.)

 

<장비 해제 시 실행되는 로직>

  1. db의 번호로 해당 아이템이 목걸이인지 채집도구인지 구분하는 로컬 함수를 선언한다.
  2. 악세서리 종류를 해제 시, 목걸이와 채집도구에 할당한 유저변수를 -1 로 초기화 한다. (장비 착용 시 실행되는 로직 때 그 변수가 -1인지 아닌지 조건문을 걸어 4번 로직이 실행 될 것이다.)

 

흠... 아이템 구분에도 장비처럼 acc1, acc2 index구분이 있었으면 참 편했을텐데...

조금 아쉽다...

 

장비칸에 acc1장비칸에는 채집도구만, acc2장비칸에는 목걸이만 착용하도록 하고 싶었는데, 네코랜드 시스템 상 acc1에 먼저 악세서리가 자동으로 착용되어, 인벤토리에 악세서리가 하나만 있는 경우 처리가 불가능 해 이것은 구현하지 못했다.

 

2. 벌목 스킬 구현

채집 스킬 (채광, 벌목, 낚시) 중 가장 쉬운 벌목 스킬부터 건들여 보았다.

 

채광과 벌목의 대상인 광물과 나무는 몬스터로 구분 할 것이고,

낚시는 따로 ui창을 띄워서 진행 할 예정이다.

 

전투 스킬로는 채집 몬스터한테 데미지를 입힐 수 없고, 채집 스킬로는 일반 몬스터에게 데미지를 입힐 수 없도록 해야 하기 때문에,

일반 사냥몬스터와 채광, 벌목 몬스터는 팀태그를 이용해 구분하였다.

 

팀태그로 구분하는 과정에서 한가지 이슈가 있었는데,

네코랜드 프로그램 내에서는 10진수로 구분이 되어 있었는데... 스크립트 상 팀태그는 2의 제곱형태로 구분되어 있었다....

네코독스에서 아래의 설명을 보고... 눈치를 챘어야 됬는데... 데미지 함수가 먹히지 않아 이것저것 디버깅 해보다가 설마 하고 팀태그를 찍어보니... 이상함을 눈치챘다....

-- 팀 태그를 AND 연산하여 동맹 여부를 파악할 수 있습니다.
-- (하나라도 AND 되는 비트가 있을 시 동맹)

 

짜다 보니 데미지 함수가 좀 무거워 진 것 같다...

테스트 해보고 너무 무겁다 싶으면 스킬 경험치 획득이나 스킬 레벨에 따른 보너스스탯 부여는 유닛이 죽었을 때 실행되는 함수로 옮겨야 될 듯 싶다.

다만 여기서는 사용한 스킬dataID를 불러올 수 없어 다소 복잡할 수 있을 듯 하다.