안녕하세요 update()가 이해가 가질않아서 질문드립니다.
처음 이동에 관한 조건문을 PlayerController Class의 Update()문에 작성하여 매 프레임마다 확인하였는데
이벤트를 사용하여 Managers에서 관리하는 것 까지는 이해를 하였습니다.
그런데 이제 이 이벤트 호출 검사를 Start()에서 하게되는데 이럴 경우 실행시 한번만 체크를 한다고 하셨는데 계속적으로 입력하는 값을 어떻게 검출하는 건가요? Managers의 Update()함수와 상관관계가 있을것 같은데 무슨 관계인지 이해가 가질않습니다.
PlayerController의 Start()함수에 작성하여도 그 안에 호출하는 기능이 다른 클래스의 Update()함수에 있으면 매 프레임마다 검사하는 것인가요?
그럴경우에는 그냥 PlayerController의 Update() 함수에서 바로 검사하는 것과 성능상 차이가없을 것 같은데 이 부분이 이해가 가질않아서 문의드립니다.
답변 2
0
강사님 제가 c#도 다시 보고 책도 보고 이 강의도 다시 처음부터 보고 다시 생각해보았습니다.
문제점
// 아래와 같이 Update()문에서 체크를 계속하면 부하가 심하다.
// 즉 플레이어가 만일 100개가 있다면 100개의 업데이트문마다 체크하므로 비효율적이다.
// 차라리 매니저에 넣어서 공용으로 사용해 이벤트로 넘겨주는것이 성능상에 좋다.
아래 Managers의 업데이트에서 관리
void Update()
{
// 여기서 체크하면 공용인 Update()문 하나가 계속 돌면서 체크해 이벤트를 넘겨줘서 처리하지만
// 이렇게 하지 않으면 Player의 수만큼의 Update()문이 생겨난뒤 그 모든 Update()문이 계속 돌면서 체크해 성능상 부하가 걸린다.
_input.OnUpdate();
}
아래 PlayerController
Managers.Input.KeyAction -= OnKeyboard; // 혹시라도 다른 곳에서 OnKeyboard를 구독신청하고 있다면 구독취소
// 실행하자마자 구독신청.
Managers.Input.KeyAction += OnKeyboard;
// 혹시라도 Managers의 update문을 매틱마다 돌다가 키가 눌리면
// OnKeyboard 함수를 실행해주세요.
// 우리 Update()문은 쉬고 있을게요.
이렇게 해서 모든 많은 수의 ex)Player가 100개여도
하나의 update()문으로 관리한다가 맞나요?
0
네 근데 중요한 부분은 아니니 가볍게 넘어가시기 바랍니다.
어차피 PlayerController를 100개 사용하는 상황은 현실적이지 않아
그냥 평소대로 해도 되긴 합니다.
0
네 그냥 PlayerController의 Update에서 체크해도 됩니다.
Managers의 Update에서 체크한 다음 이벤트를 뿌리는 방식의 장점은,
마우스 기반의 게임에서 원하는 특정 행동 (Drag라거나, 더블클릭이라거나)이 발생했을 때
그 사실을 이벤트 방식으로 뿌려서 구독한 애들이 반응하도록 하는 것인데요.
이렇게 되면 중앙에서 관리해서 Update 체크를 한 번만 해도 되니,
경우에 따라 이점이 있을 수 있습니다.
다만 키보드처럼 프레임 단위로 뭔가를 체크해야 하는 경우라면
그냥 PlayerController의 Update문에서 하는게 사실 낫긴 합니다.
이 부분은 너무 많은 분들의 혼동을 야기해서 Part7부터는 삭제되었습니다.
0
답변 감사드립니다. 아직 이해안가는 부분이 있어서 질문드립니다!
그럼 Start()함수에 있어서 한번만 실행된다고 생각했는데 그것이 아니라
실행시에 이벤트 구독등록을 해서 Managers의 update함수가 계속 돌아가게 만들어서
입력시에 검출하는것인가요~?
제가 Start()함수는 한번만 실행한다 이것때문에 구독연결을하고 체크하고 끝나는거라고
생각했는데 그게아니라 시작시에 바로 연결하고 그 이후에 Managers의 update함수가 계속 돌아가면서
체크하는것인가요~?
감사합니다~!
0
Input 여부는 어디선가에 체크 해야 하니
그것을 InputManager의 Update에서 해주고 있는 것입니다.
PlayerController가 100개 라면 100개의 Update문에서 하는게 아니라
대표로 InputManager의 Update에서 한번 해주는 것이죠.
그런데 다시 말씀드리지만 곧 사라질 예정이므로 적당히 넘어가주시기 바랍니다.
ResourceManager 클래스 관련 질문
1
21
2
몬스터 HP 게이지바 이동
0
20
1
매니저 관련 질문이 있습니다.
0
69
2
비쥬얼 스튜디오에서 unity연결이 없습니다.
0
74
2
UI 기능 관련 질문이 있습니다!
0
70
2
픽셀 좌표 스크린 좌표
0
48
0
전체적으로 코드 읽는게 굉장히 오래 걸리네요...
0
105
2
카메라 #2 수업 캐릭터 쓰러짐 해결
0
96
1
플레이어 움직임이 끝날때, 기울어짐 현상
0
100
1
Input 적용과 관련하여 질문 있습니다.
0
91
1
디버그 불가.. Unity에 연결 불가
0
98
1
달리기 애니메이션 에러
0
98
2
오랜만에 게임을 만들다가 사운드 관련해서 뭔가 궁금한게 있어서 봤습니다
0
75
1
GetKey 오류
0
128
2
에셋을 어디에 올려두신지 알 수 있나요?
0
114
1
재귀호출? 오류나는데 왜 이래요 ?
0
178
6
Animation blending 파라미터 계산
0
75
1
newPos와 to지점이 겹쳐져야 하는거 아닌가요?
0
112
3
오브젝트 복제하니까 자꾸 이런게 뜨면서 꺼집니다
0
96
2
질문있습니다
0
155
2
아 이거 소스코드 같은거 없나요?
0
152
3
질문 드립니다. string.IsNullOrEmpty(name)
0
94
2
@Managers 가 씬에 배치되어 있어도 문제가 되지 않나요?
0
139
2
유니티6 NavMesh 안되는분들
1
193
1





