Unity NGUIのUI Labelのフォント名をスクリプトで取得

Unity NGUIラベルで指定のフォントを使っているものだけ抽出するのに、
必要なので調べてみた。

UILabel label = targetObject.GetComponent<UILabel>();

// Debug.Log("label.trueTypeFont.fontNames:" + label.trueTypeFont.fontNames.ToString());

Debug.Log("label.trueTypeFont.fontNames:" + label.trueTypeFont.name.ToString()); //これでフォント名取得できる!

label.trueTypeFont.fontNamesでは取得できないので注意

Unity NGUIのローカライズをスクリプトからKey指定で変更可能に

上記のようにNGUIUI Localizeで用意してあるローカライズ文言をスクリプトから、切り替える方法。

targetLabelGameObject.GetComponent<UILocalize>().key = "GOOD";

対象のUI Labelと同じgameobjectにUI Localizeコンポーネントがアタッチされていれば、これでOK!

ただし、UILabelのテキストが即時変わらない事があるので、
その場合は、一度下記のように非アクティブ→アクティブにすると反映される。

targetLabelGameObject.GetComponent<UILocalize>().key = "GOOD";
targetLabelGameObject.SetActive(false);
targetLabelGameObject.SetActive(true);

古いXcodeをアップデートしようとしても、エラーできない。

UnityHubで、unity2019を扱う際に、iOSビルドサポートが必要だが、 何度やっても、インストール途中で止まる。 このマシンでxcodeを1年近く使っていないのが問題か。
久しくアップデートしていないせいか、xcodeが起動しない。 xcodeのアップデートもうまくいかない。

install logは下記

Xcode[2358]: Package: PKLeopardPackage <id=com.apple.pkg.MobileDeviceDevelopment, version=10.3.9000000000.1.1488876279, url=file:///Applications/Xcode.app/Contents/Resources/Packages/MobileDeviceDevelopment.pkg> Failed to verify with error: Error Domain=PKInstallErrorDomain Code=102 "The package “MobileDeviceDevelopment.pkg” is untrusted." UserInfo={NSLocalizedDescription=The package “MobileDeviceDevelopment.pkg” is untrusted., NSURL=MobileDeviceDevelopment.pkg -- file:///Applications/Xcode.app/Contents/Resources/Packages/, PKInstallPackageIdentifier=com.apple.pkg.MobileDeviceDevelopment, NSUnderlyingError=0x7feaec7f2c00 {Error Domain=NSOSStatusErrorDomain Code=-2147409654 "CSSMERR_TP_CERT_EXPIRED" UserInfo={SecTrustResult=5, PKTrustLevel=PKTrustLevelExpiredCertificate, NSLocalizedFailureReason=CSSMERR_TP_CERT_EXPIRED}}}

上記エラーで ぐぐると色々問題が。 https://stackoverflow.com/questions/58550284/mobiledevice-pkg-untrusted-cannot-open-xcode-after-os-x-update

一番よさそうなのが、xcodeをアンインストールしてから、 入れ直した方が良さそう。


xcodeを関連ファイルをまとめてアンインストール。
↓削除参考

https://qiita.com/UJIPOID/items/015805c89bddca540129

削除する際は、sudo権限でじゃないとアンインストールできないものもある。


ついでに、macのOSアップデートをサボっていたので、 macOSをHigh sierraから catalina へ飛び級アップグレード。

macOSのアップグレードはうまくいったので、次はxcode。

そして、xcodeをappstoreからインストール。
install conponentsが満タンになっても数時間反応がなかったので、
macを再起動して再度xcodeを起動し、install componentを走らせたら直った!


macを再起動して再度xcodeを起動し、install componentを走らせたら直った!

あとは、UnityにモジュールにiOSビルドサポートがインストールできれば…

追記2019-11-17

無事UnityのiOSビルドサポートもインストールできた。!

Unity PlayServicesResolverの自動更新を止める

環境 Unity2018 4.5

Unity2018 4.5でAndroidをビルドする際に、androidのplay-services周りのライブラリが自動更新されて、消しても消しても復活するので、それを自動更新しないようにする設定。

これで自動更新が止まる。ちゃんと「OK」ボタン押さないと反映されないので注意。

Unity MaterialのTilingやOffsetをスクリプトから変更する

下記のようなMaterialのプロパティをいじりたい時。

下記のようなコードで変更できる。
ただ、sharedMaterialは、このmaterialを使っているものすべてが変わるので注意。

// Offsetを変更
childCubeObj.GetComponent<Renderer>().sharedMaterial.SetTextureOffset("_MainTex",new Vector2(0.5f,0.5f));

// Tilingを変更
childCubeObj.GetComponent<Renderer>().sharedMaterial.SetTextureScale("_MainTex", new Vector2(4f,4f));
            

Unity 破片が飛び散るような「Mesh Explosion」アセット入れたみた

Mesh Explosionという破片が飛び散るようなアセットを購入しいれたみたので_φ(・_・。

https://assetstore.unity.com/packages/tools/particles-effects/mesh-explosion-5471

使い方

1. 必要なAssetをインポート。

2. Mesh Exploderスクリプトを破裂対象のオブジェクトにアタッチ

3. 破裂するタイミングをスクリプト等で指定
コードは下記だけ、とてつもなくシンプル

void StartExplosion() {
		BroadcastMessage("Explode");
		GameObject.Destroy(gameObject);
	}
BroadcastMessage("Explode");

で爆発処理をしている。

破片が重力処理で飛び散るなどもできる。

git reset –hardで指定コミットの状態に完全に戻す(追加ファイルで、「?」ファイルなども消す)

※まちがって進捗途中のファイルを消さないように扱い注意

git reset –hard で一旦ソースを指定のバージョンに戻す

$ git reset --hard HEAD

だが、これだけだと、管理ソースに含まれないソースがgit statusで「?」で残ってしまう。
Unity開発などで、試しにAsset等を入れると毎回これを処分するのは面倒。

そんな時は下記git cleanコマンドで削除

git clean -fd

-f はカレントを指定、 dはディレクトリもという意味

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からのダウンロードでもインストールできないので、「内部アプリの共有」の機能つかって共有すればインストール可能。

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になるので注意!