カテゴリー: Unity

うにのトゲは刺さると痛い(´・ω・`)-37

フォント変更

以前からずっと漢字の字体がおかしいなとは気づいてはいたが、面倒くさかったのでずっと放置していたのだが、ようやく重い腰を上げる。

が、フォントを読むがいまいちピンと来ない(´・ω・`)

Editor上で検索して一括指定、及び動的生成のTextに対してはその時に指定する感じにした。

一括変換するエディタ拡張とかも色々あったが、動的生成するTextの量が圧倒的だったので、あんまり恩恵を受けられないと思って取り敢えず手出しせず。

つーかなんでUnity側でそのプログラムで使用する基本フォントの指定が出来るようになってないんだろう。テキストが主体ではないゲームがメインターゲットだからだろうか?

実際に同梱するフォントはまだ決めていない(ノ∀`)


スコアのカウントアップをDOTween化した。

今まではUpdate()から呼び出していたカウント&テキスト更新する関数のその部分を前回のコードの感じでDOTween.To()に変更。

カウントアップ中のクリックでカウントを切り上げ最終結果画面に移行する部分は、DOTween.To()実行時にTweenerを受け取っておいて、Tweener.killを使う方向で書き換えた。

参考:
DOTweenのTweenerを使って途中終了、 一時停止、再開、リスタート【Unity】【DOTween】
[Unity][DoTween]DoTweenで調べまくって辿りついた いくつかの事

最終得点やnew recordの点滅もDOTweenにした。

参考:
【DOTween】Flashというイージングをちゃんと解説する
[Unity] DOTweenを使ってUI要素を点滅させる

……ハイスコア画面がなんかおかしい…だと……( ;・´ω・`)ゴクリッ
どうもAndroid10でのファイル保存の変更でファイルが保存出来なくなってる?
点数の格納方法を変えるか、そこを修正しないといかんみたいだな…(ヽ'ω`)


ボタンを押した時にOnGUI()でMousedownが行かないようにしたい(´・ω・`)

具体的に言うと、カードの裏返しと消滅を自動で処理しない設定の時にOnGUIでEventType.MouseDownを拾って裏返しと消滅処理を実行するようにしていたのだが、メニューボタンを押した時にもMousedownが拾われてしまう状況。

「まあ別にいいんじゃね ( ゜σ・゚)ホジホジ ?」と思わなくもなかったが、やはりきまりが悪いというか挙動的におかしい気がしたので、色々と試す。

最初はIPointerEnterHandlerIPointerExitHandlerを継承したスクリプトで各々の関数でフラグの立て伏せを行い、それを判定条件に追加してみた。デバッグした。
上手く行った(・∀・)

実機にデプロイした。実行した。
駄目だった…_| ̄|○

そうだった、マウスと違ってタッチの場合は必ずしもIPointerEnterが先に発生するわけではなかった…(ヽ'ω`)

その後もIPointerDownHandlerなどを試しても上手く行かず…

結局、メニューボタンのアンカーをトップレフトかなんかにしてピボットも0にしたりして、xを0、yを-heightにして、
ボタンのRect内にEvent.current.mousePositionが含まれているかどうかで判定という泥臭い感じに(ノ∀`)

もう少し綺麗な方法はないのか…
そもそもの書き方や設計が悪いのだろうか…(´・ω・`)
何はともあれ、一応解決したからいいか。

if (Event.current.type == EventType.MouseDown && !rtf.rect.Contains(Event.current.mousePosition))

UnityとかC#と関係ないが

上のコードをSyntaxHighlighter Evolvedで修飾表示させたら"&"が"&"になった。
プラグインのバグということなのか、そういう仕様なのかわからないけれども、以下の関数を使ってるテーマのfunctions.phpに追加すればいいらしい。取り敢えず直ったので深く調べることはしない…そんな余力はない……(ヽ'ω`)

function kagg_syntaxhighlighter_precode( $code, $atts, $tag ) {
	if ( 'code' === $tag ) {
		$code = wp_specialchars_decode( $code, ENT_QUOTES );
	}
	return $code;
}
add_filter( 'syntaxhighlighter_precode', 'kagg_syntaxhighlighter_precode', 10, 3 );

参考:
SyntaxHighlighter Evolvedのブロックエディタで「&」が「&」になる問題の対応
Ampersand character


相変わらずの一進一退少女隊で中々やりたい部分まで到達しない…(ヽ'ω`)

うにのトゲは刺さると痛い(´・ω・`)-36 : DOTween絡み

今までのあらすじ

誰もやっていないので、神経衰弱ゲームはこのまま放置してしまってもいいかなと思わないこともなかったが、常用漢字データの追加だけは実装しておきたかったので、去年から断続的にデータ作成をする。
 ↓
音訓や部首のデータも追加したので、ちょっとプログラムをいじくろうと考えて久しぶりにMole's Match-upのコードを眺める。
 ↓
なんじゃい、この糞コードヽ(`Д´)ノ
 ↓
凄く読みにくくて、処理がよくわからない…(ヽ'ω`)
 ↓
致し方なく、リファクタリングしたり、大幅な改修をする。ちょっと前に読んでいたKotlin絡みの知識が役に立った。つーか今まで余りにもスマートな書き方を知らなすぎだっただけとも言う(ノ∀`)

Switch式便利(・∀・)
だけど値を返さなくていいSwitch式みたいなのはないのだろうか。
あとC#ってenumをsealedとか出来ないのか? 出来るのか?
まあswitch式でdefaultないと警告みたいのが表示されるので、キーッヽ(`Д´)ノってなりながら"_=>"を追加するのが嫌ってだけなのだけども。
 ↓
大分進んだけど、1月が終わってしまう…(ヽ'ω`)
 ↓
プレイ結果を表示する部分の改修をしつつ、なんか綺麗なコードじゃないなぁと思っていたところで、たまたま目にしたツイートでDoTweenの紹介をする動画(実は配信)があったので観てみる。

 ↓
DOCounterとかDoTextなんていう便利そうなのがあるやんけ(`・ω・´)
 ↓
そんなことしてる場合じゃないけど書き直してみるか(`・ω・´) ← イマココ


アセット管理

DoTweenを、つまりはアセットを最新にするのは自分で削除して追加しないといけないのかのぅ(ヽ'ω`)メドイ…と思っていたが、実はパッケージマネージャーのマイアセットから更新というかダウンロードと再インポートが出来ることを初めて知った(ノ∀`)
もしかして、これ結構前から出来たのかな?

Asset側に有る古いものをPluginフォルダの下に移してから更新すべきだったらしい…_| ̄|○
Unityを再起動したら二つDoTweenが有るとかどうとかで怒られた。
古い方を削除してPluginフォルダにあった方を再インポートしたが、特に問題はなさそうだ…

マイアセットからのアセット削除(?)はhttps://assetstore.unity.com/account/assetsに行って、対象のアセットを非表示にする感じでいいのかな?


俺氏、すっかりUnityの使い方を忘れる(ノ∀`)

上記の配信のプロジェクトってGithubにあるのかなと思ったが、ぱっと見、なかったようなので自分で環境というかプロジェクトを作ろうとする。

が、しかし…
余りにもUnity Editorでの操作が久しぶりだったために何をどうしたらいいかわからない(ノ∀`)

致し方なく、昔kindleで購入したUnityの寺子屋を見ながら設定等を始める。

[Mobile 2D]や[Mobile 3D]といったテンプレートが増えてる Σ(゚∀゚;)
でもまあダウンロードだけはしておいて、作成は従来通りの[2D]でしてから
Androidへプラットフォームを変更する。Canvas作ってカメラとかの設定を変えて、buttonを配置。

なんかようわからんけど、Textの代わりにTMP(TextMeshPro)が使えるだか使えとかいうようなダイアログが出たので言われるがままにダウンロードして使用する。

紆余曲折の果てに気づく…

DOCounterはPro Onlyやんけ…_| ̄|○


まあDoTween.To()を使って似たような挙動が出来たからいいか…(ヽ'ω`)
UpdateとかでCountupするよりは楽だし。

配置したButtonに追加するスクリプトは以下の通り。
もっと真っ当な書き方があるのだろうけれども、取り敢えず今の所は適当に。

参考:
DOTweenの使い方 Tweenアニメーション入門【Unity】
Unityでスクリプトからボタンのイベントリスナーを取り付ける


disp
using UnityEngine;
using UnityEngine.UI;
using TMPro;
using UnityEngine.EventSystems;
using DG.Tweening;

public class buttonTest : UIBehaviour,IPointerEnterHandler,IPointerExitHandler
{
private Button testButton;
private TextMeshProUGUI buttonText;
private Image buttonImage;
private Color baseTextColor;
private int points = 0;

void Start()
{
testButton = this.gameObject.GetComponentInParent<Button>();
buttonImage = testButton.GetComponentInChildren<Image>();
buttonText = testButton.GetComponentInChildren<TextMeshProUGUI>();


testButton.onClick.AddListener(OnClickButton);
buttonImage.fillAmount = 0;
baseTextColor = buttonText.color;

}

public void OnClickButton()
{
DOTween.To(() => points, (n) => {
points = n;
buttonText.SetText(points.ToString());
}, 1000, 1.0f)

.SetEase(Ease.Linear)
.OnStepComplete(() => {
this.gameObject.transform.DOScale(2f, 0.25f).OnComplete(() => {
this.gameObject.transform.DOScale(1f, 0.25f);
});

points = 0;
});
}

public void OnPointerEnter(PointerEventData eventData)
{
buttonImage.DOFillAmount(1f, 0.25f).SetEase(Ease.OutCubic).Play();
buttonText.DOColor(Color.black, 0.25f).Play();
}


public void OnPointerExit(PointerEventData eventData)
{
buttonImage.DOFillAmount(0f, 0.25f).SetEase(Ease.OutCubic).Play();
buttonText.DOColor(baseTextColor, 0.25f).Play();
}

}


adbによる実機での録画

adb shell screenrecord /sdcard/test.mp4

参考:
AndroidでPCからadbコマンドで動画・静止画キャプチャする

ポインタがないと何やってるかわからんなw


データ埋め込み表示文を作るのに凄まじい時間がかかった…(ヽ'ω`)
本当はkotlinとcompose辺りで上記のようなデータ埋め込み表示文を作る為のエディタのようなものを早く作りたいのだが、取り敢えずMole's Match-upの更新を済まさないと落ち着かないので、こっちを先に頑張るしかないな。

つーかそれよりも早く仕事を見つけないといかんな(´・ω・`)











うにのトゲは刺さると痛い(´・ω・`)-35

Androidアプリの64ビット化強制のメールからごっぐるから届いて、その辺の絡みでseekhackしたというお話。64ビット化強制のメール自体は5月かそこらで既に届いていたのをよく見てなかったw


Unity 64bit

多分、ぐぐればQiita辺りのエントリがすぐにヒットするはず……だが何故か俺氏のテンポラリブックマークにはstackoverflowとかのurlしか残ってなかった……(´・ω・`)エイゴヨメナイノニ

何はともあれ、最終的に

  1. メニューバーから[ビルド設定]->[プレイヤー設定]の順に開く。
  2. [その他の設定]-[設定]の「スクリプティングバックエンド」を"IL2CPP"にする。
  3. 「ターゲットアーキテクチャ」で"ARM64"にチェックを入れる。
  4. "android-ndk-r16b-windows-x86_64.zip"をダウンロードして解凍する。
  5. メニューから[編集]-[環境設定]の順に選択する。
  6. [外部ツール]のNDKに先に解凍したフォルダを指定する。

みたいな感じで行けたんだったかな?
ちなみにUnityのバージョンは"2018 4.4f1"。
2019でも問題ないんだろうけれども、色々と試行錯誤した結果、最新版はやめておこうという気になった(ノ∀`)

参考:
Unity Export Android 64-bit
Googleplay 64bit console warning


Unity+sqlite+64bit

上記の方法でようやく64bitでコンパイル出来るようになったのだが、実機上でゲームをしようとすると上手く動かない。正確に言うとカードがディールされない(´・ω・`)

色々と悩んだ結果、そう言えば、前にdb絡みで同じような現象になったなということを思い出し、SQLiteUnityKitでぐぐる。

どんぴしゃりなエントリが(・∀・)
UnityでSQLiteをAndroid(64bit対応)向けに導入する

  1. 拾って来たsqlite-android-3290000.aarを"Assets/Plugins"の下に入れた。("Assets"以下なら何処でもいいのかな?)
  2. SqliteDatabase.csのDllImportの部分を全部変更した。14箇所だったかな?
    [DllImport("sqlite3", EntryPoint = "sqlite3_step")]
    //        ↓
    [DllImport("libsqliteX", EntryPoint = "sqlite3_step")]
    

ちなみにこの方法で実機上でゲームがまともに動くようになったが、editor上では当然の如く、エラーになった(ノ∀`)

"sqlite3.dll"と"sqlite3.def"をそれぞれ"libsqliteX.dll"と"libsqliteX.def"にしたら、動いた(・∀・)

これが正しい解決策かはわからないがw


取り敢えず、これで一応64ビット化は出来ているようなんだけれども、まあしばらくはアップロードしなくてもいいか。どうせ誰もダウンロードしないし( ゜σ・゚)ホジホジ

うにのトゲは刺さると痛い(´・ω・`)-34

今も解決していない…(ヽ'ω`)
しばらくFirebaseはほうっておくべきか…


Firebaseを使おうと思ったが

Firebase Consoleでアプリ作成等までは出来たので、ページのガイドに習ってFirebaseAnalyticsプラグインを入れてみると以下のエラー(´・ω・`)

Failed to rename asset Assets/Plugins/x86_64/Firebase/libFirebaseCppAnalytics.so to Assets\Plugins\x86_64\Firebase\libFirebaseCppAnalytics.so (The source asset could not be found)

Failed to rename asset Assets/Plugins/x86_64/Firebase/libFirebaseCppApp-5.4.0.so to Assets\Plugins\x86_64\Firebase\libFirebaseCppApp-5.4.0.so (The source asset could not be found)

下の方は4日前にissueに上げられているみたいだけれども、とすると、上の方はまた別件なのか?
Version Handler Linux library renaming fails in some cases

そもそもx86_64なんてフォルダ作られてないな…
なんだろう、これは。


最初はAdmobとぶつかってるのかなと思って、Admobを最新版にしてみたが、エラーは取れず。

Resolverとかいうのを使用してみたが解決せず。
仕方がないのでimportしたFirebaseアセットをアンインストールしようと思ったが、

Unityって標準機能でアセットのアンインストールをサポートしてないのかよ…( ;・´ω・`)ゴクリッ ←※今はパッケージマネージャで出来る…筈(´・ω・`)タメシテハイナイガ

というわけで、ぐぐって、【Unity】AssetStoreからインポートしたアセットをプロジェクトからアンインストールする「 Package Uninstaller」で紹介されていたアセットを入れて、FirebaseAnalyticsをアンインストール。

更にfirebaseの名がついたファイルが残っていたので、手動で削除した。
で、まあ、「Firebaseは取り敢えず放っておくか(´・ω・`)」と思ったら、今度はadmobがおかしくなる…_| ̄|○

なんか古いのと新しいのでなんかぶつかっていたみたい。
それもなんとか試行錯誤してadmobが表示されるようになったが、今度はゲームがEditor上でしか動かないという状態に…__○_

色々試したが結局、前のコミットに戻すしかなくなった…(ヽ'ω`)ナントイウテイスキル


で、まあ、その後クイックスタートサンプルを落として来て同じようにやったら、上記の2つのエラーが出ている状態であると…(´・ω・`)

そう言えば、それ以外にも

The type or namespace name `Tasks' does not exist in the namespace `System.Threading'. Are you missing an assembly reference?

とかいうエラーも出てた。

これはPlayerSettingsのConfigurationで.NETのバージョンが4系にしてないから文句を言われていたみたい。或いは3系のアセットを読み込めばいいのかな。


なんだか色々と気力が低下状態でエラーとかにハマると原因究明すら厳しい…(ヽ'ω`)