2025. 1. 6. 14:51ㆍ카테고리 없음
포션을 사용할떄 인벤토리에 들어가서 사용하기를 누를려고 하니 너무 번거로운거 같아서 포션창을 화면에 옮겨서 사용하기 편하게 만들기 위해서 만들었다.
위 사진과 같이 포션창이 잘 뜨는게 확인되고 버튼을 클릭 했을때 체력이 회복되는것이 확인이 됐다.
첫번째 문제
기능은 잘 구현이 됐지만 문제점이 있다. 포션을 획득했을때 포션창을 업데이트 해줘야하는데 그걸 업데이트 해줄때 포션창을 지웠다 다시 보여주게 만드니 화면의 최상단으로 올라와서 다른 UI보다 먼저 보이는 문제점이 있다.
(위 사진은 상점에서 아이템을 구매했을때의 사진인데 포션창을 보면 상점 UI보다 위에 있는게 보일것이다.)
Canvas에서 포션창을 만들어 줄때는 위와같이 업데이트를 해줘야해서 Canvas가 아닌 HUD로 바꿔서 작업을 해볼려고 한다.
두번째 문제
해당 코드를 HUD에 생성되게 코드를 수정했는데 오류가 하나 떴다.
오류를 해석해보니 영구적인 부모로 객체를 인스턴스화할 수 없습니다. 라고 해서
GameObject obj = Instantiate(objCell);
obj.transform.SetParent(mpPotion);
위와같이 분리를 시켜서 코드르 작성하니 이제는
부모 위치를 함부로 움직일 수 없다는 오류메세지가 뜨네.....
위와같이 오류가 나는 이유가 코드가 가리키고 있는 애가 프리펩을 가리키고 있던가 아니면 DontDestroyOnLoad가 되어있으면 위와같은 오류가 뜬다고 해서 해당 프리펩을 동적으로 생성되게 코드를 수정했다.
세번째 문제
HUD스크립트에서 동적으로 포션칸을 생성해준 다음에 ItemManager에서 호출하게 만들었다.
GameObject uiPotionObj = Resources.Load<GameObject>("UI/HUD/UIPotion");
if(uiPotionObj != null)
uiPotion = Instantiate(uiPotionObj, transform).gameObject.GetComponent<UIPotion>();
그렇게 하니 HUD가 화면에 안보여지는 문제가 발생했다. 하여라키창에서는 잘 있는데 화면에 안보여지는거 보니 문제가 단단히 있다.
해결
HUD프리펩이 만들어 지기 전에 ItemManager에서 HUD를 호출해 버리기 때문에 발생했던 문제였다.(HUD가 제일 먼저 나와야한다!!!)
GameObject uiPotionObj = Resources.Load<GameObject>("UI/HUD/UIPotion");
if(uiPotionObj != null)
uiPotion = Instantiate(uiPotionObj, transform).gameObject.GetComponent<UIPotion>();
ItemManager.Instance.PotionCheck();
그래서 기존에 코드 밑에 함수를 호출하게 만들었더니 아무문제없이 잘 돌아갔다.
코드가 길어지니 어떤것을 우선적으로 생성해야 할 지도 신경을 써야될거 같다.