2023. 11. 16. 20:38ㆍGAME/Unity
흠! 어제의 이론대로면 가능할것 같았는데 실패하였다.
일단 계속 디버깅을 통해서 타고들어갔는데, 심각한 문제를 발견
생각지도 못한 델타타임을 변환해 주는 함수가 잘못되었던것... 지금까지 두자릿수를 넘지 않은 델타타임을 적용해서 눈치를 못챘다;;
여기서 거꾸로(MSB 부터 LSB) 델타타임을 쌓았는데 Reverse를 안해주어서 계속 거꾸로 들어가서 이벤트를 이상하게 인식하는 문제였다.
그러면 array로 변환하기 위해서 Getbyte함수를 써서....
근데 또 생각해보면 BitConverter.GetBytes는 시스템 엔디안 방식에 따라 다르게 나온다고 되어있으니,
convertDelta를 넣으면 리틀 엔디안방식에서는 거꾸로 나올것이고 빅 엔디안 방식에서는 그대로 나올것.
그렇다면 빅 엔디안일때 Reverse를 해주는게 맞음
근데 이렇게 할 경우, 저번에 발생한 공백의 문제 생김....(4바이트를 채우지 못한 칸은 다 0으로 처리됨)
예를 들어서, 240이라는 값을 델타타임 가변 바이트 규칙에 맞게 변환시키고 GetByte함수를 실행하면
129,112,0,0 이라는 바이트 배열이 나온다. 근데 이 0이 왜 위험하나면 int로 변환할때 0까지 포함되서 이런식으로 될 수도 있음
? 근데 뭔가 이상함을 느낌 .. 다시 다시
위에 GetByte함수는 멀쩡함.. 엔디안에 상관없이 뒤집기 필수 하지만?
뒤집는다면 이렇게 됨... 이러면 리틀 엔디안 방식에서는 0이 작은자리부터 시작이니까 0,0,112,129
즉 81700000 이 되겠지. 그니까 뒤집기 전에 0을 날리는 작업 필요! --> 해결은 같았지만 원인은 잘못분석했다.
너무 헷갈리네;;
이렇게 체크 된 바이트 배열에?
Reverse를 해준다면.. 112,127이 되니까 81 70 이 될것.
저 CheckGetBytes 함수를 좀 수정했는데
여기에 지장이 또 가니까 수정
델타타임을 계산할때는 Bigendian 방식이니까 뒤집어서 읽으면 됨! 굿.
'GAME > Unity' 카테고리의 다른 글
작곡 프로그램 개발 일지 25 (0) | 2023.11.17 |
---|---|
작곡 프로그램 개발 일지 23 (0) | 2023.11.15 |
작곡 프로그램 개발 일지 22 (0) | 2023.11.13 |