🤍 전 강의 25% 할인 중 🤍

2024년 상반기를 돌아보고 하반기에도 함께 성장해요!
인프런이 준비한 25% 할인 받으러 가기 >>

  • 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    해결됨

몇 가지 질문이 있습니다.

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

답변을 작성해보세요.

1

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을 이용해서
포함 관계를 지정하는 부분이 특이하게 볼 부분입니다.

답변 감사합니다! 이해되었어요

채널톡 아이콘