-계기
text컴포넌트에서 html태그를 활용하여 글자색을 바꾸는 등, 글자를 꾸미거나 할수 있다. 하지만, 많은 기능을 제공하지 않고 있고, text mesh pro를 사용하여야 원하는 태그를 사용할수 있다. 그래서 text를 이용하여 tmp에서 제공하는 태그 기능을 만들어 볼수 있지 않을까? 생각하여, parser를 만들어 보았다. 거두절미하고, 결과는 만들기 어렵다(가능하지만, 투자시간이 너무 오래걸리고, 기존에 계획했던 방식으로는 할수 없었다)였다. 특정 text를 클리하였을 때, 이벤트를 주고 하려면 그text의 coordinate값이 필요한데, text에서는 없고, tmp에서는 인덱싱 별로 좌표값을 받고 있었던것이었다..물론 방법을 꾸준히 찾다 보면 있을수도 있겠지만, 나는 스택계산긴를 활용하여 태그, 태그의 타겟 text, 태그를 제외한 텍스트 등으로 그룹핑한것으로 만족하도록 하겠다.
시작으로 텍스트 컴포넌트가 붙어 있는 오브젝트의 text값을 가져와 regex(정규표현식)으로 바꿔서 <>/별로 나눠 준다.
이렇게 나눴을 경우, 텍스트는 chunk로, 태그는 글자별로 나뉜다.
예) welcome <pop>to study world</pop> => [welcome], [<], [pop], [>], [to study world], [<], [/], [pop], [>]
정규표현식으로 나누어진 토큰들을 queue에 넣어주고(앞에서부터 차례대로 판별 해줄 것이기 때문 - 스택 계산기 참조)
앞서 나온 형태는 tag에서 잘게 나뉘기 때문에, 다시 stringList에 넣어주도록 한다. end 토큰이 나올 때까지 stringList에 텍스트 토큰과 다듬어진 tag토큰을 넣어준다.
예) welcome <pop>to study world</pop> => [welcome], [<pop>], [to study world], [</pop>]
tag token들을 하나로 묶는 과정.
stringList에 있는 토큰들을 태그의 마지막이 나올때까지 계속 넣어 준다. 중간에 다른 태그가 섞여 들어간 경우 이를 구분해준다.
예) stringList([welcome], [<pop>], [to],[<color=red>], [study world],[</color>], [</pop>]) => resultList([welcome], [to],[<color=red>], [study world], [</color=red>]), tagTargetList([to],[study world])
위에서 나온 tag값은 현재 일반 string으로 tag만 주었지만, 필요 태그가 많아 질경우 enum으로 처리해주는게 좋다고 생각한다.
스택계산기의 경우 후위계산으로 바꾸고 이를 위해 우선순위 설정을 해줘야하여 stack으로 연산자를 따로 저장해두는 방법과 달리 태그는 첫지점과 끝지점을 파악만 해주면 되므로 queue의 활용이 더욱 중요했다고 생각한다.
'Game Dev > Unity' 카테고리의 다른 글
Unity로 배우는 game dev architecture : Part1_SOLID (0) | 2023.03.18 |
---|---|
자율 회로 조립 시뮬레이션 개발 정리 (0) | 2023.02.12 |
wifi로 unity 빌드 하는 법-초간단 (1) | 2023.01.08 |
Scriptable Object 개요 (1) | 2022.10.03 |
오브젝트 풀링/Object Pooling (0) | 2022.05.13 |