Unity WebGL x IoT ~ 스마트 잠금을 만들었습니다 ~ NCMB 편
소개
어떤 사정이 있고, 스마트 락 원한다. 스마트 잠금 슈퍼 편리. 만들자. 되었기 때문에 만들었습니다만. 다양한 함정을 밟았으므로 그것을 써 갑니다. 덧붙여 대량으로 함정을 밟은 이유는 이하와 같은 이상한 구성으로 했기 때문입니다. (이 구성으로 한 이유는 위에서 "빨리 만들어라"라는 압력과 내 스킬)
in Unity WebGL (on Editor)
우선, 나는 Unity에서 움직이도록 만들었습니다. 거기서 디버그를 하면, 니프티 클라우드 모바일 백엔드(NCMB)로 함정을 밟았습니다. NCMB는 데이터베이스 기능 만 사용합니다.
NCMB에서의 함정
기본적으로 NCMB는 우수합니다. 사용하기 쉽고, 일본어로 샘플이나 자료도 풍부하고, 무료 테두리도 충분합니다. 게다가 Unity 용 애셋 중에서도 드물게 WebGL에서도 사용할 수 있습니다. 그러나 약간의 함정도있었습니다.
함정 1 : NCMBSetting.cs에 연결 GameObject
NCMB의 공식 문서 에서는 다음과 같이 되어 있습니다.
우선, 나는 Unity에서 움직이도록 만들었습니다. 거기서 디버그를 하면, 니프티 클라우드 모바일 백엔드(NCMB)로 함정을 밟았습니다. NCMB는 데이터베이스 기능 만 사용합니다.
NCMB에서의 함정
기본적으로 NCMB는 우수합니다. 사용하기 쉽고, 일본어로 샘플이나 자료도 풍부하고, 무료 테두리도 충분합니다. 게다가 Unity 용 애셋 중에서도 드물게 WebGL에서도 사용할 수 있습니다. 그러나 약간의 함정도있었습니다.
함정 1 : NCMBSetting.cs에 연결 GameObject
NCMB의 공식 문서 에서는 다음과 같이 되어 있습니다.
라고 하는 것으로 나는 「이름을 알기 쉽도록 바꾸는… 이것이 실수였습니다.
어쩐지 움직이지 않았기 때문에 로그를 보면, 다음과 같은 에러가 나왔습니다.
NullReferenceException: Object reference not set to an instance of an object
NCMB.Internal.NCMBConnection+<_Connection>d__29.MoveNext () (at Assets/NCMB/Script/NCMBConnection.cs:136)
그래서 해당 코드를 보면 다음과 같이 되어 있었습니다.
Assets/NCMB/Script/NCMBConnection.cs
133 private void _Connection(object callback)
134 {
135 GameObject gameObj = GameObject.Find("NCMBSetting");
136 NCMBSettings settings = gameObj.GetComponent<NCMBSettings>();
137 settings.ConnectionAsync(this, callback);
138 }
다메쨩. NCMBSetting.cs를 첨부한 객체의 이름이 NCMBSetting이 아니면 안됩니다. (혹은 이 코드를 바꿀까.) 좀 더 강한 말을 하고 싶었다.
함정 2 : 저장할 문자열
NCMB의 데이터스토어에 정보를 저장하려고 하면 일부 데이터가 에러를 돌려받는다. 여러 번 시도하는 동안 문자열에
=
가 공통적으로 포함되어 있음을 알았습니다. 확실히 수상하다. 라고 생각했으므로, 인코딩을 하고 있는 곳을 개량했습니다.무엇을 했는가 하면, a~z, A~Z만 그대로 보내, 다른 문자는 이스케이프 하도록(듯이) 하고 있습니다. 개량 전은 z~A도 그대로 보냈던 것 같다. (데이터는 URL 인코딩되어 송신·수신하는 것 같다)
Assets/NCMB/Script/MiniJSON.cs
505 void SerializeString (string str)
506 {
507 builder.Append ('\"');
508
509 char[] charArray = str.ToCharArray ();
510 foreach (var c in charArray) {
511 switch (c) {
512 case '"':
513 builder.Append ("\\\"");
514 break;
515 case '\\':
516 builder.Append ("\\\\");
517 break;
518 case '\b':
519 builder.Append ("\\b");
520 break;
521 case '\f':
522 builder.Append ("\\f");
523 break;
524 case '\n':
525 builder.Append ("\\n");
526 break;
527 case '\r':
528 builder.Append ("\\r");
529 break;
530 case '\t':
531 builder.Append ("\\t");
532 break;
533 default:
534 int codepoint = Convert.ToInt32 (c);
----------------------------------------------------------------------------
535 -- if ((codepoint >= 32) && (codepoint <= 126)) {
535 ++ if (((codepoint >= 65) && (codepoint <= 90)) || ((codepoint >= 97) && (codepoint <= 122)))
----------------------------------------------------------------------------
536 builder.Append (c);
537 } else {
538 builder.Append ("\\u");
539 builder.Append (codepoint.ToString ("x4"));
540 }
541 break;
542 }
543 }
544
545 builder.Append ('\"');
546 }
함정 3 : WhereContainedIn 등을 사용할 수 없다
증상이나 해결법이 모두 이 기사에 걸렸습니다. 그래서 거의 생략합니다. 다만, 코드의 해당 범위가 알기 어려웠기 때문에 행수만 쓸 때입니다.
772・773行目
부근입니다.The next is...
음, 점점 다음에 갑니다. 다음은 Unity WebGL편입니다.
시리즈 일람
라즈파이편
Reference
이 문제에 관하여(Unity WebGL x IoT ~ 스마트 잠금을 만들었습니다 ~ NCMB 편), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kumaS-kumachan/items/bd4df506f01f5014b154텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)