### **ScriptableObject 등록 (Register ScriptableObject)**
- **용도:** `ScriptableObject` 에셋으로 저장된 설정 정보를 등록하는 데 유용합니다.
**예시 시나리오:**
문서에서는 `CameraSettings`와 `ActorSettings`라는 두 개의 `[Serializable]` 클래스를 포함하는 `GameSettings`라는 `ScriptableObject`를 정의합니다.
C#
```
// CameraSettings 클래스 (직렬화 가능)
[Serializable]
public class CameraSettings
{
public float MoveSpeed = 10f;
public float DefaultDistance = 5f;
public float ZoomMax = 20f;
public float ZoomMin = 5f;
}
// ActorSettings 클래스 (직렬화 가능)
[Serializable]
public class ActorSettings
{
public float MoveSpeed = 0.5f;
public float FlyingTime = 2f;
public Vector3 FlyingInitialVelocity = Vector3.zero;
}
// GameSettings ScriptableObject
[CreateAssetMenu(fileName = "GameSettings", menuName = "MyGame/Settings")]
public class GameSettings : ScriptableObject
{
[SerializeField]
public CameraSettings cameraSetting;
[SerializeField]
public ActorSettings actorSettings;
}
```
**등록 과정:**
1. **`GameSettings` 에셋 생성:** Unity 에디터에서 `Assets -> Create -> MyGame -> Settings` 메뉴를 통해 `GameSettings` 타입의 에셋을 생성합니다. 이 에셋에 `cameraSetting`과 `actorSettings`의 값을 인스펙터에서 설정할 수 있습니다.
2. **`LifetimeScope`에서 에셋 참조 및 등록:** `LifetimeScope`에서 생성된 `GameSettings` 에셋을 `[SerializeField]`를 통해 참조하고, `Configure` 메서드에서 해당 에셋 내부의 설정 객체들을 컨테이너에 `RegisterInstance`로 등록합니다.
<!-- end list -->
C#
```
public class SomeLifetimeScope : LifetimeScope
{
[SerializeField]
GameSettings settings; // 인스펙터에서 생성된 GameSettings 에셋을 여기에 할당합니다.
protected override void Configure (IContainerBuilder builder)
{
// GameSettings 에셋 내부의 cameraSettings 인스턴스를 컨테이너에 등록
builder.RegisterInstance(settings.cameraSettings);
// GameSettings 에셋 내부의 actorSettings 인스턴스를 컨테이너에 등록
builder.RegisterInstance(settings.actorSettings);
}
}
```
**주입 및 사용:**
이렇게 등록된 `CameraSettings`나 `ActorSettings`는 필요로 하는 다른 클래스에서 생성자 주입 등을 통해 쉽게 주입받아 사용할 수 있습니다.
C#
```
public class CameraController
{
private readonly CameraSettings _cameraSettings;
public CameraController(CameraSettings cameraSettings)
{
_cameraSettings = cameraSettings;
// 이제 _cameraSettings.MoveSpeed 등을 사용하여 카메라 움직임 속도를 제어할 수 있습니다.
}
}
```
### 요약
VContainer를 사용하여 Unity의 `ScriptableObject`에 저장된 설정 데이터를 DI 시스템에 통합하는 방법을 보여줍니다. `ScriptableObject` 에셋을 생성하고, `LifetimeScope`에서 이 에셋을 참조한 다음, `RegisterInstance`를 통해 에셋 내부의 직렬화된 설정 객체들을 컨테이너에 등록함으로써, 게임의 다양한 부분에서 이러한 설정 값들을 깔끔하게 주입받아 사용할 수 있게 됩니다.
---
이전 : [[4.4 Register MonoBehaviour]] | 다음 : [[4.6 Register Collection]]