-
카테고리
-
세부 분야
게임 프로그래밍
-
해결 여부
해결됨
몇 가지 질문이 있습니다.
21.05.31 19:55 작성 조회수 217
0
1. public GameObject Instantiate(string path, Translate parent = null)에서 Translate 밑에 오류가 뜹니다. 형식 또는 네임스페이스 이름을 찾을 수 없다고 하는데, 왜 이런 건가요?
2. Instantiate의 경우 그냥 곧바로 prefab을 넣어서 사용했는데 왜 Destroy는 tank에 Instantiate를 넣은 뒤 tank를 넣어서 삭제해야 하나요?
3. public GameObject Instantiate(string path, Transform parent = null)에서 parent의 의미는 무엇인가요?
4. GameObject prefab = Load<GameObject>($"Prefabs/{path}");의 작동 원리를 모르겠습니다. 경로를 입력하는 것까진 알겠는데 경로에서 'Tank' 프리팹을 불러오려면 불러올 프리팹의 이름도 입력해 주어야 하는 게 아닌가요?
5. public GameObject Instantiate(string path, Transform parent = null)를 보면 Instantiate의 파라미터가 두 개인데 어째서 Managers.Resource.Instantiate에서 불러올 땐 Managers.Resource.Instantiate("Tank");로 파라미터가 하나만 들어가나요?
제가 모자라서 질문이 너무 많네요ㅠ 매번 친절히 답변해 주셔서 감사합니다.
답변을 작성해보세요.
1
Rookiss
지식공유자2021.05.31
1.
오타 때문입니다.
Translate(X) Transform(O)
2.
프리팹은 일종의 샘플입니다.
Instantiate은 [이 샘플을 이용해서 객체를 만들어줘!]라는 역할을 하고
반대로 Destroy는 생성된 객체를 삭제하는 역할을 하는데,
이미 생성된 객체가 한 두개가 아닐테므로 어떤 애를 삭제하는지 명시해줘야겠죠.
그렇기 때문에 반드시 누굴 삭제할지를 인자로 받아주는 것입니다.
3.
Hierarchy 보면 GameObject끼리도 계층 구조로 만들 수 있는데,
parent를 지정하면 해당 오브젝트 산하로 들어갑니다.
이는 직접 코드로 테스트를 해보시기 추천드립니다.
4.
경로 안에 프리팹의 이름까지 포함되어 있는 것입니다.
예를 들어 path를 Objects/Tank로 넣어주면
최종 경로가 Prefabs/Objects/Tank로 잡히겠죠.
5.
public GameObject Instantiate(string path, Transform parent = null)
요 문법에서 Transform parent = null의 의미는
[Transform parent를 옵션으로 지정할 수 있고, 지정하지 않을 경우 디폴트 값 = null로 사용하겠다]입니다.
따라서 사용할 때 parent를 지정하지 않으면 parent = null인 셈이고
특정 객체 산하에 들어가지 않게 되는 것이죠.
참고로 Transform은 Component이긴 하지만
모든 GameObject가 Transform을 들고 있기에
사실상 GameObject나 Transform이나 의미적으로 같은 용도로도 쓰입니다.
계층 관계를 만들 때 각 오브젝트의 Transform을 이용해서
포함 관계를 지정하는 부분이 특이하게 볼 부분입니다.
답변 1