오브젝트 풀링 구현하기 | 유니티

แชร์
ฝัง
  • เผยแพร่เมื่อ 22 ต.ค. 2024

ความคิดเห็น • 49

  • @isakgo7492
    @isakgo7492 2 ปีที่แล้ว +1

    정말 감사합니다 선생님
    덕분에 오브젝트 풀링에 대한 개념을 알게되었습니다!

  • @박성찬-c1w
    @박성찬-c1w 2 ปีที่แล้ว +2

    일반 배열이나 리스트로 오브젝트 풀링은 해봤지만 큐로 해보는 건 처음이네요. 잘 배웠습니다!
    일반 배열은 길이가 한번 정해지면 바뀌지 않으니 리스트로 하는게 더 낫다고 생각했는데요. 큐나 리스트나 뭘 쓰든 딱히 상관 없으려나요?

    • @wergia
      @wergia  2 ปีที่แล้ว

      큐는 선입선출로 관리되어 꺼낼때는 항상 앞에서 꺼내고 다시 반환할 때는 뒤로 넣기 때문에 오브젝트를 꺼내가는 순서가 꼬이지 않을 확률이 높습니다.

  • @덕오리-v8f
    @덕오리-v8f 2 ปีที่แล้ว +1

    베르님 좋은 정보 감사합니다. 몇 가지 궁금한 점이 있는데요. 코드에서 CreateNewObject함수에서 newObj변수에 왜 Instantiate()가 아니라 Instantiate().GetComponent()를 하신 이유가 뭔가요? (왜 스크립트를 할당하나요?)
    그리고 poolingObjectQueue.Count가 아니라 Instance.poolingObjectQueue.Count하신 이유랑 Queue에 값으로 할당하면 자동으로 자식 오브젝트가 되는건지(실행을 하니깐 자식 오브젝트로 바뀌어 있어서). 마지막으로 함수 선언을 할 때 앞에 Bullet쓴 이유가 궁금합니다.

    • @wergia
      @wergia  2 ปีที่แล้ว

      1. 가져온 직후에 총알 오브젝트에 날아갈 방향과 속도를 설정해주기 위해서 입니다.
      2. Instance를 사용한 이유는 함수가 static 함수라서 일반 멤버 변수를 가져오지 못하기 때문입니다.
      3. 자식오브젝트로 따로 만들어줘야 합니다.
      4. 함수가 Bullet 타입의 오브젝트를 결과물로 반환한다는 뜻입니다.

  • @더훈타-d9r
    @더훈타-d9r 3 ปีที่แล้ว +1

    고맙습니다
    딱히 아무말안하고 보는편인데
    목소리톤이나 편집이나 설명부분이 스킵없어도 충분할정도로 깔끔하고
    여타 화면배치가 외궈 프로그래밍팁 영상이랑 비슷해서 좋습니다
    특히나 내가 영어로 들으면 중간중간 못들을정도로 회화능력이 높지않은 편이라 이런 한국어 영상은 좋다고 말할수 밖에없네요

  • @vitatv9720
    @vitatv9720 2 ปีที่แล้ว +1

    유니티의 기본 자습서가 되면 좋겠네요..잘보고 갑니다~!

  • @mrbinggrae5954
    @mrbinggrae5954 2 ปีที่แล้ว +1

    베르님 나중에 기회가 되면 객체지향 설계에 대해서 함 다뤄주시면 안되나욤?ㅠ

    • @wergia
      @wergia  2 ปีที่แล้ว +1

      나중에 다뤄보도록 하겠습니다.

    • @mrbinggrae5954
      @mrbinggrae5954 2 ปีที่แล้ว +1

      @@wergia 갓베르님 최고!!

  • @幻月-v8g
    @幻月-v8g 3 ปีที่แล้ว +3

    이런 실재 개발에서 사용할 수 있는 유용한 알고리즘이 더 많이 올라왔으면 하는 바램입니다.

    • @wergia
      @wergia  3 ปีที่แล้ว

      어떤 알고리즘이 좋을지 연구를 해봐야겠네요 ㅎㅎ

  • @배문성-w4m
    @배문성-w4m 3 ปีที่แล้ว +1

    감사히 잘 배우고 갑니다.
    그리고 몇가지 지문이 있어서 이렇게 올립니다.
    1. 총알 프리팹을 풀링할때 만약에 총알이 여러 종류가 있고 플레이어가 총알을 번갈아 교체하면서 사용할 경우 어떻게 풀링하면 되나요?
    2. 제가 총알뿐만 아니라 적들과 아이템들도 풀링을 하고 싶어요 그래서 적 들과 아이템들도 마찬가지로 여러가지 종류가 있고 각 종류별로 오브젝트풀링을 하려면 어떻게 하면 되나요?

    • @wergia
      @wergia  3 ปีที่แล้ว

      1. Key 값을 따로 주고 가져오면 됩니다!
      2. 역시 마찬가지로 Key 값에 따라서 원하는 오브젝트를 가져오면 됩니다.
      관련된 내용은 나중에 고급 오브젝트 풀링 영상에서 설명할 예정입니다.

    • @배문성-w4m
      @배문성-w4m 3 ปีที่แล้ว

      @@wergia 감사합니다.

  • @greatyisoon-sin3402
    @greatyisoon-sin3402 4 ปีที่แล้ว +2

    개념 확실히 잡아주시네요 큰 도움이 되었습니다. 지식이 일천해서 수시로 보면서 깨달음이 오면 질문을 더 투척할듯 합니다. 좋은 영상 감사합니다.

    • @wergia
      @wergia  4 ปีที่แล้ว

      궁금하신 내용이 있다면 댓글로 알려주세요!
      영상은 만들고 싶은 순서대로 만들고 있지만, 리퀘스트가 있고 다룰 수 있는 내용이면 리퀘스트부터 영상으로 만들까합니다.

  • @susi2622
    @susi2622 3 ปีที่แล้ว +2

    베르님 다른 영상들 보면서 같은 기능을 쉽고 체계적으로 만드는 코딩을 보면서 부족한 이해력으로 그나마 조금씩 이해하면서 적용하고 있습니다. 감사합니다

  • @upzerg
    @upzerg 2 ปีที่แล้ว +1

    선생님, 위 영상에서 처음에 풀링 큐에 총알을 10개만 생성해 두셨는데
    게임을 하다가 총알 50개를 발사하고 나면 좀있다가 풀링 큐에는 50개의 총알들이 저장되어 있는 건가요?

    • @wergia
      @wergia  2 ปีที่แล้ว

      네 맞습니다

    • @upzerg
      @upzerg 2 ปีที่แล้ว +1

      @@wergia 감사합니다 ㅎㅎ
      그런데 만약에 풀링 큐에 너무 많은 오브젝트들이 저장되어버리면 메모리가 부족해질것 같은데 이럴땐 풀링 큐에 있는걸 좀 지워주는 방식으로 설계해도 문제는 없겠죠??!

    • @wergia
      @wergia  2 ปีที่แล้ว +1

      @@upzerg 네 문제없습니다. 다만 풀 안에 들어있는 오브젝트를 초기화하는 시점을 잘 잡아야 합니다. 풀링을 하는 목적이 오브젝트가 생성되고 파괴될 때 발생하는 성능 저하를 막기 위한 것인데, 풀링된 오브젝트를 자주 지우면 풀링을 하는 이유가 없어지기 때문입니다.
      풀링된 오브젝트를 지우는 시점은 주로 씬이나 스테이지를 전환하는 경우가 많습니다.

    • @upzerg
      @upzerg 2 ปีที่แล้ว

      @@wergia 늦은 시간에도 답변해주시다니 ㅠㅠ 감사합니다

  • @irishong3579
    @irishong3579 4 ปีที่แล้ว +2

    강의를 매우 효과적으로 진행하시네요. 다수의 오브젝트 풀링도 강의에 추가해 주시면 좋을 것 같습니다. 지금까지 본 유니티 강의 (국내외) 중 최고 입니다.

    • @wergia
      @wergia  4 ปีที่แล้ว

      나중에 고급편으로 한 번 다뤄보겠습니다!

  • @하하하-i9u
    @하하하-i9u 4 ปีที่แล้ว +2

    위데브님 코딩보고 디펜스게임에 몬스터 풀링으로 쓰고 있는데요.. 콜라이더에 들어온 몬스터를 리스트에담고 제일 먼저 나온 몬스터를 처리하고 다음 몬스터를 공격합니다 그런데 3번째 나온 몬스터가 죽은상태로 나오고 2번째를 공격 안하고 바로 3번째를 공격합니다 .. 추가로 비활성화된 몬스터를 초기화 시켜야 하는지요..?

    • @wergia
      @wergia  4 ปีที่แล้ว +2

      오브젝트 풀링은 한 번 사용했던 게임 오브젝트를 다시 재사용하는 기법이기 때문에 몬스터와 같이 체력이나 살아있는 상태등의 정보를 가지고 있는 게임 오브젝트를 사용하기 위해서는 빌리는 과정에서 반드시 초기화시키는 코드를 넣어주는게 좋습니다.
      그래야 한 번 사용해서 죽은 몬스터가 다시 빌렸을 때 죽어서 나오는 문제가 발생하지 않을 겁니다.
      영상에서는 발사된 이후에 부딪힌 대상에 데미지만 주면 끝인 총알을 예시로 사용했기 때문에 초기화 과정이 없는 것처럼 보였을 겁니다.
      하지만 총알이 날아가는 방향을 지정하고 발사해주는 Shoot 함수에서 총알이 날아갈 방향을 지정해준 것 역시 일종의 초기화 과정으로 볼 수 있습니다.

  • @치킨먹고싶덩
    @치킨먹고싶덩 3 ปีที่แล้ว +1

    씬마다 Public GameObject monster; 에 담긴 몬스터가 다르고,씬마다 다른4종류의 몬스터를 오브젝트 풀링으로 스폰 하고 싶습니다.
    다수의 오브젝트를 오브젝트 풀로 관리하려면 어떤 방식이 가장 좋을까요..ㅠㅠ

    • @wergia
      @wergia  3 ปีที่แล้ว

      C# 제네릭을 이용해야 합니다.

    • @치킨먹고싶덩
      @치킨먹고싶덩 3 ปีที่แล้ว

      @@wergia 답변 감사합니다!

  • @김지훈-l8l1v
    @김지훈-l8l1v 3 ปีที่แล้ว +1

    좋은 강의 감사합니다. 한 가지 여쭤볼게 있는데, GetObject메소드에서 SetParent를 null로 하는 이유는 뭔가요??

    • @wergia
      @wergia  3 ปีที่แล้ว

      부모 오브젝트 없이 월드에 놓기 위해서 입니다.

  • @unit1285
    @unit1285 4 ปีที่แล้ว +1

    좋은 강의네요! 요청이 더 있다면 심화과정의 오브젝트풀링도 영상으로 만들어주시면 좋을것같습니다!!

    • @wergia
      @wergia  4 ปีที่แล้ว

      조만간 그 부분도 영상화해보도록 하겠습니다

  • @껌머리
    @껌머리 3 ปีที่แล้ว

    선생님 감사합니다...

  • @바닷조각
    @바닷조각 2 ปีที่แล้ว +1

    12:55
    여기서 인보크대신에 코루틴을 써도 문제 없나요?

    • @wergia
      @wergia  2 ปีที่แล้ว

      네 코루틴 사용하셔도 됩니다

  • @순후추-j3e
    @순후추-j3e 4 ปีที่แล้ว +2

    오브젝트 풀링이 오브젝트 생성하고 그 오브젝트들 다 쓰면 비활성화 하는건가요?

    • @wergia
      @wergia  4 ปีที่แล้ว

      네, 비활성화 해뒀다가 다시 필요해지면 꺼내서 활성화 및 초기화 해서 사용하는 기술입니다.

  • @하하하-i9u
    @하하하-i9u 3 ปีที่แล้ว +1

    오브젝트 풀링에서 꺼내올때 여러개의 스크립트에서 동시적으로 호출해서 불러오면
    어떻게되죠?
    타워에서 총알발사할때 몇개의 오브젝트에서 발사를 안하네요ㅜ

    • @wergia
      @wergia  3 ปีที่แล้ว +1

      큐 같은 걸 사용해서 요청을 쌓아두고 순서대로 처리하면서 오브젝트를 빌려주는 방식을 사용하면 꼬이지 않게 풀링을 관리할 수 있습니다.

    • @하하하-i9u
      @하하하-i9u 3 ปีที่แล้ว +1

      @@wergia
      큐로 만든 오브젝트 풀링을 A, B, C등의 여러 스크립트에서 동시에 빌려갈때 새로운 큐를 생성해서 그 큐에 빌려갈 스크립트들을 저장시키고 빌려주라는 얘기인거죠?ㅎ

    • @wergia
      @wergia  3 ปีที่แล้ว

      @@하하하-i9u 음, 오브젝트 풀에서 A, B, C 등 다른 오브젝트가 순서대로 줄을 서서 기다리는 형태로 보시면 될 것 같습니다.

    • @하하하-i9u
      @하하하-i9u 3 ปีที่แล้ว +1

      감사합니다!ㅎ

  • @진진자라지리지리-f4z
    @진진자라지리지리-f4z 3 ปีที่แล้ว +1

    12:28

  • @KaneKoHumongous
    @KaneKoHumongous 2 ปีที่แล้ว +1

    사랑해요 뽀뽀 쪽