인프런 커뮤니티 질문&답변

김덕훈님의 프로필 이미지

작성한 질문수

따라하면서 배우는 고박사의 2D 플랫포머 게임 제작

03-01 플레이어, 카메라의 스테이지 내 이동 범위 설정

플렛포머 게임 3 - 1 강의 질문

해결된 질문

작성

·

74

0

안녕하세요. 선생님의 2D 플렛포머 게임 강의 3 - 1과 관련하여 질문이 있어서 남깁니다.

StageData.cs 코드를 작성 후 Project의 + 를 클릭하면 Stage라는 버튼이 떠야되는데 밑에와 같은 문구가 뜨면서 활성화가 되지 않는 현상이 일어납니다. 이런 경우 어떻게 해결해야되는지 알 수 있을가요?

CreateAssetMenu attribute on StageData will be ignored as StageData is not derived from ScriptableObject. UnityEditor.AttributeHelper:ExtractCreateAssetMenuItems ()

답변 1

0

김덕훈님의 프로필 이미지
김덕훈
질문자

using UnityEngine;

[CreateAssetMenu(fileName = "NewStageData", menuName = "Stage")]

//[CreateAssetMenu]

public class StageData : MonoBehaviour

{

[Header("Camera Limit")]

[SerializeField]

private float cameraLimitMinX;

[SerializeField]

private float cameraLimitMaxX;

[Header("Player Limit")]

[SerializeField]

private float playerLimitMinX;

[SerializeField]

private float playerLimitMaxX;

[Header("Map Limit")]

[SerializeField]

private float mapLimitMinY;

// 외부에서 변수 데이터에 접근하기 위한 프로퍼티 Get

public float CameraLimitMinx => cameraLimitMinX;

public float CameraLimitMaxX => cameraLimitMaxX;

public float PlayerLimitMinX => playerLimitMinX;

public float PlayerLimitMaxX => playerLimitMaxX;

public float MapLimitMinY => mapLimitMinY;

}
코드는 위와 같이 작성하였는데 코드 문제 때문에 그런건가요?

고박사님의 프로필 이미지
고박사
지식공유자

public class StageData : MonoBehaviour

요 부분에서 상속받는 부모 클래스를 MonoBehaviour -> ScriptableObject로 변경해야 합니다.

유니티에서 대표적으로 상속받는 MonoBehaviour, ScriptableObject 두 클래스 중

MonoBehaviour를 사용하면 게임오브젝트에 컴포넌트로 등록해서 사용할 수 있고,

ScriptableObject를 사용하면 Project View에 Asset의 형태로 저장할 수 있습니다.

김덕훈님의 프로필 이미지
김덕훈
질문자

앗... 제가 코드를 제대로 작성하지 않았군요... 자세하게 알려주셔서 정말 감사합니다!

다음부터는 세심하게 볼 수 있도록 하겠습니다!