디시인사이드 갤러리

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

갤러리 본문 영역

[📜일지] 좀비키 9. ScriptableObject로 Prefab 간 의존성 설정

뒷도갤로그로 이동합니다. 2022.08.15 11:53:08
조회 887 추천 14 댓글 14
														






예전에 댓글로 좀비키에서 ScriptableObject 어떻게 활용했는지 궁금하다고 했던 이야기도 있었고,

최근에 ScriptableObject를 왜 쓰는지 모르겠다... 이런 글도 많이 있었던 것 같아서

이번 개발일지는 좀비키의 ScriptableObject의 활용 사례 중 하나를 소개할까 해.



7ded9e36ebd518986abce8954f8474690f

좀비키의 “키”에 해당하는 플레이는 단순하게 Lock과 Key로 구성되어 있어.

Lock은 특정 타입의 Key를 몇 개 먹어야 하는지 보여주고,

다 먹은 상태로 가까이 가면 문이 열리는 식으로 동작하게 되어있음.




7dec9e21ecd418986abce89547877c642cb038

플레이어가 Key를 먹을 때 숫자를 올리고,

그에 해당하는 Lock을 깜빡이게 하는 단순한 기능이야.




7def9e36ebd518986abce8954582766ae4

Key와 Lock은 여러 종류가 있고, 종류에 맞게 동작해야 해.





7deb9e36ebd518986abce8954589766fb9

각각의 Key와 Lock을 종류별로 모두 Prefab으로 만들고

각 스테이지, 즉 Scene에 배치하기로 했어.





7dea9e36ebd518986abce8954588726bd6

이렇게 하고 보니, Key와 Lock 간의 상호작용을 Scene 별로 연결해줘야 해.

플레이어가 Key를 먹을 때 Key GameObject에

OnPickUp이라는 UnityEvent를 발생시키도록 만들었는데,

여기에 Lock GameObject를 끌어와서 Count라는 함수를 부르게 해야 했음.


문제는 Key와 Lock의 종류도 많아지고,

Key의 배치도 레벨 디자인하면서 바꾸고 하니까 자꾸 실수하게 되고 번거롭더라고.




7de59e36ebd518986abce8954789726a72

그러다 그냥 Prefab끼리 의존성을 연결하면 안 될까? 라는 생각을 하게 됨.





7de49e36ebd518986abce8954288756f5c

하지만 이건 안 돼.

Prefab을 Scene에 배치할 때 생성되는 GameObject는 그냥 Prefab의 복제본일 뿐이라서,

이 상태로 Scene에 배치하면 엉뚱하게 Lock GameObject가 Key Prefab이랑 연결되거든.





7ced9e36ebd518986abce89545817c6c83

이때 Key Prefab과 Lock Prefab을 연결해주는 장치로 ScriptableObject를 사용할 수 있어.

Slot이라는 ScriptableObject를 만들고, OnPickUp 시에 Slot의 Count를 호출하면,

Slot은 OnCount를 불러서 Lock에 이 이벤트를 전달하게 만들었어.


코드도 아주 단순해.

using System;
using UnityEngine;

[CreateAssetMenu(fileName = "LockCountSlot", menuName = "Zignpost/LockCountSlot")]
public class LockCountSlot : ScriptableObject
{
public event Action OnCount;

public void Count()
{
OnCount?.Invoke();
}
}


Lock 쪽에선 그냥 OnEnable / OnDisable에 OnCount 이벤트에 Count 핸들러를 연결하기만 하면 돼.

public class LockCount : MonoBehaviour
{
[SerializeField] private LockCountSlot slot;

void OnEnable()
{
slot.OnCount += Count;
}

void OnDisable()
{
slot.OnCount -= Count;
}

private void Count() { /* 구현 */ }
}





7cec9e36ebd518986abce8954383706864

ScriptableObject는 Asset이기 때문에

GameObject든 Prefab이든 구분 없이 의존하더라도 똑같은 개체거든.

그래서 이 상태로 Prefab을 Scene에 배치하면





7cef9e36ebd518986abce8954384736d7d

새로 생성된 GameObject들은 똑같은 ScriptableObject를 참조하게 되고. 둘은 잘 연결돼.


이렇게 하면 Key는 Key대로, Lock은 Lock대로 Scene에 배치하면 알아서 서로 잘 동작하고,

단순히 귀찮음을 줄여준 것 이상으로 편리했던 것은

Slot이 “숫자 세는 로직”을 분리해서 가지고 있으니까

디버깅용 기능을 만들기도 편리했음.




정리

ScriptableObject는 내가 작성한 코드를
Asset의 형태로 실행할 수 있다는 것이 가장 큰 장점이 아닐까 싶어.

그리고 설계에는 항상 장단점이 있는 법이니까 어떤 방법을 무조건적으 쓰겠다,
이게 아니라 그 설계의 장단점을 이해하고 내 상황에 잘 맞게 쓰는 것이 중요하다고 생각함.


ScriptableObject 활용에 관심있으면 예전에도 한 번 소개한

이 영상을 추천해.




1ebec223e0dc2bae61abc5fb06df231d2b7022a8308bc8f2e5315f

https://store.steampowered.com/app/1167150/Zombies_and_Keys/

좀비키도 꼭 찜해주세요.




자동등록방지

추천 비추천

14

고정닉 6

0

댓글 영역

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

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 말머리 제목 글쓴이 작성일 조회 추천
2863 설문 시세차익 부러워 부동산 보는 눈 배우고 싶은 스타는? 운영자 24/05/27 - -
2862 AD 희귀 정령 획득 기회! <아스달 연대기> 출석 이벤트 운영자 24/05/23 - -
159490 공지 인디 게임 개발 갤러리 규칙 - 질문 전 필독!! [25] 에뚜갤로그로 이동합니다. 24.05.10 595 3
52873 공지 게임제작 초심자를 위한 글 모음 [9] Goranic갤로그로 이동합니다. 20.07.02 63745 51
123789 공지 뉴비 개임개발 하려는데 뭐부터 해야하나요 복사본 [14] 흉황갤로그로 이동합니다. 23.04.11 11877 19
160887 💬 일주일째 같은 부분 계속 맴돌면서 수정중 ㅆㅇㅆ(124.216) 03:47 4 0
160886 💬 게임이 생각보다 어려워짐 [2] 사슴발레리나갤로그로 이동합니다. 03:24 37 0
160885 📜일지 Moe Moe Island 일지 115 [4] 개발하는똥개갤로그로 이동합니다. 02:59 46 4
160883 💬 내가 만든 웹싸이트 평가부탁 좀 해주세요 [2] 오오ㅗㅇ(222.233) 02:39 61 0
160882 💬 첫 플레이엑스포 후기 허당갤로그로 이동합니다. 02:34 66 0
160880 💬 구글 플레이스토어 프로덕션 신청 반려됨.. ㅇㅇ(58.225) 01:44 60 0
160879 💬 이번 겜 망하면 디엘가서 야겜이나 만들어야겠다 [1] ㅇㅇ(49.143) 01:40 86 1
160878 💬 내가 좀 게임들 잘안다하는 인붕이 있니 [6] ㅇㅇ(39.115) 01:15 155 0
160877 📜일지 개발일지1 [4] 잉싯잉갤로그로 이동합니다. 00:21 131 2
160876 📜일지 Frostory 풀 움직임 개선 [2] 특수한발가락갤로그로 이동합니다. 00:07 221 12
160873 💬 혹시 컴 견적 좀 봐주실 분 [8] ㅇㅇ(61.75) 05.26 176 0
160872 🐣질문 팀원이 구매한 에셋 사용해서 출시하면 문제생김?? [3] ㅇㅇ갤로그로 이동합니다. 05.26 152 0
160871 💬 오늘 낮에왔던 소득세 빌런인데 [11] ㅇㅇ(175.212) 05.26 260 0
160870 💬 유니티 개발하는데 도와주세요 [2] ㅇㅇ(220.72) 05.26 161 1
160869 💬 씬뷰랑 카메라뷰 이펙트 밝기 다른거 질문점; [2] ㅇㅇ(14.52) 05.26 52 0
160868 🐣질문 Probuilder 관련 질문 [2] ㅇㅇ(58.228) 05.26 60 0
160867 🐣질문 아트 디자인을 간단하게 만들고 게임부터 먼저 만들어도 되나요? [7] ㅇㅇ(219.241) 05.26 160 0
160866 🎈행사 PlayX4 행사 마무리하고 쓰는 참가 후기 (B2B,B2C 참가) [3] 香風智乃갤로그로 이동합니다. 05.26 210 3
160865 💬 플레이엑스포는 즐거웠나 인갤? [3] ㅐㅐㅋㄷ갤로그로 이동합니다. 05.26 201 1
160864 🐣질문 포톤 vs 넷코드 뭘로할까..? [1] ㅇㅇ(58.143) 05.26 80 0
160863 🐣질문 게임 개발 관련 지식 없는데 1인 개발에 욕심좀 부려도 됨? [13] ㅇㅇ갤로그로 이동합니다. 05.26 273 0
160862 💬 너네 브금은 뭐 쓰냐? [1] ㅇㅇ(180.67) 05.26 96 0
160861 🐣질문 언리얼 레벨스트리밍 질문 좀 ㅇㅇ(1.228) 05.26 48 0
160860 💬 플레이엑스포 방문해주신 모든 분들께 감사드려요! ; x;) [2] 토끼는너무귀여워갤로그로 이동합니다. 05.26 239 3
160859 📜일지 좌충우돌 위기일발 게임개발 타임어택 (진짜完) [2] hyuckkim갤로그로 이동합니다. 05.26 191 4
160858 💬 중력 적용 안되는거같은데 왜이럴까 미치겠네진짜 [2] ㅇㅇ(121.134) 05.26 91 0
160856 💬 팀플 터트림 [2] ㅇㅇ(121.139) 05.26 203 0
160855 📜일지 "여우는 오늘도 친구를 구한다" 개발일지 #11 + 퍼블리싱 [10] wisen갤로그로 이동합니다. 05.26 395 11
160854 🐣질문 Boing Kit vs Dynamic Bone [1] ㅇㅇ(118.44) 05.26 61 0
160853 🐣질문 유니티 질 문질문질 [7] ㅇㅇ(39.115) 05.26 179 0
160852 💬 지프 바넷 강연 내용이 요기 있다네요 [3] longZam갤로그로 이동합니다. 05.26 210 2
160851 💬 원피스 해적무쌍,진 삼국지 이런건 언리얼임? [3] ㅇㅇ(120.142) 05.26 116 0
160850 💬 아래 기술서전16 Unity 검색결과 [1] 불타는키보드갤로그로 이동합니다. 05.26 96 0
160849 📜일지 DEMONICA) TPS로 전환, BIC 데모 제작 및 개발 현황 [23] 한달충갤로그로 이동합니다. 05.26 471 25
160848 💬 팀원 구한다고 여기저기 다니다 두달 까먹었네 [7] ㅇㅇ갤로그로 이동합니다. 05.26 298 0
160847 💬 오늘 지프 바넷 아저씨 동문서답 = 명언 남기셨다. [4] ㅇㅇ(121.139) 05.26 267 2
160846 💬 인디게임도 가격 2,3배씩 올리자 ㅇㅇ(121.130) 05.26 184 0
160845 💬 인디게임 개발자라면 이런 게임을 만들어야한다 [1] 이백만갤로그로 이동합니다. 05.26 345 0
160844 💬 와 그래프뷰라는 좋은게 있었구나 [1] ㅇㅇ갤로그로 이동합니다. 05.26 155 0
160843 💬 내가 잘못찾겠어서 그런데 한국엔 이런 사이트 없냐 [5] ㅆㅇㅆ(124.216) 05.26 343 0
160842 💬 플머인데 걍 에셋 떡칠 간다 [1] 이백만갤로그로 이동합니다. 05.26 200 0
160841 💬 인앱 없이 광고만 달아서 천만원 수익 [10] ㅇㅇ(116.33) 05.26 291 0
160840 📚정보 동인지 사러 갔다옴 [4] MAYONEZU갤로그로 이동합니다. 05.26 285 4
160839 💬 인디터같은곳으로 팀꾸려서 성공한팀있어? ㅇㅇ(59.11) 05.26 141 0
160838 💬 플엑 4일동안 씹고뜯고 다했다 [6] 아기원딜갤로그로 이동합니다. 05.26 249 0
160837 💬 샷건 맞을 시 몸에서 피나오면서 터지는 연출 등장하면 ㅇㅇ(59.6) 05.26 106 0
160836 📜일지 [5/26] 전투 배경 작업 마무리 및 UI 세팅 [8] 로니갤로그로 이동합니다. 05.26 249 4
160835 💬 스트리트 파이터 스크롤 시도 [5] 뚜시갤로그로 이동합니다. 05.26 167 2
160834 💬 림월드 같은 게임을 타이난 실베스터가 고도로 힘들다고 한 이유 [8] ㅆㅇㅆ(124.216) 05.26 557 9
160833 💬 겜메8로 디시하기 [1] 우힝랄갤로그로 이동합니다. 05.26 185 1
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2