Unityビルドでandroid64bit対応&aab対応&playgames対応&facebooksdk対応&admob対応した自分用メモ

無数のUnityバージョンや、各種sdkを入れたきたノウハウの結集。

結論!下記組み合わせで入れれば、AndroidStudioを通さずUnity上ビルドだけですべて対応できます。

  • Unity2017 4.301f
  • gradleビルド(Custom Gradle Templateは利用しないで可)
  • lp2cppビルドにする。チェックするのは、 ARMv7 , ARM64のみ。 x86 はチェック外す。(x86はチェックするとGooglePlayに申請できない)
  • Proguardは無効
  • AndroidはminSdkVersionはOS4.4以上〜でTargetversionはauto
  • GooglePlayGames はこちらから、バージョンは「0.9.64」

> マイナーバージョン違いでいろんなところで躓いたので注意

  • Admob は「Google Mobile Ads Unity Plugin v3.18.3」を入れた。
  • FacebookSDKは、バージョン「7.17.2」 これも注意。

注意点

  • 事前に、GooglePlayConsoleや、Facebook、admobの登録は必要です。
  • lp2cppビルドはとても時間かかるので注意
  • x86はチェックを外さないと、64bit対応したのにまたビルドし直す必要がある
  • PlayServiceResolverや、各種sdkは、関連ファイルを削除してから入れ直すなどしないと基本沼にハマる。
  • aabファイルは、アプリ署名を忘れずに、
  • あと公開前のテストで、adbコマンドや、GoogleplayConsoleからのダウンロードでもインストールできないので、「内部アプリの共有」の機能つかって共有すればインストール可能。

Unityで、「NullReferenceException: Object reference not set to an instance of an object UnityEditor.InspectorWindow.OnSelectionChange () (at」

Unity上で下記エラーがでるようになった。

NullReferenceException: Object reference not set to an instance of an object UnityEditor.InspectorWindow.OnSelectionChange () (at

確認したところ、playGamesPlugin周りが影響しているようだけど、
Unityを再起動したら治る。

参考記事

https://github.com/playgameservices/play-games-plugin-for-unity/issues/2029

最新版のplaygameの0.9.64でも同じ事象になった。

確認環境

  • Unity2017 4.301f
  • play-games-plugin-for-unity 0.9.64

NGUIのUiButtonで、タップ時とタップを離した時のイベント取得メモ(ロングタップ等の判定に)

タップイベントを取得したいスクリプトに下記を追記し、

サンプルコード


public void OnPress(bool isDown)
{
Debug.Log("onPress: " + UIEventTrigger.current.name);

if (UIEventTrigger.current.name.Equals("Btn_Boost"))
{
jetBtnFlg = true;
}

}

public void OnRelease()
{

Debug.Log("onRelease:" + UIEventTrigger.current.name);

if (UIEventTrigger.current.name.Equals("Btn_Boost"))
{
jetBtnFlg = false;
}

}

あとは、NGUIのUiButtonに、「UI Event trigger」をアタッチし、

下記キャプチャを参考に、Notifyに「OnPress」と「OnRelease」を伝達したい、
上記コードのGameObjectをセットし、OnPressとOnReleaseメソッドを選択してあげるだけ!

NGUI UI Event Trigger

NGUIのUiButtonで、タップ時とタップを離した時のイベント取得メモ(ロングタップ等の判定に)

タップイベントを取得したいスクリプトに下記を追記し、

サンプルコード


public void OnPress(bool isDown) { Debug.Log("onPress: " + UIEventTrigger.current.name); if (UIEventTrigger.current.name.Equals("Btn_Boost")) { jetBtnFlg = true; } } public void OnRelease() { Debug.Log("onRelease:" + UIEventTrigger.current.name); if (UIEventTrigger.current.name.Equals("Btn_Boost")) { jetBtnFlg = false; } }

あとは、NGUIのUiButtonに、「UI Event trigger」をアタッチし、

下記キャプチャを参考に、Notifyに「OnPress」と「OnRelease」を伝達したい、
上記コードのGameObjectをセットし、OnPressとOnReleaseメソッドを選択してあげるだけ!

よく忘れてしまうのでメモ!

あと、「Event Trigger」と 「UI Event Trigger」というのがあり、NGUIのものはUI Event Triggerになるので注意!

Asset StoreのDetonator 〜というのをUnity2017にいれた際の対処

無料でめちゃくちゃクオリティの高い爆発できる「Detonaor〜」というassetを使っているのですが、

これ → Detonator Explosion Framework

Unity5以降を使っているとShader周りなどでエラーがでるのでメモ。


Shader error in 'HeatDistort': 'tex2Dproj': no matching 2 parameter intrinsic function; Possible intrinsic functions are: tex2Dproj(sampler2D, float4|half4|min10float4|min16float4) at line 42 (on gles3) Compiling Vertex program Platform defines: UNITY_NO_DXT5nm UNITY_NO_RGBM UNITY_ENABLE_REFLECTION_BUFFERS UNITY_FRAMEBUFFER_FETCH_AVAILABLE UNITY_NO_CUBEMAP_ARRAY UNITY_NO_SCREENSPACE_SHADOWS UNITY_PBS_USE_BRDF3 UNITY_NO_FULL_STANDARD_SHADER SHADER_API_MOBILE UNITY_HARDWARE_TIER1 UNITY_COLORSPACE_GAMMA UNITY_LIGHTMAP_DLDR_ENCODING

Asset自体Unity4までしか対応していないのもあり、
僕は、HeatDistort一旦シェーダー無効にして対応しました。

このasset昔からあるけど、マジ最強!

Unityで、実機だけデバッグログを表示しない設定

アプリを長期間かけて作っていると色々デバッグログを仕掛けたくなるもの、
これがどんどん増えていくと、リリースする前に一気に非表示にしたいもの。

で、スマホはデバッグログを表示しないで、Unity上で作っている際は一括で非表示する方法

Unity2017〜?用


void Awake(){ #if UNITY_EDITOR // Unity上で、デバッグログ出力 Debug.unityLogger.logEnabled = true; #else // それ以外(実機)はデバッグログを出力しない Debug.unityLogger.logEnabled = false; #endif }

Unity5系?用


void Awake(){ #if UNITY_EDITOR // Unity上で、デバッグログ出力 Debug.logger.logEnabled = true; #else // 実機はデバッグログを出力しない Debug.logger.logEnabled = false; #endif }

無効にするタイミングは一番最初にするように調整してね。

pythonをはじめて使った際のメモ 1

コメントアウト & 変数 & 演算

2系、3系かまずチェック大きく違う


$ python -V Python 3.6.4

実行


$ python

で対話式で実行。


$ python testfile.py

でファイルを指定して実行。

コメントアウト


# 行単位のコメントアウト

""" 複数行コメント アウトです。 """

def main(): """ test1 """ print "hoge" """ test2 """

このtest2の複数行コメントアウトはエラーになる。
文字列リテラルとなるためエラーになるようです。

変数


# 変数 hensu = "hello" print(hensu) # 定数 (pythonは定数という概念がないので、大文字変数なら定数として扱う風習がある INFO_URL = "http://teisu-hohohohohohhogegegeeegeg.com"

# 文字列変数(複数行) hukusuugyou = """111 222 333 444 555""" print(hukusuugyou) # 真偽値 flg = True # 大文字注意 flg = False

演算


print("hoge" + "hoge") # hogehoge print("hoge" * 5) # hogehogehogehogehoge これすごい

Unity ゲームなどで使う赤から青など徐々に色を変える計算

Unityで、指定色から指定色に切り替わる処理を書くが、毎回忘れてしまうので、メモ!

下記のように、赤から、緑など。通常の黒から白や、透過度を徐々に変えるのは簡単だが、
RGBをいじって、青から、赤などの色変化の計算はちょっと手間なので忘れてしまう。

指定の色から、指定の色に徐々に色が変わるサンプルスクリプト



// Color(0.17254901960784f ,0.074509803921569f ,0.062745098039216f); // スタートカ ラー // Color(0.97647058823529f ,0.83921568627451f ,0.31764705882353f); // ゴールカラー // グラデーションのポジションを管理する値 0f〜1f float currentPointColor = (float)gameCheckPoint / (float)goalCheckPoint; float r = (0.97f - 0.17f) * currentPointColor + 0.17f; // 指定の色から指定色へグラデーション。 float g = (0.89f - 0.07f) * currentPointColor + 0.07f; // 指定の色から指定色へグラデーション。 float b = (0.31f - 0.06f) * currentPointColor + 0.06f; // 指定の色から指定色へグラデーション。 scaffoldObj.transform.Find("background").GetComponent<SpriteRenderer>().color = new Color(r,g,b);

ポイント


float r = (0.97f - 0.17f) * currentPointColor + 0.17f;

R = (Rのゴール値 – Rのスタート値) * グラデーションのポイントを管理 + Rのスタート値 という意味

※RはRGBの赤

また、RGBの#ffffffなどのHEX値から、上記Coloe型の0f,0f,0fのフォーマットに変換する場合は、下記ツールを使うと簡単に変換できます。

#ff0000 → 1f,0f,0f 変換ツール

Mac Book Pro(high sierra)をつかっていて、残り容量が気になった際にみるところ

PCの容量を使っているところ横断でぱっと見る場合(コマンド使わない場合)

Cmd + Space で、「ストレージ」と検索すると、
ストレージの管理」がでるのでそれを開く。

不要なファイルを確認で、だいたい容量が大きいファイルを見つけられる。

コマンドでさくっと全体容量をチェック

まず空き容量をdfコマンドでチェック


$ df -h

a$ df -h Filesystem Size Used Avail Capacity iused ifree %iused Mounted on /dev/disk1s1 234Gi 210Gi 21Gi 92% 2517498 9223372036852258309 0% / devfs 184Ki 184Ki 0Bi 100% 638 0 100% /dev /dev/disk1s4 234Gi 2.0Gi 21Gi 9% 2 9223372036854775805 0% /private/var/vm map -hosts 0Bi 0Bi 0Bi 100% 0 0 100% /net map auto_home 0Bi 0Bi 0Bi 100% 0 0 100% /home

Capacity 92%なので、のこり8%の21Gしたない。。

どのディレクトリのどのファイルが大きいか掘り下げて探す


$ du -g -x -d 5 / | awk '$1 >= 5{print}'

パスワードを要求されるので、ログイン時に使用しているパスワードを入力する。パスワードは入力しても画面には何も表示されないので気にせず入力した後returnキーを押して実行すること。正しく実行されると、ルートから5階層下までのフォルダの容量を確認し、容量が5GB以上のフォルダがリストアップされる (出力結果の数字は各フォルダの容量 (単位:GB))。すべてがリストアップされるのには時間がかかるので、プロンプト (例:username-no-macbook:~ username$) が出て次のコマンドが入力できる状態になるまで待つこと。
#最後にリストアップされるフォルダ名が / のみの項目はファイル容量の合計値なので無視してよい

‘ 引用元 サイト: https://discussionsjapan.apple.com/docs/DOC-1081

iphoneアプリなど開発している場合

xcodeで一時ファイルや、もう使わないアーカイブファイルがのこっていてそれが
容量を結構逼迫している。
頻繁に開発していると普通に1週間で20Gとか増えている。

アーカイブファイル


$ cd ~/Library/Developer/Xcode/Archives

DerivedData


$ cd ~/Library/Developer/Xcode/DerivedData

iPhone Simulator


$ cd ~/Library/Application\ Support/iPhone\ Simulator