1. 데이터 매니저 변경 - 기존에 Dictionary 방식으로 만 처리가 되게 만들어 리스트 형태의 JSON이 아닌 그냥 단순 심플 형태의 JSON은 값 읽기 위해서는 JSON 자체를 변경했어야 했는데 이러한 문제 변경 2. 플레이어 컨트롤러에서 데이터 읽어서 플레이어 상태 관련 수정 - 플레이어 컨트롤러, 플레이어 데이터, 플레이어 데이터.json 수정 Todo 1. DataManager 이거 동작 원리 확실하게 정리를 해둬야 할거 같음 볼때마다 헷갈리면 만든 의의가 없음 2. 이제 실질적으로 몬스터 AI를 만들기 시작할 것 3. 캐릭터가 공격할때 사용할 방법에 대해서 생각 해 볼 것
128 lines
3.9 KiB
C#
128 lines
3.9 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 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;
|
|
}
|
|
|
|
}
|
|
}
|
|
*/ |