Managers 오류
99
작성한 질문수 5
You are trying to create a MonoBehaviour using the 'new' keyword. This is not allowed. MonoBehaviours can only be added using AddComponent(). Alternatively, your script can inherit from ScriptableObject or no base class at all
UnityEngine.MonoBehaviour:.ctor ()
이라는 메세지가 뜹니다
작동하는데는 문제가 없는 것 같지만 자꾸 뜨니까 거슬려서 해결 하고 싶습니다.
아래는 코드입니다.
using UnityEngine;
public class Managers : MonoBehaviour
{
static Managers s_instance; // 유일성 보장된다
static Managers Instance { get { Init(); return s_instance; } } // 유일한 매니저를 갖고 온다
InputManager _input = new InputManager();
ResourceManager _resource = new ResourceManager();
public static InputManager Input { get { return Instance._input; } }
public static ResourceManager Resource { get { return Instance._resource; } }
// Start is called once before the first execution of Update after the MonoBehaviour is created
void Start()
{
Init();
}
// Update is called once per frame
void Update()
{
_input.OnUpdate();
}
static void Init()
{
if (s_instance == null)
{
// 초기화
GameObject go = GameObject.Find("@Managers");
if(go == null)
{
go = new GameObject { name = "@Managers" };
go.AddComponent<Managers>(); //?
}
DontDestroyOnLoad(go);
s_instance = go.GetComponent<Managers>();
}
}
}
아래에는 오류가 뜨는 부분입니다.
go.AddComponent<Managers>(); //?
답변 2
0
안녕하세요, 인프런 AI 인턴입니다. 이강토님.
현재 겪고 계시는 오류 메시지는 MonoBehaviour와 관련된 것으로, MonoBehaviour는 유니티에서 스크립트가 GameObject에 부착되어야지만 동작할 수 있습니다. 코드 상에서는 new 키워드를 사용하여 MonoBehaviour를 직접 생성하려고 하고 있어서 문제가 발생하는 것입니다.
특히, InputManager와 ResourceManager를 초기화하는 부분에서 new 키워드를 사용하고 있는데, 이들 클래스가 MonoBehaviour를 상속받지 않는다면 문제가 되지 않겠지만, 그렇다면 ScriptableObject 또는 다른 C# 클래스 형태로 선언되어야 합니다.
또한, 적절한 초기화 기법을 사용하는 것도 중요합니다. 만약 InputManager나 ResourceManager가 MonoBehaviour를 상속받고 있다면, 이들을 생성할 때도 AddComponent<T>() 방식을 사용하고 부모 GameObject에 부착하는 방식으로 코드를 수정해야 합니다.
아래 링크에서 유사한 문제가 논의된 사례를 확인해 보실 수 있습니다:
- 싱글톤 관련 질문있습니다. - 이 게시물에서는 유사한 싱글톤 패턴을 적용하면서 발생할 수 있는 다양한 문제와 초기화 방법에 대한 조언을 얻을 수 있습니다.
이 문제를 해결하기 위한 핵심 포인트는 MonoBehaviour가 아닌, 일반 클래스로 선언이 가능한지 검토하는 것입니다. 그렇지 못하다면 AddComponent 방식을 사용하는지 확인해야 합니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
UI 기능 관련 질문이 있습니다!
0
32
2
픽셀 좌표 스크린 좌표
0
32
0
전체적으로 코드 읽는게 굉장히 오래 걸리네요...
0
72
2
카메라 #2 수업 캐릭터 쓰러짐 해결
0
83
1
플레이어 움직임이 끝날때, 기울어짐 현상
0
82
1
Input 적용과 관련하여 질문 있습니다.
0
74
1
디버그 불가.. Unity에 연결 불가
0
81
1
달리기 애니메이션 에러
0
87
2
오랜만에 게임을 만들다가 사운드 관련해서 뭔가 궁금한게 있어서 봤습니다
0
65
1
GetKey 오류
0
109
2
에셋을 어디에 올려두신지 알 수 있나요?
0
106
1
재귀호출? 오류나는데 왜 이래요 ?
0
169
6
Animation blending 파라미터 계산
0
67
1
newPos와 to지점이 겹쳐져야 하는거 아닌가요?
0
96
3
오브젝트 복제하니까 자꾸 이런게 뜨면서 꺼집니다
0
87
2
질문있습니다
0
143
2
아 이거 소스코드 같은거 없나요?
0
141
3
질문 드립니다. string.IsNullOrEmpty(name)
0
86
2
@Managers 가 씬에 배치되어 있어도 문제가 되지 않나요?
0
135
2
유니티6 NavMesh 안되는분들
1
174
1
Unity6 Unity-Chan Material 마젠타 문제 해결법
7
525
1
GetComponent<Poolable> 질문드립니다.
0
101
2
UI 불러오지 못함
0
117
2
UI 자동화 #1 - Util.cs의 FindChild함수에서 component.name에 컴포넌트 이름이 뜹니다.
0
155
2





