유니티 정보전달에 대하여
- 변수 접근을 통한 정보 전달
가장 간단한 방법은 다른 스크립트에서 공개된 public 변수를 통해 직접 데이터를 전달하는것이다. 하지만 이 방법은 스크립트들이 서로 강하게 결합될 수 있어 관리가 어려울 수 있다.
// A 스크립트 (DataHolder.cs)
public class DataHolder : MonoBehaviour
{
public int playerScore = 0;
}
// B 스크립트 (ScoreDisplay.cs)
public class ScoreDisplay : MonoBehaviour
{
public DataHolder dataHolder; // A 스크립트의 변수 연결
void Start()
{
Debug.Log("Player Score: " + dataHolder.playerScore); // A 스크립트의 변수 사용
}
}
- 메서드 호출을 통한 정보 전달
한 스크립트에서 다른 스크립트의 메서드를 호출하는 방법이다. 이렇게 하면 데이터 전달뿐만 아니라, 특정 로직을 수행할 수 있다.
// A 스크립트 (Player.cs)
public class Player : MonoBehaviour
{
public int health = 100;
public void TakeDamage(int damage)
{
health -= damage;
Debug.Log("Player Health: " + health);
}
}
// B 스크립트 (GameManager.cs)
public class GameManager : MonoBehaviour
{
public Player player;
void Start()
{
player.TakeDamage(20); // Player 스크립트의 메서드 호출
}
}
- 이벤트를 통한 정보 전달
이벤트와 델리게이트를 사용하면, 여러 스크립트에서 동시에 정보에 반응하거나 데이터를 처리할 수 있다. 주로 C# 이벤트를 사용하여 특정 이벤트가 발생할 때 다른 스크립트가 반응하도록 한다.
// A 스크립트 (HealthManager.cs)
public class HealthManager : MonoBehaviour
{
public delegate void HealthChanged(int currentHealth);
public event HealthChanged OnHealthChanged;
private int health = 100;
public void TakeDamage(int damage)
{
health -= damage;
OnHealthChanged?.Invoke(health); // 이벤트 발생
}
}
// B 스크립트 (UIManager.cs)
public class UIManager : MonoBehaviour
{
public HealthManager healthManager;
void Start()
{
healthManager.OnHealthChanged += UpdateHealthUI; // 이벤트 구독
}
void UpdateHealthUI(int health)
{
Debug.Log("UI Updated with Health: " + health); // UI 갱신
}
}
유니티에서는 변수를 이용한 정보전달이지만 private을 사용해 정보를 하면서 쓰는 방법이 있다.SerializeField를 사용하는것이 바로 그것이다 SerializeField를 사용하면 다른 스크립트에서는 사용못하지만 선언을 해준곳에서는 인스펙터에서 관련 정보가 있는 스크립트가 있는 오브젝트를 연결해주는 것으로 정보 전달이 가능하다
그간 정보전달에 대한 공부가 부족하다고 느껴서 다시금 되새기고자 간단하게 정리를 해보았다.
오늘은 유모델러x를 사용하는 특강을 들었는데 이에 대한 내용은 차후 좀더 공부한 후에 정리하겠습니다
'개발의 시작 TIL(Today I Learned)' 카테고리의 다른 글
개발의 시작 TIL(Today I Learned) '현업 기획자의 좋은 기획과 업무 방식' 특강 (2) | 2024.11.25 |
---|---|
개발의 시작 TIL(Today I Learned) 심화 주차 끝 최종 프로젝트 시작 (2) | 2024.11.22 |
개발의 시작 TIL(Today I Learned) 유한 상태머신 만들기 (1) | 2024.11.20 |
개발의 시작 TIL(Today I Learned) 심화 주차 팀프로젝트 시작 (2) | 2024.11.15 |
개발의 시작 TIL(Today I Learned) 심화 주차 개인과제 만들기 (0) | 2024.11.14 |