유니티를 사용하다 보니 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의 도움을 받아 작성되었습니다.
댓글 없음:
댓글 쓰기