Practice_Unity/Assets/Scripts/Contents/Status_Enemy.cs
Seonkyu.kim ccc9d46df7 작업
1. 이동시 Rigdoby와 Nav 충돌나는거 수정
2. 데이터 매니저에서 데이터 받아오는것에 대한 방식을 대폭 수정
3. 스폰 컨트롤러 방식 조금 수정
4. 벽과 플레이어 캐릭터 충돌시 미끄러지는 기능 추가(다른 오브젝트와는 테스트 안해 봄)

- 캐릭터 컨트롤러에 스테이터스 하는거 손 봐야 함
2025-09-25 18:00:21 +09:00

122 lines
3.7 KiB
C#

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 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() 호출
}
}
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;
}
}
}
*/