아이템 사용 시 화면에 버프 아이콘(아이콘 + 카운트다운 텍스트)을 띄우는 기능을 구현함. 아이콘 자체는 잘 스폰되고 보였는데, 카운트다운 숫자만 표시가 안 되고 에러가 발생함. 스폰(복제) 직후 코드 실행 순서에 숨어있던 문제였음
UIBuffPanel.ShowBuff에서 버프 아이콘 템플릿을 스폰하고, 곧바로 UIBuffIcon:Init(iconRUID, durationSec)을 호출해 아이콘 이미지와 카운트다운을 세팅하도록 구현함. 실행하니 아이콘은 보이는데 아래 에러가 발생함
[CLIENT] [LEA-2007] AttemptToIndex : 'durationText'을 인덱싱할 수 없습니다. 'durationText'은 nil입니다.
UIBuffIcon.SetDuration (at MyDesk/UIBuffIcon:32)
UIBuffIcon.Init (at MyDesk/UIBuffIcon:21)
UIBuffPanel.ShowBuff (at MyDesk/UIBuffPanel:36)
local iconEntity = _SpawnService:SpawnByEntity(self.buffIconTemplateEntity, "BuffIcon", Vector3.zero, self.buffContentEntity)
iconEntity.UIBuffIcon:Init(itemData.iconRUID, durationSec) -- ① 먼저 호출
iconEntity:SetEnable(true) -- ② 그 다음 활성화
durationText는 UIBuffIcon.OnBeginPlay에서 GetChildByName으로 찾아 채워주는 값인데, 정작 Init(①)이 활성화(②)보다 먼저 호출되고 있었음
이 프로젝트에서 이미 확인해뒀던 사실이 있었음 — "템플릿은 평소 Enable=false라 스폰된 복제본도 비활성 상태로 시작하고, OnBeginPlay는 SetEnable(true)로 활성화된 뒤에야 실행된다." 즉 ①번 시점엔 OnBeginPlay가 아직 안 돌아서 durationText가 nil인 채로 남아있었고, 그 상태에서 SetDuration이 durationText.Text = ...를 시도하다 터진 것
활성화와 데이터 주입 순서를 맞바꿈
local iconEntity = _SpawnService:SpawnByEntity(self.buffIconTemplateEntity, "BuffIcon", Vector3.zero, self.buffContentEntity)
iconEntity:SetEnable(true)
iconEntity.UIBuffIcon:Init(itemData.iconRUID, durationSec)
OnBeginPlay가 실행된다"는 조건이 있는 프로젝트에서는, 스폰 → 활성화 → 데이터 주입 순서를 항상 지켜야 한다는 걸 명문화함SetDuration → Init → ShowBuff 순으로 찍힌 스택을 거슬러 올라가며 "어디서 최초로 nil이 만들어졌는가"를 찾는 방식으로 원인을 좁힘