_coPatrol==null 질문
280
작성한 질문수 23
안녕하세요! 항상 강의 잘 듣고 있습니다.(키보드도 잘 쓰고 있습니다.)
protected override void UpdateIdle()
{
base.UpdateIdle();
if(_coPatrol!=null)
{
StopCoroutine(_coPatrol);
_coPatrol=null;
}
}
로 null 체크하는 부분 관련하여 질문드립니다.
강의 코드에서는 UpdateIdle() 에서
if(_coPatrol=null)
로 확인하고 Coroutine을 실행하고 있는데요,
다음과 같이 생각하여 if문을 지우고 UpdateIdle에서 곧바로 StartCoroutine을 하도록 하였습니다.
protected override void UpdateIdle()
{
base.UpdateIdle();
_coPatrol = StartCoroutine("CoPatrol");
}
-> 어차피 CoPatrol이 실행되면 State가 Moving상태가 되어 Coroutine이 2중으로 실행되지 않는다. 그러므로 StartCoroutine만 놔둬도 됨.
만약 갈 장소 검색에 실패하거나 CoPatrol이 완료되면 Idle이 되어 다음 Frame에 CoPatrol을 수행한다.(반복)
그래서 실행했을 때의 화면은 다음과 같습니다.
https://youtu.be/yHUq12WU2dA
강의 코드에서는 깔끔하게 해당 목적지로 이동하고 끝이지만, 수정한 코드에서는 정신없이 왔다갔다 하다가 해당 목적지로 이동하는 현상이 보입니다.
곰곰이 생각해보았으나 마땅한 이유가 생각나지 않아 질문드립니다.
답변 1
0
이런 부분에 대한 해결책은 스스로 찾으셔야 합니다.
두 코드 사이의 차이라면 null 체크로 인해
-> 어차피 CoPatrol이 실행되면 State가 Moving상태가 되어 Coroutine이 2중으로 실행되지 않는다. 그러므로 StartCoroutine만 놔둬도 됨.
위 가정을 했냐 안했냐의 차이 정도이니,
실제로 if (_coPatrol != null) 안으로 들어오는 케이스가 있는지
breakpoint를 잡고 확인해보면 확실히 알 수 있겠죠.
일반적으로 Patrol 상태라 해도 타격을 받았다거나, 길이 막혔다거나 하면
다른 상태로 바뀌는게 일반적이긴 하니, 기존의 코루틴은 꼼꼼히 취소해주는 것이 좋습니다.
Lessons 3 & 4 don't have subtitles unfortunately
0
39
1
MessagePack
0
105
1
본인 플레이어 이동 관련 질문
0
69
1
Part7 Part9 질문이 있습니다.
0
89
1
.
0
131
1
.
-1
119
2
게임 로직 루프에서 게임 틱 누락으로 인한 높은 CPU 사용 문제
0
103
1
타일 팔레트 깔았는데도 안돼요
0
149
2
2D로 그냥 만들어도 되나요?
0
95
2
지난 강의와 이어지는게 맞을까요?
0
96
2
순환참조 문제로 인해 발생하는 문제는 없을까요?
0
166
2
유니티 클라와 C++서버연동
0
291
2
멀티플레이 테스트 환경 관련 질문입니다
0
227
3
강의 후반부에 순서 동기화를 위해 잡큐를 사용 안 한 부분 질문입니다!
0
164
2
코드 관련한 몇 가지 질문입니다!
0
168
2
3d 프로젝트 이동 동기화 관련
0
343
4
파트 7 스트레스 테스트 질문 드립니다.
1
204
2
맵 이동 방식
0
144
0
맵 이동 관련해서 질문드립니다.
0
97
1
안녕하세요 도저히 알 수 없는 오류가 나와서 질문드려요,,
0
223
2
안녕하세요. 일전에 질문 드린 포폴 준비 관련 질문의 추가 질문입니다!
0
173
1
[팁] 2024년 기준 버전 이슈?
0
469
1
SendBuffer.cs 삭제 후 대체 되는 부분의 장단점?
1
210
1
지금 강의의 유니티 클라를 IOCP 서버와 연동하는 것
0
343
2





