디시인사이드 갤러리

마이너 갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

[📚정보] 유니티 '스크립터블 오브젝트' 활용 (답변)

야유요갤로그로 이동합니다. 2024.04.26 02:39:20
조회 635 추천 16 댓글 10
														

-






스크립터블 오브젝트는 말이 너무 길어서

"SO" 정도로 줄여서 표현할게요.




목차

0. 서론

1. SO, 왜 쓰는가?

2. 활용 시 지니는 생각

3. 생각의 흐름

4. 일지에 쓴 SO 설명

5. 6줄 요약







0. 서론


며칠 전 썼던 개발 일지에 한 분이 질문 달아주셨는데,

답변이 좀 길어져서 쓰는 글이에요.


해당 글:

https://gall.dcinside.com/mgallery/board/view?id=game_dev&no=158098




질문해 주신 내용을 보고,


'SO 사용법은 봤는데,

다른 구조에 적용하려고 보니 감이 안 잡혀서

적용 예시가 필요한 상태.'


정도로 이해했어요.


그래서 제가 어떤 생각으로 사용하고 있는지 적으려고 해요.


저도 초보라, 이보다 좋은 활용 방법이 많고

아예 틀린 내용이 있을 수 있지만,

처음에 감을 잡는 데에는 도움이 될 수 있다고 생각해요.






1. SO, 왜 쓰는가?


이건 이미 아시는 내용일 수 있지만,

저는 원래 목적에서 약간은 변질된 목적을 생각하며 사용하고 있는 듯 해서

원래 목적을 먼저 짚고 가려고 해요.



만약 몬스터를 만든다고 가정할 때,

몬스터의 정보(ex: 체력, 공격력, 방어력... 등등)를

아래처럼 변수로 넣어둘 수가 있는데,


24b0d121e09c28a8699fe8b115ef0469933df0


이런 스크립트 넣은 오브젝트가 많아지면...


24b0d121e09c28a8699fe8b115ef04699431f2bc


이 정도 크기의 스크립트 정도는 괜찮지만,

변수가 아주 많아진 스크립트가 수백, 수천개로 늘어나면

컴퓨터가 메모리 관련해서 힘들어할 거예요.


이때 컴퓨터를 덜 힘들게 하기 위해

SO라는 에셋에 정보를 모아서 담아두는 거예요.

아래 그림처럼요.


*대괄호 속 내용이 메모리 차지


viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ce983fa11d0283107ab5cf91d66c5d1ce22a4f13c0c60fdb93e79e8dfcd3a53a7290429108a7e72b97c954b9dc3398efc6835069fd355590624e27d


이렇게 SO를 추가해 '몬스터A'의 주소만 표시하면

대괄호 속 내용의 양을 줄일 수가 있는 거죠.






2. 활용 시 지니는 생각


위 예시처럼 SO를 사용하면, 스크립트와 인스펙터는 이렇게 돼요.


24b0d121e09c28a8699fe8b115ef04699638fe24b0d121e09c28a8699fe8b115ef0464d285e2

이걸 보고, 저는
'SO가 마치 줄임말 같다'라는 생각을 했어요.


'공격했을 때

공격력, 체력, 방어력... 등등을 가져오기 귀찮다.

그런데 이 정보들을 SO에 담아두면 monsterA만 넘겨주면 된다.'


이런 마인드예요.


위 [ 1. SO, 왜 쓰는가? ]에 적힌 이유는 오직 '메모리'인데,

막상 이용할 때는 '줄임말'로 쓰게 돼요.

줄임말로써 SO를 쓰다 보면 어느새 메모리 이득을 보고 있게 되더라고요.






3. 생각의 흐름


앞의 내용을 토대로 제가 SO를 쓸 때

하는 생각의 흐름을 간략하게 적어 볼게요.


일지에 적혀있는 직접 사용한 축복이나 장신구 데이터 설명은

아래 [ 4. 내가 쓴 SO 설명 (일지 내용) ] 에 있어요.



1) 불편함을 미리 감지

무언가 구현하기 전에 미리 불편할 상황을 상상해 보고,

불편함을 감지했다면 데이터(SO)를 만드는 거예요.


아래는 ItemData라는 SO를 만들기까지의 생각 예시예요.


ex1: "인벤토리에서 한 슬롯을 선택 중이라면,

선택 중인 아이템 정보를 툴팁에 띄워야겠어."

-> 필요한 정보가 아이템 이름, 설명, 그림... 뭐가 많네?

-> '불편하다'

-> SO "ItemData" 생성


ex2: "이 아이템을 착용한 상태라면,

아이템의 추가 능력치를 플레이어에게 적용해야겠어."

-> 필요한 정보가 아이템의 공격력, 체력, 방어력... 뭐가 많네?

-> '불편하다'

-> SO "ItemData" 생성


ex3: ...


이런 예시들 중 하나만 있어도

SO를 만들 가치는 충분하다고 생각해요.


반대로 이런 불편함이 여러 가지로 예상된다면

SO를 가능한 빨리 만들어야겠지요?




2) 데이터 생성의 선택지

한 가지 목표에도, 여러 가지 방법으로 데이터(SO)를 만들 수 있는데,

따로 정답이 있는 건 아니에요. 하지만

다양한 방법 중 본인 or 팀에게 맞는, 쓰기 편한 게 최고예요.


ex: 아이템을 강화하면,

붙어있는 능력치가 올랐으면 좋겠어.

방법 I. 강화한 버전의 아이템(ItemData)을 추가해서, 강화하면 아이템을 바꿔주기.

방법 II. 강화할 능력치가 담긴 ReinforceData(SO)를 새로 만들어서, 강화하면 아이템이 담긴 슬롯에 해당 강화 데이터(ReinforceData) 넣어주기.

+) 추가로, ItemData에 이 아이템에 붙일 수 있는 강화 목록(ReinforceData[])을 넣어줄 수도 있어요.

방법 III. ...



당연히 앞으로 개발할 방향에 따라 방법이 어느 정도 정해지겠지만,

경우에 따라 '이 방법 말고 저 방법으로 할걸 ㅠㅠ' 하고 후회할 수 있으니

나름 신중하게 고민하는 것을 추천해요.


다시 바꾸는 건 귀찮거든요.

물론 진심으로 후회가 될 때는 바꾸면 그만이긴 합니다.




+) 생각나면 바로 생성

내용을 줄일 수 있는 게 생각나면

아래처럼 ~~Data 형태로 계속 만들고 있어요.

몇 개 없다고 생각했는데, 꽤 많아졌더라고요.


24b0d121e09c28a8699fe8b115ef046c69f92c48






4. 일지에 쓴 SO 설명


어쩌면 글의 핵심이 될 내용이네요.


이제는 일지에 보였던 축복, 장신구, 보석 데이터에서

특징적인? 요소들 몇 개만

왜 그렇게 만들었는지 간단히 설명 붙이면서, 글 마무리할게요.



- 축복 데이터 (예시)

24b0d121e09c28a8699fe8b115ef04699d3ef0ba


Blessing Type: 정보 창 글자 색을 위한 변수.

보여질 축복 리스트 정보 창의 정렬을 위해 쓸 지도 몰라서,

이름을 Color 아닌 Type으로 했어요.

+) 열거형 자료형 enum 사용했어요

24b0d121e09c28a8699fe8b115ef046a7d6aef


- type buff

24b0d121e09c28a8699fe8b115ef046c60f92a49


- type debuff

24b0d121e09c28a8699fe8b115ef046a786fef


- type epic

24b0d121e09c28a8699fe8b115ef046a756be9



int[] Blessing Value: 축복 레벨에 따른 적용 값

24b0d121e09c28a8699fe8b115ef046c68f52d4f






- 장신구 데이터 (예시)

24b0d121e09c28a8699fe8b115ef046c60f92d4b9a


장신구 데이터는 얼핏 보면... 복잡해 보이는데요.


장신구에 끼운 보석에 따라 적용될

축복 리스트 + 장신구 그림.

이 2개를 담아둔 것이 전부입니다.


한 마디로 '이 장신구를 끼면 어떤 축복들이 적용될 것인가'

를 위한 데이터예요.




축복 리스트(Blessing Datas Amount): (축복 데이터+축복 레벨)[]

어떤 축복이 몇 레벨씩 적용되는지 체크.

24b0d121e09c28a8699fe8b115ef046c65f32946


Blessing List_empty Gem: 보석을 미착용한 상태의 축복 리스트

24b0d121e09c28a8699fe8b115ef046c60f22f4d




이제 착용한 보석이 뭔지 알아야 하는데,

보석은 색과 레벨로 나뉘기 때문에


Gem Color List에 있는 Gem Color 보석의 색깔을,

Blessing Lists_by Gem Lvl의 인덱스로 레벨을 구분해요.

결국 그 안에는 해당 보석을 꼈을 때의 축복 리스트가 있어요.

24b0d121e09c28a8699fe8b115ef0468e1adecb2

Gem Color List에 있는 Sprite Accessory With Gem에는

그 색 보석을 착용한 장신구의 그림이 들어가요




- 보석 데이터 (예시)

24b0d121e09c28a8699fe8b115ef046ecd4dc2f7


Gem Color_index: 위의 장신구 데이터에서 Gem Color List를 통해 축복 리스트를 얻어내야 하는데,

매번 for문 같은 거 돌려 '이 리스트가 이 보석이랑 같은 색인가?'를 쓰기가 좀 거시기해서 추가했어요.


Item_gem: 보석은 장신구에 장착하는 '보석'이기도 하면서, 인벤토리에서도 존재하는 '아이템'이에요.

그래서 GemData도, ItemData도 존재해요. 타고 타고 들어가는 게 편할 거 같아서

ItemData에도 보석 데이터를, GemData에도 아이템 데이터를 양쪽 다 넣어 두었어요.


Next Level Gem: 보석을 세공해 업그레이드할 때, 건네줄 다음 레벨의 GemData예요.






5. 6줄 요약


1. SO를 쓰는 원래 목적은 메모리 때문이에요.

2. 근데 저는 그냥 줄임말이라고 생각하는 게 편하더라고요.

그렇게 쓰다 보면 어느새 원래 목적에도 맞게 되거든요.

3. 불편함을 미리 감지해 SO를 만드는데,

다양한 방법 중 본인 or 팀에게 맞는, 쓰기 편한 게 최고예요.

4. 제가 쓴 것들 풀이예요.






쓰다 보니 글이 꽤 길어졌네요...


긴 글 읽어주셔서 감사합니다.










자동등록방지

추천 비추천

16

고정닉 5

0

댓글 영역

전체 댓글 0
등록순정렬 기준선택
본문 보기
자동등록방지

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 말머리 제목 글쓴이 작성일 조회 추천
2858 설문 SNS로 싸우면 절대 안 질 것 같은 고집 있는 스타는? 운영자 24/05/06 - -
154955 공지 주딱호출벨 [65] 에뚜갤로그로 이동합니다. 24.03.14 1436 2
114838 공지 🐣질문 글엔 말머리를 답시다🐣 [9] 로도타갤로그로 이동합니다. 22.12.15 4234 8
52873 공지 게임제작 초심자를 위한 글 모음 [9] Goranic갤로그로 이동합니다. 20.07.02 62419 50
123789 공지 뉴비 개임개발 하려는데 뭐부터 해야하나요 복사본 [14] 흉황갤로그로 이동합니다. 23.04.11 11073 16
108991 공지 인디게임개발 갤러리 규칙 - 질문 전 필독!! [23] 로도타갤로그로 이동합니다. 22.09.30 11630 17
159202 💬 uv스크롤링 잘못된거같은데 머가 문제일까요? [4] ㅇㅇ(211.216) 03:43 18 0
159201 🐣질문 플레이어와 카메라사이의 벽 투명화하기 (해결) [1] ㅇㅇ(183.100) 02:48 31 0
159200 🐣질문 이거 텍스트 스크립트 어떤거임? [1] ㅇㅇ(121.130) 02:45 34 0
159199 🐣질문 코드중에 이해가 안되는 부분이 있어요.. [2] 초보..(180.224) 02:29 64 0
159198 💬 늅]유니티선 코루틴 있으니까 [4] ㅇㅇ(114.204) 01:41 85 0
159197 💬 판타지 생존게임 만들고싶음 게임추천좀 [1] ㅇㅇ(211.211) 01:28 64 0
159196 🐣질문 크몽 프로그래밍 외주는 어떰? [3] CSL_갤로그로 이동합니다. 01:25 102 0
159195 💬 내가 봐도 허접한데 [5] ㅇㅇ(221.166) 00:05 174 0
159194 🐣질문 cytus같은 리듬게임 구현하는데 겹치는 노트 판정 질문좀요.. [4] ㅇㅇ(1.251) 05.05 107 0
159193 📢홍보 남성향 미소녀 캐릭터 일러스트 그립니다 외주&커미션&구직합니다 ! [1] SineSok갤로그로 이동합니다. 05.05 149 0
159192 🐣질문 로그라이트같은 게임 맵 생성할때 템플릿 관리는 어떻게하는게 좋을까요 [2] ㅇㅇ(210.90) 05.05 144 0
159191 💬 Stride << 쓰는 사람 있냐 [3] ㅇㅇ(118.44) 05.05 120 0
159189 🐣질문 rpg게임 주인공이 여자면 [11] ㅇㅇ(121.66) 05.05 184 0
159187 💬 루아 개어렵네 [1] ㅇㅇ(118.221) 05.05 93 0
159186 📚정보 개발효율 300% 올리는 꿀팁 [3] ㅇㅇ(122.252) 05.05 262 0
159185 📜일지 횡스크롤 슈팅 게임 개발일지 7주차 - 적 경계 & 암살 & 디테일 [6] 등록금내야해갤로그로 이동합니다. 05.05 161 7
159184 📜일지 랜덤 코어 디팬스 - 스팀 출시 일지 #1 트레일러 [2] 단바바갤로그로 이동합니다. 05.05 134 3
159182 💬 일본에도 고도단이 잇네 [3] ㅇㅇ(211.213) 05.05 134 0
159181 📜일지 [Unity] 블록 스태킹/낙하물 퍼즐 게임 개발 -1- ㅇㅇ(218.158) 05.05 116 1
159180 🐣질문 C# 어린이 코드질문 받아줘.. [6] 노면˙갤로그로 이동합니다. 05.05 161 0
159179 🐣질문 외부 라이브러리 스크립트 볼 때 왜 자꾸 이 지랄 나는지 모르겠음 ㅇㅇ(222.98) 05.05 60 0
159178 🐣질문 git 잘못쓰다 파일 날라갔는데 이거 어캄? [23] ㅇㅇ(222.238) 05.05 184 0
159177 💬 언리얼 쓸 때마다 느끼는건데 [6] ㅇㅇ(125.244) 05.05 200 0
159176 🐣질문 렌파이 이미지만 올리면 오류가 떠요... ㅜㅜ [2] ㅇㅇ(118.221) 05.05 78 0
159175 💬 맵 가장자리 표현 어떻게 자연스럽게 할까 [3] 던전앞갤로그로 이동합니다. 05.05 210 0
159174 💬 게임 개발의 80%는 재미없는거로 이루어져 있다... [5] ㅇㅇ(175.208) 05.05 272 0
159173 🐣질문 자체엔진 다이렉트x11c++로 미니맵 검은화면을 밝히고싶은데 아이디어좀 [8] ㅇㅇ(182.217) 05.05 143 0
159172 💬 게임이 하나도 안팔리면 [17] 빈즈게임갤로그로 이동합니다. 05.05 427 0
159170 💬 스팀게임 출시하는 친구들은 광고 어떻게 함? [6] ㅇㅇ갤로그로 이동합니다. 05.05 247 0
159169 💬 혹시 페이스북에 광고하려면 [2] ㅇㅇ(115.137) 05.05 103 0
159168 🐣질문 언리얼 크로마키 오브젝트 구현에 대해 질문 좀 받아줘! [4] ㅇㅇ(125.186) 05.05 97 0
159167 💬 게임그래픽 카툰풍으로한거 후회된다 ㅠㅠ [31] ㅇㅇ(125.132) 05.05 438 0
159166 💬 코드를 단순하게 적는건 잘못된 습관인가 [13] ㅇㅇ(114.202) 05.05 282 0
159165 💬 아트 꿈나무들에게 바치는 짤 [1] ㅇㅇ(1.246) 05.05 331 1
159164 💬 와 여기 가입안해도 글 쓸 수 있구나 [4] ㅇㅇ(116.127) 05.05 195 3
159163 💬 개노잼 노답게임 밸런스 조금 작업했더니 [3] ㅇㅇ(219.250) 05.05 194 0
159162 💬 아트 루키들만 봐주라 [27] ㅇㅇ(14.55) 05.05 431 2
159161 💬 확실히 기획은 재능의 영역이 맞다 [8] ㅇㅇ(115.137) 05.05 325 0
159159 🐣질문 유니티 대체 에디터랑 빌드랑 결과가 달라지는건 뭐 어쩌잔거임????? [13] ㅇㅇ(112.148) 05.05 282 0
159158 💬 노재능의 오늘의 아트 수련 [14] ㅇㅇ갤로그로 이동합니다. 05.05 424 2
159157 💬 나도 게임 아이디어 올려본다 [5] 토끼주문갤로그로 이동합니다. 05.05 208 1
159156 🐣질문 재밌는 게임을 만들기 위한 책 추천좀 부탁드립니다 [6] ㅇㅇ(120.142) 05.05 205 0
159155 💬 게임을 하긴 해야 하잖아 몇 시간까지 연구 공부로 봐 줌? [8] ㅇㅇ(121.155) 05.05 188 0
159154 🐣질문 프로그래밍 할줄 모르면 개발하는데 기간 오래잡아야함? [15] ㅇㅇ(121.186) 05.05 385 0
159153 💬 라프코스터의 재미이론 이 책 읽어본사람 [3] ㅇㅇ(120.142) 05.05 183 0
159152 💬 반헬싱이라는 영화 아는 사람? [2] ㅇㅇ(59.6) 05.05 220 0
159151 💬 아트 이런식으로 해도 됨? [5] ㅇㅇ(59.6) 05.05 285 0
159150 🐣질문 트레일러 제작 다들 어떻게 하시나요 [3] 단바바갤로그로 이동합니다. 05.05 205 0
159149 💬 게임외주는 웬만하면 하지마 [11] ㅇㅇ(119.204) 05.05 527 1
159148 🐣질문 OnCollision 질문 [6] ㅇㅇ(115.21) 05.05 172 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2