본문 바로가기
프로젝트/알부수기

2023. 09. 13 x Delegate, ZoomIn

by 화릿불 2023. 10. 10.

선택된 캐릭터가 계속 하나로 고정되는 버그가 있었다.

캐릭터 생성 시 캐릭터에 붙어있는 버튼에 Delegate로 함수를 할당해 줬는데 이게 문제였다.

 

for (int j = 0; j < 4; j++) Character.transform.Find("BaseCharacter").Find("Buttons").Find("Button" + Convert.ToString(j)).GetComponent<Button>().onClick.AddListener(delegate { SaveRequestObject(Character); });

 

마지막으로 이동된 캐릭터로만 선택되는 버그였다.

 

Delegate로 인해 마지막으로 이동된 캐릭터로 모든 버튼의 함수들이 지정되는 것으로 보인다.

 

본래 스크립트에서 캐릭터 생성 시 스크립트로 버튼 기능을 설정해 주었는데

캐릭터 프리팹 단계에서 해당 캐릭터 자신을 가리키도록 버튼 기능을 설정해 해결했다.

 

과거 캐릭터를 집중해서 볼 수 있는 카메라 기능을 넣다가 실패했었다.

기존 카메라의 확대 축소를 이용하여 구현하고 싶었지만, 생각처럼 잘되지 않았다.

 

그래서 우선은 세 번째 카메라를 추가해 선택된 캐릭터만 크게 보는 채 따라가도록 설정해 구현해 두었다.

 

// GameController Script
// 카메라 모드로 진입
if (IsCameraOn)
{
   SelectArrow.SetActive(false);
   CharacterCamera.GetComponent<Camera>().depth = -1;
   GameObject.Find("Main Camera").GetComponent<Camera>().depth = -2;
   GameObject.Find("Caffe Camera").GetComponent<Camera>().depth = -3;

   CharacterCamera.GetComponent<Camera>().transform.localPosition = new Vector3(RequestObejct.transform.localPosition.x, RequestObejct.transform.localPosition.y, RequestObejct.transform.localPosition.z - 100.0f);
   CharacterCamera.GetComponent<Camera>().transform.LookAt(RequestObejct.transform);
   CharacterCamera.GetComponent<Camera>().orthographicSize = 1;

   // 관찰용이므로 클릭하거나 터치하게되면 모드 종료
   if (Input.touchCount > 0 || Input.GetMouseButtonDown(0) || Input.GetMouseButton(0) || Input.GetMouseButtonUp(0)) IsCameraOn = !IsCameraOn;
}