안녕하세요

프로그램 과정에서 막혔던 문제들에 대한 해결책 정리


페이지 목록

2024년 12월 23일 월요일

[Unity][Copilot][유니티][코파일럿] UI와 공용 컨트롤러간의 관계

 유니티를 사용하다 보니 UI Controller의 경우 특정 UI를 움직이기 때문에 공용으로 사용하기에 부적합하다. 그래서 UI Controller와 공용 컨트롤러를 구별해서 사용하면 사용하기에 좋다.

 아래와 같은 코드를 사용하여 공용 Controller를 가져와서 UI Controller에 사용하게 된다.


### 예시 코드: UIHealthController.cs

```csharp

using UnityEngine;

using UnityEngine.UI;


public class UIHealthController : MonoBehaviour

{

    public Text healthText;

    private PlayerController playerController;


    void Start()

    {

        playerController = FindObjectOfType<PlayerController>();

    }


    void Update()

    {

        healthText.text = "HP: " + playerController.Health;

    }

}


여기서 FindObjectOfType은 FindObjectOfType<T> 로 사용이 되며, T type의 첫 번째 활성화된 오브젝트를 찾아서 반환해 준다. 주로 특정 타입의 컴포넌트를 검색할 때 사용하게 된다.

 위 예시로 보면 PlayerController 컴포넌트를 찾아서 반환하라는 뜻이다.

 그런데 이 경우 Find 이기 때문에 전체 씬을 검색하게 된다. 그래서 용량이 커질 수록 비효율 적이다. 그리고 첫번째 활성화된 오브젝트만 가져오기에 첫번째만 반환하게 된다.

 그래서 최소한으로 사용하는 것이 좋다. 캐싱을 통해서 사용할 수 있다.
 private HPController hpController; 를 선언하고
Start때만 불러 온다.
 Start() {
   hpController = FindObjctOfType<HPController>();
}
이 후 Update 때에는 캐싱한 변수를 사용한다.

 Update(){
    HPController.HP;
}

**이 글은 Microsoft Copilot의 도움을 받아 작성되었습니다.

댓글 없음:

댓글 쓰기