using UnityEngine; public class Status_Enemy : Status { // 인스펙터에 표시될 단 하나의 데이터 필드입니다. // 여기에 아래에서 정의할 StatusData_Enemy 타입의 데이터를 넣게 됩니다. [SerializeField] private Data_Status_Enemy _data; public Data_Status_Enemy Data { get { return _data; } set { if (value != null) { _data = value; Init(); // 데이터가 설정될 때마다 초기화합니다. } } } // --- 부모의 abstract 프로퍼티들을 여기서 완성(override)합니다. --- // 모든 데이터는 이제 _data 필드에서 직접 가져옵니다. // public override int Level => _data.level; // public override int Level { get; set; } public override int MaxHp => _data.maxHp; public override int MaxMp => _data.maxMp; public override float Attack => _data.attack; public override float Defense => _data.defense; public override float MoveSpeed => _data.moveSpeed; public override float AtkSpeed => _data.atkSpeed; // --- Enemy 전용 프로퍼티들 --- // 이 클래스만의 고유한 스탯들도 _data 필드에서 가져옵니다. public float ScanRange => _data.scanRange; public float AttackRange => _data.atkRange; public float PatrolSpeed => _data.patrolSpeed; public float ChaseSpeed => _data.chaseSpeed; // 부모의 OnValidate를 오버라이드하여 // 인스펙터에서 값 변경 시 HP/MP가 실시간으로 갱신되도록 합니다. protected override void OnValidate() { if (_data != null) { base.OnValidate(); // 부모의 Init() 호출 } } protected override void DataInit(Data_Status data) { base.DataInit(_data); } private void Awake() { // 게임 시작 시 HP/MP 초기화 Init(); } } /* public class Status_Enemy : Status { // public Data_Status_Enemy _enemyData;// => _data as Data_Status_Enemy; public override Data_Status Data { get { return _data;} set { if (value is Data_Status_Enemy) { _data = value as Data_Status_Enemy; Init(); } } } public Data_Status_Enemy EnemyData => _data as Data_Status_Enemy; public float ScanRange => EnemyData != null ? EnemyData.scanRange : 5f; public float AttackRange => EnemyData != null ? EnemyData.atkRange : 1f; public float PatrolSpeed => EnemyData != null ? EnemyData.patrolSpeed : 2f; public float ChaseSpeed => EnemyData != null ? EnemyData.chaseSpeed : 3f; } /* [SerializeField] protected float _scanRange; [SerializeField] protected float _atkRange; [SerializeField] protected float _patrolSpeed; [SerializeField] protected float _chaseSpeed; public float ScanRange { get { return _scanRange; } set { _scanRange = value; } } public float AttackRange { get { return _atkRange; } set { _atkRange = value; } } public float PatrolSpeed { get { return _patrolSpeed; } set { _patrolSpeed = value; } } public float ChaseSpeed { get { return _chaseSpeed; } set { _chaseSpeed = value; } } public void Init(Status_Enemy data) { base.Init(data); ScanRange = data.ScanRange; AttackRange = data.AttackRange; PatrolSpeed = data.PatrolSpeed; ChaseSpeed = data.ChaseSpeed; } public override void CopyFrom(Status source) { if (source == null) return; base.CopyFrom(source); if (source is Status_Enemy enemyStatus) { ScanRange = enemyStatus.ScanRange; AttackRange = enemyStatus.AttackRange; PatrolSpeed = enemyStatus.PatrolSpeed; ChaseSpeed = enemyStatus.ChaseSpeed; } } } */