• [일반] 유니티 GetComponent질문좀...2019.10.20 PM 09:17

게시물 주소 FONT글자 작게하기 글자 키우기

        if (target != null)

 

        {

            if (target.tag == BC || target.tag == PC)

            {

                ///타겟이 챔피언이면 Champion_Manager클래스의 체력을 관측한다.

                Champion_Manager targetCM = target.GetComponent();

                targetHP = targetCM.Current_HP;

            }

            else if (target.tag != BC || target.tag != PC)

            {

                ///타겟이 챔피언이 아니면 ObjectHP_EXP_Ctrl의 체력을 관측한다.

                ObjectHP_EXP_Ctrl objectHP = target.GetComponent();

                targetHP = objectHP.HP;

            }

        }

 

타겟으로 지정한놈의 체력을 타겟에게 붙어있는 스크립트에 접근해서 가져와야 하는데...

 

문제는 GetComponent는 update나 coroutine에서 사용하면 성능에 많이 안좋은걸로 알아서요 이걸 어떻게 해야할지

 

타겟은 실시간으로 바뀔수도 있구요

 

그래서 타겟이 바뀌었는지 그대로인지만 파악하면 될거 같은데 어떻게 비교를 해야할까요

 

변수가 바뀌엇는지 감지하는 api가 있을까요?

댓글 : 7 개
그정도 성능은 그냥 쓰시다가 나중에 최적화하면서 바뀌시면되지않을까요?
개발하면서 저는 큰 문제 안일으켰었는데...
혹시나 나중에 문제 되면 인터페이스 선언해서 공통으로 선언해서 스크립트를 일관전으로 정리하면되지않을까싶어요
아 이게 만들고 나서 머신러닝 적용해서 딥러닝 연산할거라...불안해서요
타겟 프로퍼티를 추가해서 setter 에서 새로운 타겟이 이전이랑 다른지 판단하는게 좋을 것 같네요.
겟컴포넌트 호출 자체를 줄이는 수밖에 없습니다.
근데 겟컴포 뿐만아니라 , 게임로직에서는 부하가 큰 작업은 최대한 줄이든가 최적화를 하는게
기본입니다.
그래서 플레그나 캐쉬를 해놓는게 무난한 처리죠.

기존 타겟을 저장하고 있다가 ,
업데이트 루틴때 이전 프레임과 같은 타겟이면
겟컴포넌트 할필요 없이 , 그냥 체력값만 가져오면 대겠죠.
getinstanceID?
방법은 여러가지일테지만 얼른 생각나는대로 적어볼게요.
1. 아마도 게임 매니저 싱글톤을 두고 계실텐데, 거기에 public static Dictionary<GameObject, HPContainer> Buffer; 를 마련해두시고, 각 HPContainer 개체들이 생성되거나 파괴될 때 스스로를 추가/삭제하도록 합니다.
2. 게임 매니저에서 taget 게임오브젝트로 해당 HPContainer을 얻어낼 수 있습니다.
타겟 자체가 클릭같은 특정 조작에서 동작하는거라면, target을 GameObject로 잡지 않고, 픽하는 과정에서 GetComponent를 한 클래스를 target으로 가져오는게 나을 수도 있겠네요.
본문의 코드만 보자면 ObjectHP_EXP_Ctrl 과 Champion_Manager 를 분기하고 있는데 이것도 공통된 부모 클래스를 하나 둬서 target을 픽할때 공통으로 사용하는 부모 클래스로 받아오면 위 부분에 한해서는 tag도 체크할 필요없이 target.HP 같은식으로 접근 가능할 것 같은데요.
친구글 비밀글 댓글 쓰기

user error : Error. B.