ScriptableObject로 데이터 저장하기
데이터 컨테이너로 사용할때에는 변경되지 않는 초기값을 넣어놓는다.
(기본적인 껍데기인샘)
//fileName은 생성됐을때 이름이다.
//menuName은 파일에 우클릭했을때 Create안에 menu이름이다
[CreateAssetMenu(fileName = "Item", menuName = "New Item")]
public class ItemData : ScriptableObject //스크립터블오브젝트 상속
public enum ItemType//아이템 타입 나누기
{
Equipable,
Consumable,
Resource
}
public enum ConsumableType//사용아이템 타입 나누기
{
Health,
Stamina
}
인터페이스 사용예제
public interface IAttackable//공격 인터페이스
{
public void Attack(); //공격메서드 추상화
}
public class Trap : IAttackable//공격 인터페이스 상속받음
{
public int Damage;
public void Attack()//구현
{
Console.WriteLine($"실수로 함정을 밟았습니다. {Damage}의 피해를 입었습니다.");
}
}
부모클래스
public abstract class Monster : IAttackable//부모클래스인 몬스터에도 공격인터페이스 상속
{
public string name;
public int attack;
public int hp;
public void PrintStatus()
{
Console.WriteLine($"{name}몬스터 출현!");
Console.WriteLine($"공격력 {attack}");
Console.WriteLine($"체력 {hp}");
}
public abstract void Attack();//추상메서드 생성
}
public class Slime : Monster//몬스터 상속
{
public override void Attack()//구현
{
Console.WriteLine($"{name} 몬스터가 플레이어에게 달려들어 {attack}의 피해를 줍니다!");
}
}
public class Orc : Monster//몬스터 상속
{
public override void Attack()//구현
{
Console.WriteLine($"{name} 몬스터가 플레이어에게 둔기를휘둘러 {attack}의 피해를 줍니다!");
}
}
외부에서 리스트로 사용할때
//인터페이스를 리스트화시켜 저장한다.
private List<IAttackable> _attackables = new List<IAttackable>();
//인터페이스에 추가할때 쓰는 메서드
public void AddAtackable(IAttackable attackable)
{
_attackables.Add(attackable);
}
public void Enter()
{
Console.WriteLine(new string('=',50));
foreach (IAttackable attackable in _attackables)
{
//Monster형일때만 true
if (attackable is Monster monster)
{
monster.PrintStatus();
}
}
Console.WriteLine(new string('=',50));
}
public void Explore()
{
Console.WriteLine(new string('*',50));
foreach (IAttackable attackable in _attackables)
{
attackable.Attack();
}
Console.WriteLine(new string('*',50));
}