스크립터블 오브젝트는 매우 다양하게 사용할 수 있다.
심지어 매우 효율적이다. 하지만 어떻게 사용해야할지 감이 잘 잡히지 않는다.
그래서 다양한 활용성을 예제들로 한번 정리하고 한번씩 보려고 한다.
1. 게임 데이터 관리
[CreateAssetMenu(fileName = "PlayerStats", menuName = "ScriptableObjects/PlayerStats")]
public class PlayerStats : ScriptableObject
{
public int maxHealth = 100;
public int attackPower = 20;
}
// 플레이어 클래스에서 PlayerStats 사용
public class Player : MonoBehaviour
{
public PlayerStats playerStats;
private int currentHealth;
private void Start()
{
currentHealth = playerStats.maxHealth; // SO에서 체력 정보를 불러옴
}
}
이런 방식으로 간단하게 플레이어 스탯을 관리해보았다.
이런 방법은 자주 사용해본 것 같다.
2. 델리게이트와 이벤트 관리
[CreateAssetMenu(fileName = "GameEvent", menuName = "ScriptableObjects/GameEvent")]
public class GameEvent : ScriptableObject
{
private Action listeners;
public void Raise()
{
if (listeners != null)
listeners.Invoke();
}
public void RegisterListener(Action listener)
{
listeners += listener;
}
public void UnregisterListener(Action listener)
{
listeners -= listener;
}
}
// 버튼 클릭 시 게임 이벤트 발생
public class Button : MonoBehaviour
{
public GameEvent onButtonPressed;
private void OnMouseDown() // 버튼이 클릭되었을 때 실행
{
onButtonPressed.Raise(); // GameEvent를 발생시킴
}
}
// 이벤트를 구독하는 클래스
public class EventListener : MonoBehaviour
{
public GameEvent gameEvent;
private void OnEnable()
{
gameEvent.RegisterListener(OnEventRaised);
}
private void OnDisable()
{
gameEvent.UnregisterListener(OnEventRaised);
}
private void OnEventRaised()
{
Debug.Log("버튼이 작동되었습니다.");
}
}
이 방법을 알고 아 이건 꼭 써봐야겠다 생각을 했다.
SO를 이용하면 메모리 관리도 효율적이라고 한다.
3.상태관리
[CreateAssetMenu(fileName = "GameState", menuName = "ScriptableObjects/GameState")]
public class GameState : ScriptableObject
{
public int playerScore = 0;
public void AddScore(int score)
{
playerScore += score;
Debug.Log($"현재 점수: {playerScore}");
}
}
// 플레이어가 점수를 얻었을 때 AddScore 호출
public class Player : MonoBehaviour
{
public GameState gameState;
public void CollectCoin()
{
gameState.AddScore(10);
}
}
// UI에서 GameState를 사용해 점수를 표시
public class ScoreDisplay : MonoBehaviour
{
public GameState gameState;
private void Update()
{
// UI에 gameState.playerScore 를 출력
}
}
다양한 AI를 구현하는데 사용해도 좋다고 하는데 어떤 방식인지 잘 모르겠다.
이부분은 공부를 좀 더 해보고 수정해봐야겠다.. (+= 이루어지지 않는 TODO 리스트)
개인적으로 가장 인상깊었던건 델리게이트를 함께 사용하는 SO라고 생각한다.
'[UNITY],[C#] > TIL : UNITY' 카테고리의 다른 글
1. DOTween 이랑 씨름하기 (0) | 2024.11.14 |
---|---|
[Unity]의존성 주입과 SO의 콜라보 (1) | 2024.11.12 |
인터페이스"님" 과 상속"님" 에 대해서 (1) | 2024.11.08 |
재미있는 퍼즐 로직 만들기 (0) | 2024.11.07 |
[Unity] JSON유틸리티를 이용한 저장 및 불러오기 시스템 (0) | 2024.11.06 |