Unity2018 4.5 androidビルド時に「IndexOutOfRangeException: Index was outside the bounds of the array. UnityEditor.Android.AndroidBuildWindowExtension.GetBuildPlayerWindow () 」

Androidビルドすると下記エラーになった。

IndexOutOfRangeException: Index was outside the bounds of the array.
UnityEditor.Android.AndroidBuildWindowExtension.GetBuildPlayerWindow () (at <62f761e6ab1445a38cdcb4ac36512695>:0)
UnityEditor.Android.AndroidBuildWindowExtension.RepaintTargetList () (at <62f761e6ab1445a38cdcb4ac36512695>:0)
UnityEditor.EditorApplication.Internal_CallUpdateFunctions () (at /Users/builduser/buildslave/unity/build/Editor/Mono/EditorApplication.cs:200)

古いapkファイルを出力するレガシーモードになっていたらしい。

PlayerSettingを開いて「use legacy SDK tools」のチェックが入っていたので、チャックをはずすとうまくいった。

色々ぐぐったけど情報なく、
IndexOutOfRangeException〜 となっており、
エラー内容から想定できない対応だったのでメモ。

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 変換ツール