Synapse Framework의 모든 자동화와 흐름 제어는 Common 모듈에서 시작됩니다.
이 모듈은 단순한 유틸리티 모음이 아니라, 전체 프로젝트를 움직이는 두뇌이자 심장입니다.
지금 바로 Common 모듈로 자동화 기반을 시작해보세요.
Alt + Shift + P를 입력하여 Senapse Control Center을 엽니다.
Framework Controller에서 사용할 기능을 체크하고, 필요한 패키지를 설치합니다.

EditorDateString 탭으로 이동하여Create Project Folders 및 Create Partial Scripts 버튼을 클릭합니다.
→ 프로젝트 폴더 구조와 partial class들이 자동으로 생성됩니다.
→ Create Project Folders 클릭 시 Path들이 자동 캐싱됩니다.
→ Create Project Folders 클릭 시 이미 폴더가 존재할 경우, 기존 폴더를 자동으로 캐싱합니다.

초기 씬(Scene)이나 DontDestroy 모음 씬으로 이동한 뒤, Create Manager 버튼을 클릭하여 사용할 매니저를 씬(Scene)에 생성합니다.

Common은 SynapseFramework의 기반 시스템입니다.
MonoBehaviour를 대체하고,Update,Singleton,Project 설정,객체 등록등프레임워크 전반의 자동화를 담당합니다.
Synapse Framework의 베이스 스크립트.
Framework 기능을 사용하려면 MonoBehaviour를 대신 해 상속 받아야 합니다.
스케쥴 매니저 사용여부 체크
생성 및 제거 시 Register에 자동 등록 및 해제
SerializeField 변수명과 타입이 자식의 변수명과 타입과 동일할 시 Inspector에 자동 등록
ex)


Drag & Drop으로 필드 생성 및 캐싱
에디터 상에서 자식 오브젝트를 Drag & Drop으로 옮겨 타입 및 이름을 변경하고 적용하면 해당 스크립트에 필드 자동 생성 및 인스펙터 캐싱합니다.


많은 스크립트에서 Update가 사용될 경우, 또 Update가 존재하는 스크립트가 많이 사용될 경우 생기는 최적화 관련 이슈를 해결하였습니다.
ScheduleManager에서 IUpdatable을 상속받은 스크립트를 캐치해 ScheduleManager의 Update에서 전체 Update를 관리합니다.
기능: Unity의 Update, LateUpdate, FixedUpdate를 Hook하여
SynapseBehaviour를 상속한 객체들이 인터페이스만 구현해도 자동 호출되도록 처리합니다.
IUpdatable, IFixedUpdatable, ILateUpdatable 상속 시 에디터 레벨에서 자동 검색 및 등록
public class Player : SynapseBehaviour, IUpdatable
{
public void OnUpdate()
{
// Coding to update code
Move();
}
}
📎 이 기능은 InputSystem, FSM 등 모든 런타임 모듈의 기반이 됩니다.
SynapseBehaviour를 상속받은 모든 스크립트를 중앙에서 관리하는 클래스입니다.
등록과 해제는 SynapseBehaviour에서 자동 처리되어 있습니다.
GameObject.GetInstanceId()를 키로 SynapseBehaviour를 가져올 수 있다.
ex)
void OnCollisionEnter(Collision col)
{
if(Register.TryGetInstance<Unit>(col.gameObject.GetInstanceId(), out var unit))
{
unit.OnDamage(this.atk);
}
}

각종 모듈의 기능이나 설정등을 다루는 종합 관리 툴입니다.

모듈 추가시 자동 등록되어 사용만 하면 됩니다.
Reflection으로 리턴 타입과 함수 네이밍 컨벤션을 기반으로 탐색 후 등록하는 방식을 사용하고 있습니다.
커스텀 모듈 추가 방법
namespace Ironcow.Synapse
{
public partial class ProjectSettingTool
{
public SettingMenu OnEnable_Common()
{
return new SettingMenu { id = 0, name = "Framework Controller", getScritables = Get_FrameworkController };
}
public ScriptableObject Get_FrameworkController()
{
return FrameworkController.instance;
}
}
}

Create Project Folders

Create Partial Scripts
Create Manager
Convinience 모듈 관련 필드
Create Editor Prefab Path
Create SettingSO Path
Create Script Path
Create Asset Prefab Path
ResourceType Target Path