Unity_개발일지_07

홍신영·2024년 10월 8일
0

Unity

목록 보기
9/62

ScriptableObject 만들기

[CreateAssetMenu(fileName = "AttackSO", menuName = "Project/attacks/default", order = 2)]
public class AttackSO : ScriptableObject
{
    [Header("characterInfo")]
    public float hp;
    public float speed;
    public float power;
    public LayerMask target;
}

스크리터블 오브젝트는 유니티에서 데이터를 저장하고 관리하는 유연한 데이터 컨테이너이다.
공통된 부분을 SO로 사용하여 다른 캐릭터에도, 여러 오브젝트에 재사용하는 등 사용할 수 있다.

enum

enum은 열거형을 말한다. 보통 상태나 값을 나타낼 때 사용된다.

 public enum States
    {
        Idle, //각각에 정수가 매핑되어있다
        Walking = 100, //이렇게 하면 뒤에 Running은 101부터 시작
        Running
    }

게임에서 상태를 표시할 때, 위처럼 사용할 수 있다. 이어서 가면 switch case로
case(states.Idle)이런식으로 사용할 수 있다.

Virtual / Override

Virtual은 메소드를 선언할 때 접근제한자 뒤에 붙는다. Virtual은 override와 함께 사용되는데, 부모 클래스에 메소드를 자식 클래스에서 오버라이딩해서 사용된다.(덮어쓰기 같은 느낌)
오버라이딩하지 않는다면 부모클래스에 있는 메소드가 호출 될 것이고, 자식클래스에서 오버라이딩한다면 최종적으로 자식클래스에 메소드가 호출될 것이다.

Virtual과 비슷한 Abstract는 구현부가 없고, 반드시 자식클래스에서 메소드를 구현해야만 한다.
하지만 virtual은 구현부가 있고, 추가적으로 override해도 되고 않해도 되는 구조이다.

예시를 보자.

     //부모클래스
     protected virtual void Awake()
 {
     stats = GetComponent<CharacterStatHandler>();
 }
    
    //자식클래스
    protected override void Awake()
    {
        base.Awake();
        camera = Camera.main; //
    }

위에서 구현된 것처럼, 부모클래스의 Awake메소드에 Virtual을 해주고, stats라는 컴포넌트를 가져왔다.
자식클래스에서 stats라는 컴포넌트가 필요하고(base.Awake();), 추가적인 부분이 필요해 camera = Camera.main;이라는 구현부를 추가해준 모습이다.

이로써 자식클래스에서는 base를 통해 부모에 메소드를 가져오고, override를 통해 추가적인 구현도 추가할 수 있었다.

profile
게임 클라이언트 개발자

0개의 댓글