AndroidゲームをUnityで作ろうとした時実機でnull pointer dereferenceが出る問題

unityを使用してAdsも実装後、いざ実機でテストしようとしたらnull pointer dereferenceが出てクラッシュする問題。

 

f:id:medicturuyama:20240229153318j:image

 

調べるとunityのFormで2020から2022のバージョンで発生しているエラーらしい。

https://forum.unity.com/threads/unity-2020-null-pointer-dereference.1247122/

 

色々調べていくうちに、ads。つまりAdmobが悪さしているんじゃないかとあたりをつけたり、

 

一つ一つオブジェクトを破棄しながらクラッシュ原因を探したりといろいろ試したが、ダメ。

 

Vsyncも違う。

 

しかもこのクラッシュ、ゲーム実行直後ではなくゲーム中にしばらく経ってから発生する。

 

メモリ不足も違うなーとかいろいろやってるうちに、

 

Valkanが悪いんじゃないかという記事を見つけた。

https://ja.stackoverflow.com/questions/74322/androidでの特定の機種でのエラー-java-lang-error-null-pointer-dereference-について

 

早速グラフィックAPIのスロットからValkanを取り除くと無事に起動、良かった良かった。

 

どうやら使っていたアセットの一部がValkanに対応していない。そんな罠もある

 

 

Unityデフォルトのローカライズ周り

最初に、プレハブモードだと上手くいかないことが多い、たまに壊れる。もちろんプレハブモードでも編集できる。
安全にプレハブバリアントなどにしたかったらさきにローカライズしてからになる。

 


GameObjectLocalizerコンポーネントはモデルの移動縮尺やフォント、などを言語ごとに編集できる
Cangedはローカライズで変わった際イベントを送信させる目的で使用すること


このままだとローカライズを変更しても文字が変更されない 

TextMeshProコンポーネントを右クリック→Localizetionを押すすると自動でLocalize Strngがアタッチされる

 


ウィンドウ→アセット管理→に、ローカライズ用の項目がある


ローカライズテーブルのKeyは1つのTextMeshProに対応しているイメージ

 


プロジェクトウィンドウ右クリックローカライズで出てくるペセウドローカライズは、豆腐もじをみつけることができる


他の言語に対応させるにはフォントが対応していないといけない 豆腐文字はフォントが対応していない際にでる

 

 

UnityでUnityエディタのようなカメラを作る方法

基本的にカメラはVirtualCameraを使用したほうが後で楽になる場合が多い 3rdパーソンなどほかにもカメラ機能があるが最初は実装が楽で操作が似ていてもあとから大変な目に遭う場合が多い。ほかにも自由度が高く、他のアセットなどに応用が効く場合が多い


移動の基本 wasdなどで使う カメラの向きに応じて移動させる
transform.Translate(Camera.main.transform.forward*Time.DeltaTime*speed*player.GetAxis("")); 

 


GetAxisをマウスのスクロールにすると移動する

 

 


CinemacineはVitualCameraを使用 AimにはPov BodyはTransposerを使用


RewiredにはBridgeが必要、パッケージにCinemacineをインストールすること

 


cinemacineObj.GetCinemachineComponent(CinemachineCore.Stage.Aim).GetComponent<CinemachinePOV>()
pov.m_HorizontalAxis.m_MaxSpeed=回転スピード
pov.m_VerticalAxis.m_MaxSpeed=回転スピーチ


回転スピードを0にすると回転しなくなる これを利用して


if(player.GetButton("MouseRight"))とすると右クリックで回転し、eleseで0にすると回転しない、エディタのカメラと似たような作りにできる


水平移動を実装する。CinemacineのOffsetを使うのもいいが、あれはずれていくだけでリセット処理が大変だし使いづらい。


if(player.GetButton(weelClick){
mainCineCamera.Transform.Translate(Camera.main.transform.up*Time.deltaTime*speed*cameraY);


mainCineCamera.Transform.Translate(Camera.main.transform.right*Time.deltaTime*speed*cameraX);

}


カメラズーム機能を実装する、ただしUIでもスクロールしたい場合一工夫必要である


処理の前にUI上にカーソルがある場合無視するように作ると楽
if(EventSystem.current.IsPointerOverGameObject()){
return;
}
mainCineCamera.transform.Translate(Camera.main.transform.forward*Time.deltaTime*scroolSpeed*player.GetAxis(“MouseScrool”));

 

 

 

 

全ての子供を最下層まで見てリストを作成する関数メモ


    

public List<GameObject> FindCilds(Transform obj)

{
     List<GameObject> list = new List<GameObject>();
     List.Add(obj.GameObject);
     foreach(Transform child in obj)

     {

          list.AddRenge(FindChild(child)) ;
     }
     return list;
}

 

 

 

 

 

Oculus QuestのSideQestでエラーが出る問題について

SideQestを使用してVRを開発しようとした際にハマったメモ

https://sidequestvr.com

f:id:medicturuyama:20240208115827j:image

 

最近のサンドボックスアプリ開発ではアプリストアの審査を受ける必要がある場合が多い、

 

かと言ってテストフライトのように3日で使用期限が来るようなアプリは使いづらい

 

その中で間をとるような仕組みを提供してくれたサイドクエストだかサイドローディングを行う中でエラーが出た。

 

Premature end of stream neede 1 more bytes

 

この1が2だったりする人もいるらしい、調べたがどうやらケーブルが純正じゃないと行けないだとかデバイスの問題だとか色々書かれていたが、手元に純正ケーブルがないため他に方法がないか探していた

f:id:medicturuyama:20240208121015j:image

 

なぜか1万円もするケーブルだ。た、高い

 

意外とあっさり解決した。unityEditor内にあるVR関連のAPIレベルを下げればいい

 

 

プライバシーポリシー

当ブログにおける個人情報の取扱いについて、以下のとおりにプライバシーポリシーを定めます。

 

運営者情報

 

運営者:メディック鶴山
ブログURL:https://medicturuyama.hatenablog.com/
お問い合わせ:mnh3ebbs@gmail.com

 

個人情報の利用目的

 

当ブログでは、メールでのお問い合わせやコメントの際に、お名前(ハンドルネーム)・メールアドレス等の個人情報をご登録いただく場合があります。

 

これらの個人情報は、質問に対する回答や必要な情報をご連絡するために利用し、それ以外の目的では利用しません。

 

個人情報の第三者への開示

 

個人情報は適切に管理し、以下に該当する場合を除いて第三者に開示することはありません。
・本人のご了解がある場合
・法令等への協力のため、開示が必要となる場合

 

個人情報の開示・訂正・追加・削除・利用停止

 

個人情報の開示・訂正・追加・削除・利用停止をご希望の場合には、ご本人であることを確認したうえで、速やかに対応致します。

 

Cookieについて

 

当ブログでは、一部のコンテンツにおいてCookieを利用しています。
Cookieとは、webコンテンツへのアクセスに関する情報であり、お名前・メールアドレス・住所・電話番号は含まれません。

 

また、お使いのブラウザ設定からCookieを無効にすることが可能です。

 

広告の配信について

 

当サイトは第三者配信の広告サービス(Google Adsense)を利用しています。

 

広告配信事業者は、過去にアクセスしたサイトの情報に基づきユーザーの興味に応じた広告を表示するためにCookie(クッキー)を使用することがあります。

 

また、第三者がコンテンツおよび宣伝を提供し、訪問者から直接情報を収集し、訪問者のブラウザにCookie(クッキー)を設定したりこれを認識したりする場合があります。

 

なお、Cookie(クッキー)を無効にする設定およびGoogleアドセンスに関する詳細はポリシーと規約にてご確認ください。

 

アクセス解析ツールについて

 

当ブログでは、Google Inc.が提供するアクセス解析ツール「Googleアナリティクス」を利用しています。
Googleアナリティクスは、トラフィックデータの収集のためにCookieを使用しています。このトラフィックデータは匿名で収集されており、個人を特定するものではありません。この機能はCookieを無効にすることで収集を拒否することが出来ます。

 

Googleアナリティクスの詳細は「Googleアナリティクス利用規約」をご覧ください。

 

当ブログへのコメントについて

 

当ブログでは、スパム・荒らしへの対応として、コメントの際に使用されたIPアドレスを記録しています。
これはブログの標準機能としてサポートされている機能で、スパム・荒らしへの対応以外にこのIPアドレスを使用することはありません。

 

また、以下の内容を含むコメントは運営者の裁量によって削除することがあります。
・特定の自然人または法人を誹謗し、中傷するもの
・極度にわいせつな内容を含むもの
・禁制品の取引に関するものや、他者を害する行為の依頼など、法律によって禁止されている物品、行為の依頼や斡旋などに関するもの
・その他、公序良俗に反し、または管理人によって承認すべきでないと認められるもの

 

著作権について

 

当ブログで掲載している画像の著作権・肖像権等は各権利所有者に帰属します。権利を侵害する目的ではありません。

 

記事の内容や掲載画像等に問題がある場合、各権利所有者様本人が直接メールでご連絡下さい。本人確認後、対応致します。

 

また、当ブログのコンテンツ(記事・画像・その他プログラム)について、許可なく転載することを禁じます。引用の際は、当ブログへのリンクを掲載するとともに、転載であることを明記してください。

 

免責事項

 

当ブログからリンクやバナーなどによって他のサイトに移動した場合、移動先サイトで提供される情報、サービス等について一切の責任を負いません。

 

当ブログのコンテンツについて、可能な限り正確な情報を掲載するよう努めていますが、誤情報が入り込んだり、情報が古くなっている場合があります。当ブログに掲載された内容によって生じた損害等の一切の責任を負いかねますのでご了承ください。

 

プライバシーポリシーの変更について

 

当ブログは、個人情報に関して適用される日本の法令を遵守するとともに、本ポリシーの内容を適宜見直しその改善に努めます。

 

修正された最新のプライバシーポリシーは常に本ページにて開示されます。

 

初出掲載:2024年02月08日
最終更新:2024年02月08日