inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진

마무리

안녕하세요 오브젝트 풀에 대해서 궁금한게 있어서 글 남깁니다

96

sunrise3225

작성한 질문수 18

0

안녕하세요 선생님 강의 잘 보고 있습니다.

다름이 아니라 마지막 수업까지 듣고 몬스터에 Poolable 스크립트를 넣어서 오브젝트 풀이 잘 작동하는지 확인을 할려고 하는데 잘 작동은 하는데

image.png

위의 이미지 처럼 오브젝트 풀에 들어갔다가 다시 스폰이 될때 피가 0인 상태 즉 죽었을때 들어간 정보 그대로 다시 스폰이 되어서 플레이어를 따라오지 않더라구요 오브젝트 풀에 들어갔다가 다시 스폰이 될때 몬스터의 값을 초기화 해줘야 될거 같은데... 어디서 어떻게 그 코드를 넣어야 할지 도저히 막막해서 글을 남깁니다...

Poolable 스크립트를 넣지 않고 그냥 실행하면 정상적으로 값이 초기화가 잘 된 상태로 스폰이 됩니다.

C# unity

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. sunrise3225님.

유니티에서 오브젝트 풀링을 사용하여 몬스터처럼 자주 생성되고 소멸되는 오브젝트를 관리할 때, 문제인 ‘상태 초기화’는 매우 흔한 상황입니다. 오브젝트가 풀에 돌아갔다가 재사용될 때, 이전에 유지되었던 상태(예: 체력, 위치, 애니메이션 상태 등)가 문제가 될 수 있습니다. 이를 해결하기 위해서는 오브젝트가 풀에서 리턴될 때 상태를 초기화하는 부분을 추가해야 합니다.

오브젝트가 풀에 반환되기 전에 상태를 초기화하는 방법은 다음과 같습니다:

  1. Poolable 스크립트 수정: Poolable 스크립트에 ResetState()와 같은 이름의 메서드를 추가하세요. 이 메서드에서는 오브젝트의 상태를 초기화할 수 있습니다.
public class Poolable : MonoBehaviour
{
    public bool isUsing;

    public void ResetState()
    {
        // 예시: 체력 초기화
        Health = MaxHealth;
        // 다른 초기화 코드들
    }
}
  1. PoolManager 수정: 스크립트에서 오브젝트가 풀에서 꺼내질 때마다 ResetState()를 호출하도록 설정하세요.
public Poolable Pop(Transform parent)
{
    Poolable poolable;

    if (_poolStack.Count > 0)
        poolable = _poolStack.Pop();
    else
        poolable = Create();

    poolable.ResetState(); // 상태 초기화 호출

    poolable.gameObject.SetActive(true);
    poolable.transform.parent = parent;
    poolable.isUsing = true;

    return poolable;
}

이렇게 하시면 풀에서 오브젝트가 꺼내질 때마다 상태가 초기화되어, 항상 초기값으로 시작하게 됩니다.

유사한 문제에 대한 기존 답변도 참고하실 수 있습니다. 이는 오브젝트 풀 매커니즘을 정확히 이해하고 관리하도록 도움을 줄 것입니다:
- 유니티 오브젝트 풀링 구현에서의 상태 초기화 문제
- 오브젝트 풀링 시 상태 초기화의 중요성

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

UI 기능 관련 질문이 있습니다!

0

34

2

픽셀 좌표 스크린 좌표

0

32

0

전체적으로 코드 읽는게 굉장히 오래 걸리네요...

0

72

2

카메라 #2 수업 캐릭터 쓰러짐 해결

0

84

1

플레이어 움직임이 끝날때, 기울어짐 현상

0

83

1

Input 적용과 관련하여 질문 있습니다.

0

75

1

디버그 불가.. Unity에 연결 불가

0

82

1

달리기 애니메이션 에러

0

88

2

오랜만에 게임을 만들다가 사운드 관련해서 뭔가 궁금한게 있어서 봤습니다

0

66

1

GetKey 오류

0

109

2

에셋을 어디에 올려두신지 알 수 있나요?

0

107

1

재귀호출? 오류나는데 왜 이래요 ?

0

169

6

Animation blending 파라미터 계산

0

68

1

newPos와 to지점이 겹쳐져야 하는거 아닌가요?

0

97

3

오브젝트 복제하니까 자꾸 이런게 뜨면서 꺼집니다

0

88

2

질문있습니다

0

143

2

아 이거 소스코드 같은거 없나요?

0

142

3

질문 드립니다. string.IsNullOrEmpty(name)

0

87

2

@Managers 가 씬에 배치되어 있어도 문제가 되지 않나요?

0

136

2

유니티6 NavMesh 안되는분들

1

175

1

Unity6 Unity-Chan Material 마젠타 문제 해결법

7

526

1

GetComponent<Poolable> 질문드립니다.

0

102

2

UI 불러오지 못함

0

118

2

UI 자동화 #1 - Util.cs의 FindChild함수에서 component.name에 컴포넌트 이름이 뜹니다.

0

155

2