2025/05/21(수)

개발자 지망생 유령·2025년 5월 21일

내일배움캠프

목록 보기
15/17

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));
    }

0개의 댓글