강의

멘토링

로드맵

Inflearn Community Q&A

pk154421001137's profile image
pk154421001137

asked

[MMORPG Game Development Series with C# and Unity] Part3: Unity Engine

Stamina Gauge #1

코드 중간중간마다 GetComponent<>로 컴포넌트 가져오는 부분 질문입니다.

Written on

·

432

0

저의 얕은 지식으로는 GetComponent<>가 비교적 무거운 작업으로 알고 있습니다.

이 영상에서 보면 업데이트문에서 계속 GetComponent<Collider>로 콜라이더 컴포넌트를 가져오게끔 코딩하셨는데, 저였으면 전역변수로
Coliider parentCollider;
parentCollider= parent.GetComponent<Collider>();
Vector3.up * (parentCollider.bounds);

이런식으로 했을거 같거든요?

전 항상 배울 때 스탠스가 "아 저분이 저렇게 코딩한 건 다 이유가 있겠지? 내 코딩은 뭔가 비효율적일거야" 하고 저를 낮추고 가는 경향이 있거든요.
혹시 저렇게 하신 특별한 이유가 있으셨는지 궁금합니다.

C#unity

Answer 2

1

Rookiss님의 프로필 이미지
Rookiss
Instructor

초보 때 누구나 한 번 겪는 이슈인데요.
결과적으로 보시면 현업에 가서 (심지어 대기업도)
얼마나 난장판으로 코드를 짜는지 보면 그런 부분에선 해탈하게 되고
일단 잘 돌아가면 장땡 << 이라는 마인드가 중요합니다.
중요한 것은 0.00000001%도 차지하지 않는 짜잘한 부분을
얼마나 효율적으로 짜는지에 집중할 필요 없고
정말 부하를 일으키는 부분에 집중하시면 됩니다. (보통 길찾기, AI, 스킬 등이죠)

GetComponent를 캐싱해서 멤버 변수로 들고 있으면서 사용하면 조금 더 효율적인 것이 맞지만,
실제로 그냥 만들다 보면 GetComponent<> 정도를 하는 정도는 많이 볼 수 있고
이 정도를 벌써부터 크게 신경쓸 부분은 아닙니다.
Update를 하면서 매 프레임마다 호출하는 정도가 아니라면 사실 큰 상관 없고
제 경험상 오히려 이런 짜잘한 부분을 넘어가지 못하는 걱정 많은 사람이
큰 그림을 보지 못해 결국 성장을 못하는 경우가 많습니다.

pk154421001137님의 프로필 이미지
pk154421001137
Questioner

금같은 조언 감사합니다.

제가 포폴용으로 작은 게임 하나 만들면서 느낀게 있는데, 의식의 흐름대로 코딩을 하는 것이였습니다(어떻게든 구현만. 유지보수 저 멀리). 나름 그 안에서 설계랍시고 발버둥을 치는 부분들이 있긴한데, 나중에 보면 안한것만 못한 "설계흉내"였죠. 이대로 가다간 의식의 흐름 코딩을 벗어나지 못할 것 같아서 이리저리 찾아보다가 Rookiss님 강의를 보면서 정말 감탄하면서 보고있습니다. "어떻게 하면 저런 큰그림을 보면서 코딩을 할 수 있는거지?"라는 생각을 항상 머릿속에 품으면서 최대한 그 느낌을 배우려고 노력하고 있네요.
나중에 서버랑 DB쪽도 들을 예정입니다.(서버쪽이랑 커뮤니케이션 해야하는데 못알아들으면 안되니까 필수라고 들어서..)


뭔가 주저리주저리 말이 길어졌는데.. 결론은 Rookiss님은 최고입니다.

0

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

질문하신 내용에서 GetComponent<> 사용에 대한 최적화와 관련된 고민을 하고 계신 것으로 보입니다. 게임 개발, 특히 유니티에서는 성능을 고려하여 가능한 최적의 방법을 찾는 것이 중요합니다. GetComponent<>는 실제로 자주 호출될 경우 성능에 영향을 줄 수 있으므로, 일반적으로는 컴포넌트를 참조할 변수를 선언하고, 초기에 한 번 가져오는 방식을 선호하곤 합니다.

비슷한 질문으로, GetComponent 함수 사용에 대한 고민이나 최적화 방법에 대한 질문이 이전에도 제기되었습니다. 그 중에서도 아래의 질문과 답변이 귀하의 관심사와 관련이 있을 것 같습니다.

  • GetComponent 함수 관련 질문이 있습니다!
    • 이 질문에서는 GetComponent<> 함수가 작동하는 방식과 관련된 궁금증을 다루고 있습니다. 특정 게임 오브젝트에 있는 컴포넌트를 가져오는 방식과 관련된 설명이 포함되어 있어, GetComponent<>의 사용 및 최적화 관련 이해를 돕습니다.

이 질문의 답변에서 MonoBehaviour를 상속 받았기 때문에 GetComponent<>를 통해 컴포넌트에 접근할 수 있는 것과 관련된 설명이 포함되어 있습니다. 컴포넌트가 특정 GameObject에 붙어있는 경우 GetComponent를 사용하는 것이 맞지만, 이를 편리하게 사용할 수 있는 다양한 헬퍼 함수 등에 대한 설명도 이루어집니다.

질문하신 컨텍스트와 완전히 일치하지 않을 수도 있지만, GetComponent<>의 사용에 대한 궁금증을 해결하는 데 있어 일정 부분 도움이 될 것입니다.

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

pk154421001137's profile image
pk154421001137

asked

Ask a question