인프런 커뮤니티 질문&답변

고우진님의 프로필 이미지
고우진

작성한 질문수

[유니티 레벨 업!] 모듈식으로 개발하는 스킬 시스템

Effect (2)

텍스트 변환 Mark에 대하여 질문이 있습니다.

작성

·

47

0

EffectAction에서
public string BuildDescription(Effect effect, string description, int stackActionIndex, int stack, int effectIndex)

{

var stringsByKeyword = GetStringsByKeyword(effect);

if (stringsByKeyword == null)

return description;

if (stack == 0)

// ex. description = "적에게 $[EffectAction.defaultDamage.0] 피해를 줍니다."

// defaultDamage = 300, effectIndex = 0, stringsByKeyword = new() { { "defaultDamage", defaultDamage.ToString() } };

// description.Replace("$[EffectAction.defaultDamage.0]", "300") => "적에게 300 피해를 줍니다."

description = TextReplacer.Replace(description, "effectAction", stringsByKeyword, effectIndex.ToString());

else

// Mark = $[EffectAction.Keyword.StackActionIndex.Stack.EffectIndex]

description = TextReplacer.Replace(description, "effectAction", stringsByKeyword, $"{stackActionIndex}.{stack}.{effectIndex}");

return description;

}
여기 부분에서 왜 굳이 스택 0번째 인걸 구분하고 Effect에서 여기에서

public string BuildDescription(string description, int effectIndex)

{

Dictionary<string, string> stringsByKeyword = new Dictionary<string, string>()

{

{ "duration", Duration.ToString("0.##") },

{ "applyCount", ApplyCount.ToString() },

{ "applyCycle", ApplyCycle.ToString("0.##") }

};

description = TextReplacer.Replace(description, stringsByKeyword, effectIndex.ToString());

description = Action.BuildDescription(this, description, 0, 0, effectIndex); // 여기부분에 질문이 있습니다 여기에서 0번째 것을 구분하고

var stackGroups = StackActions.GroupBy(x => x.Stack);

foreach (var stackGroup in stackGroups)

{

int i = 0;

foreach (var stackAction in stackGroup)

description = stackAction.BuildDescription(this, description, i++, effectIndex);

}// 여기에서 1스택이상 스킬의 텍스트를 전부 변환해주는데

return description;

}

 

EffectStackAction에서
public string BuildDescription(Effect effect, string baseDescription, int stackActionIndex, int effectIndex)

=> action.BuildDescription(effect, baseDescription, stackActionIndex, stack, effectIndex);
이렇게 까지 분리해서 텍스트로 변환하는지 여쭤보고 싶습니다.

그냥 0번째부터 텍스트를 변환하면 안되는건지 질문이 있습니다.

 

답변 1

1

Developer G님의 프로필 이미지
Developer G
지식공유자

수강해주셔서 감사합니다.

stack이 0(=기본 Action)일 때는 '$[effectAction.keyword.effectIndex]' 이 형식의 Mark를 쓰게 되구요,
stack이 0 보다 클 때는 '$[effectAction.keyword.stackActionIndex.stack.effectIndex]' 형식의 Mark를 씁니다.
Mark를 이런 식으로 정한건 한 눈에 봤을 때 '기본 Action의 Mark다', '~ Stack의 ~ Index의 Action의 Mark다'라는걸 알아보기 위해서입니다.

if (stack == 0) 이 부분을 없애고 '$[effectAction.keyword.stackActionIndex.stack.effectIndex]' Mark만 쓰도록 통일해도 되지만, 이럴 경우 기본 Action의 Mark도

'적에게 $[effectAction.defaultDamage.0.0.0] 피해를 줍니다.'

이런 식으로 길게 작성해줘야합니다.
개인적으로 이게 싫어서 구분을 해준 것일 뿐 큰 의미는 없습니다.

Mark의 형태와 Mark를 Replace하는 방식은 제 취향에 맞춘 것이기 때문에 강의에서 말씀드렸다싶이 'Mark를 Replace해서 Description을 만드는 방법'만 숙지하신다면 세부적인 부분은 개인 취향에 맞게, 더 낫다고 생각하시면 방향으로 수정하시면되므로 너무 얽매이실 필요는 없습니다.

감사합니다.

고우진님의 프로필 이미지
고우진

작성한 질문수

질문하기