投稿者: moleking

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

スコア用のdbを追加

いまひとつAndroid10での新規データ書き込みがわからず…(´・ω・`)

ぐぐったエントリ等で説明されていて問題ないはずのApplication.persistentDataPathで取れた"~/sdcard/0/~"みたいなパスでは書き込みを拒絶された。 ← 後でちょっと違う他のコードで試したら書き込めた(ノ∀`)ヨクワカラン

実機デバッグで確認したのだがなぜなんだぜ(´・ω・`)

なんかよくわからんのと今まで各ゲームモードでそれぞれ異なるjsonファイルを吐き出させていたのが余り美しくなかったので、取り敢えずsqlite経由でdbに書き込めるか試す。

でけた(・∀・)
というわけでscore.dbを新たに追加。


と書くと事もなくスムーズに行ったように聞こえるが、紆余曲折があった。半分くらいは自分由来のトラブルであったが(ノ∀`)

  • score.dbのレコードで、ユニークなプライマリーキーフィールドをどうするか悩む。唯一、string型のdatetimeがその条件を満たせなくもないが、あんまり宜しくない。(新規データ作成時に同一日時でデータ作成してたり、そもそもstring型をプライマリーキーにするのに何故か抵抗があったw)
    =>結果、AutoIncrement+PrimaryKeyのidフィールドを設定した。
  • 今までは古い10件のレコードをtempリストにコピー&現プレイ結果のレコード追加、pointの多寡で入れ替えて、上位10件を元のリストに戻すという風にやっていたのだが、score.dbのレコードでAutoIncrement+PrimaryKeyのidフィールドを設定してしまったので、ニューレコードだった場合にidをどうすればいいかわからなくなる(ノ∀`)
    => 結果、取り敢えずnullを入れればInsertは出来るとわかり、そうした。
    => 最終的に並び替えた一番最後(点数が低い)レコードのidを取得、レコードを順番になめていってidがnullのものがあったらidを代入して、UPDATE文を呼んでdb更新するようにした。
  • 当初、使ってるDataTableクラスがC#のSystem.Data.DataTableクラスだと思い、Copy()メソッドを使おうと思ったが、これはSQLiteUnityKit独自のクラスでCopy()メソッドを持ってなかった(ヽ'ω`)

    => 結果、 単純にRowsをコピーするメソッドとついでにリスト入れ替えメソッドを追加した。
    C# Listを自由に並び替える

  • 当初、StreamingAsset内のdbの中身を見て、「あれー、vsとeditor上では更新出来てるのに、dbの中身は変わってない…だと……( ;・´ω・`)ゴクリッ」と悩んだが、
    SQLiteUnityKitの挙動として、Application.persistentDataPathにdbをコピーして使用しているらしい。Windowsで言うと"C:\Users\ユーザー名\AppData\LocalLow\パッケージ名\ゲーム名"の下にdbがあり、きちんと更新されていた(ノ∀`)
    UnityでSQLiteを使用する方法

参考:
SQLiteで最も速く複数行INSERTする方法
Insert into … values ( SELECT … FROM … )

なんでUPDATE文だとINSERT文のようにフィールド名を最初に書くやり方が出来ないんだろうか(´・ω・`)?
まあ今回は一件のみの更新なのでいいんだけども。まあ対象が沢山ある場合は更新用SQL文を生成するメソッドを作ればいいのか。
SQLite3でデータを更新:UPDATE


何もしてないのにadmob関連が壊れた(・∀・)

なんかエラーが出るようになったので、resolverを使ったり再インポートしたけど、他には何もしてないのに壊れた(・∀・) ← やっぱりしてる

ぐぐる。

なんか以下の太字部分を削ると直るとか…

"Plugins/Android/GoogleMobileAdsPlugin.androidlib/AndroidManifest.xml");

[Unity] AndroidManifest.xml is missing. の対処法

なんかバグじゃなくて、フォルダ構造が変わっていて古いバージョンのadmobからアップグレードすると発生するとかどうとか…

This happened because you upgraded from an old version of admob.
From the version 5.2.0 the folder structure was changed.

Build Error. AndroidManifest.xml is missing. #1493

結論から言うと試してみても直らなかった(ノ∀`)

最終的にadmob絡みを全部削除して改めてUnityパッケージで入れたら解決した。


若干、呼び出すコードが変更されていたので書き換えた。
appidは"Assets\GoogleMobileAds\Resources\GoogleMobileAdsSettings.asset"のインスペクターで設定したけど、これでいいんだろうか?
editor上ではTestAdのバナーが表示されてるけど、実機だと出てきてないな…
まあこれは後回しでいいわ(・∀・)

参考:
バナー広告


bundletool

今回は実際の使用はほとんどしなかったけれども、aarからapkを生成したり、端末へと手動インストールする際に使用するものらしい…

bundletool
App Bundle対応


エミュレータ絡みで上手く行かない(´・ω・`)

なぜかうちの環境ではam64-v8a系のAVDを作成しても、"amdvlk64.dll"等のエラーで起動しない。
Can't change emulated performance of AVD in Android Studioにあるように、コマンドラインから起動したり、gpuとかのオプションをいじくったりしたが上手く行かず…(ヽ'ω`)

s86_64系のAVDは起動するけれども、Unity側でx86系でx86系用のサポートが選択できない…

Android サポートに関するお知らせ:64 ビット対応および App Bundle サポートの 2017.4 LTS バックポート

Unity では、Android の ARM 64 ビットサポートを追加した一方で、x86 ベースの Android の使用状況の調査も行いました。その結果、x86 ベース Android デバイスの市場への供給は非常に限られたものであり、Unity の x86 ベース Android サポートの導入も非常に狭い範囲に留まったことが分かりました。このため、x86 ベースの Android サポートはバージョン 2019.2 をもって廃止となり、Unity 2019.3 をもって完全に削除されます。

とあった…(ヽ'ω`)

セカンドPCに2019.1の環境を作ってなんとかしようとするも、今使っている2020.x系でC#8の記法等を利用しているために色々と書き直しの問題が……つーかプロジェクトのダウングレード時になんかエラーが出て先に進まない…_| ̄|○

取り敢えず、今の所諦めることにする。
今使ってるPCが第5世代のCore i5を積んでる古いPCだから駄目なのだろうか…
Hyper-VやHXAM辺りはきちんとやっているんだけども…


コードの改修はそれなりにしたけれども、特筆すべきことは少なく、いつも以上に内容のないエントリになったが、こういう日記的な作業内容を記録しておかないと後々苦労するので、怠らないようにしなければならない(`・ω・´)

『テイルズオブグレイセス』をやった(終)

面倒くさくなったので、ガルディアシャフトへと向う。

なんか壁がある?
ラムダの記憶か…コーネリアとエメロードの回想。
若干長いな(´・ω・`)

途中で拾ったアリなんとかコアを装置?に嵌めてみたらモンスターになってバトル。
そんなに強くもなかった。

鉄壁の魔導書を(σ・∀・)σゲッツ!!

またコアを嵌めるやつがあったけど、コアがないな(´・ω・`)

と思ったら、次の階の青赤黄のルートで行ったらアリトモス・コアがまたあった。
これなんなんだろうな。
取り敢えず倒しに戻るけど。

ああ、勝つと強い武器とかくれてるみたいだな。


赤黄青ルートで下の階へ。
また壁があって回想シーン。

コーネルの独断専行もアレだけど、エメロードが諸悪の元凶じゃねぇか(・∀・)
またいつものパティーンになってきたなw
"俺とあいつは一緒だ→でも俺には仲間が居た"パティーン(・∀・)

エメロードも既にヒューマノイドになっていたのかw

やっと中層に来たら、また回想壁。
なんかクリスタルみたいなのを取って、球体をグルグルする。
緑のやつは合ってるから最初から放置でいいのかな?
間違えて取っちゃって混乱したけど…

またアリトモスコアの敵が。
いつの間に手に入れたか忘れたがバトル。
クリスダガーを(σ・∀・)σゲッツ!!

下の階に行っても同じパズルか。
赤青紫と白黒か。

またアリトモスコアの敵とバトル。
アンダーテイカーを(σ・∀・)σゲッツ!!
あれスレイヤー[5]とエクシード[3]を持ってるドラゴントゥース+1の方が強いなw

右の方にももう一体居るけど、アリトモスコアがないな…

また回想壁。
あれ、他のことしててラムダとプロトス1の戦いを見逃したか…?
いきなり七年前のリチャードとラムダの融合シーンになったな。


やっと下層か(´・ω・`)
あれ?
ここでアリトモスコアが。
戻るか…

アリトモスコアのモンスターを倒す。
ウロボロスを(σ・∀・)σゲッツ!!

ようやっと最下層。
一旦戻って回復…する必要もそんなになかったな。

あれ?
結局、リチャードの意識高い系ラスボスか。
レベル65~67くらいだったからか、一回ライフボトル使っただけで第一形態は倒せた。

なんやかんやでラムダとリチャードが分離した…
ラストバトルか…

でもよくよく考えてみたらラムダさんって被害者じゃね(´・ω・`)?

まあでも被害者だからといって新たな加害者になったら駄目だけど(・∀・)ソノタイショウソノモノニタイシテノフクシュウナラギリセーフ

ぼちぼち回復介入したけど勝てた…?
結局対消滅しちゃうの(´・ω・`)?

どうせ最後、あの花畑に行けばまた現れるパティーンじゃないの?

グー姉さんの時みたいでちょっと寂しい…(´・ω・`)


と思いきや(・∀・)?
ってお前がかいw

取り込んじゃったんかい…

確かにラムダさんの方が正論やんけ(・∀・)

なげーな、ここw
もうエンディング始まってもいいだろ…(´・ω・`)

ちょろちょろ見ながら、攻略ページを読み始める俺氏(ノ∀`)
まあこういうオチも嫌いじゃないけどねw

ラムダさん…(´・ω・`)

なんかこれはオールハッピーエンドな作品だったのかな?
アニメがまた始まった。
クロソフィが粉々になって消滅?
これが風花なのか。

おしまい(・∀・)


最後のこの女の人誰だって思ったけど、ツインテールをやめたソフィか(ノ∀`)
子供はアスベルとシェリアの子なのか… ←ぐぐったらそう書いてあった。

居ないと思ったら、今作ではねこ好きじいさんはシャトルモードで探索しないと会えないのか…

63時間くらいだったかなぁ?
やはりフルオートバトルでやると時間がかかる。
正確には、ながらプレイがいけないんだとは思うが。

まああんまりキャラ的にもストーリー的にもストレスが溜まるようなところがほぼなく、システム的にもほぼほぼオートでやってくれるので、そういう点から言うと良かったかな。
ほぼほぼハッピーエンドだったし。

そう言えば今作、ソーサラーリングがなかったような。

続編というか完全版としてPS3で『テイルズオブグレイセスf』とか言うのが出ているらしい。
若干後日譚が追加されているらしいが、まあ、そこまでは気にならないのでやらんでいいだろ( ゜σ・゚)ホジホジ

うにのトゲは刺さると痛い(´・ω・`)-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


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

『テイルズオブグレイセス』をやった(7)

基地近くで星イベント。
壊れたブローチ…

( ´・ω・)エ?
襲撃されたこの子は助かったの?
死んでないよね…?


ブロックを動かして先へ先へ。
強運の魔導書を(σ・∀・)σゲッツ!!

ここ画面の暗さで何処行っていいかわからなくなるな(´・ω・`)
赤いパネルのとこに出るのがわからんかったわ。

アンマルチアの鍵を(σ・∀・)σゲッツ!!

ようやく辿り着いたら、ヒューマノイド達とバトル。
余所見してたら勝ってたw

強化パーツはデリス鋼?
お約束のデリスかw

デリスピットを作ったとかどうとか。
ついでに余ったデリス鋼で作った指輪で他の三人と同じ様にソフィと共鳴出来るとかどうとか。
ご都合主義的だな(・∀・)


えっちらおっちら終焉都市に戻る。
マリクとのバトル。

ようやっと元の世界に帰れる…(ヽ'ω`)
なんかようわからんけど、エメロードも一緒に来るってさ。

シャトル発射場の宝箱のパス、エフィニアと勘違いしてたわw
エフィネアか(ノ∀`)
熱血の魔導書を(σ・∀・)σゲッツ!!

またアニメ。
繭に直接突っ込むんか…

ラムダ繭着。


先に進んだら、ラムダの進化に驚嘆し考え込むエメロード。
なんか良からぬことを考えてるの(´・ω・`)?

鍛冶の魔導書(σ・∀・)σゲッツ!!

あれー?
また何処に行っていいかわからなくなる(´・ω・`)

マリクとヒューバートはエメロードの変心に気づいてるのか。

ああ、一回浮島を上というか奥の画面にやったら、そっちの方で別の浮島を下の画面に飛ばすのね。

奥まで行ったら広いところに。
モンスター出てこないんだな。
リチャードはコスプレ状態。

ラスボス、ラムダじゃなくてエメロードとかだったら笑うんだけど、そこまでひどくないかw

余所見してたら、アスベルとヒューバートがやられてて一瞬焦ったが、その後は適宜回復介入をしていたら勝てた(・∀・)
レベル57くらい。


リチャードから出て来たラムダを対消滅させようとしたソフィ。
エメロードが止めたけど、その目的は…?

www
エメロードがラムダを吸い込んだww
なにこの遅れて来たぽっと出のラスボスwwww ←ラスボスではなかった(ノ∀`)

55時間以上もかけてここまでゲームを進めて来た俺氏とアスベル達が端役だとヽ(`Д´)ノ

第一形態はアスベル、ソフィ、シェリア、マリクで、ソフィとシェリアをこまめに回復にさせていたら、特に何も問題なく。

お、無傷だと(・∀・)
エメロード、雑っ魚www

結局ラスボスはラムダなのか…
エメロード、爆散w

リチャードと再合体…
アニメ始まった。
リチャードはラムダと心中する気?

と思いきや、また戦うんか?
シャトルが迎えに来て脱出。


アスベル達がソフィが揉め揉め。
でもほら、ソフィはヒューマノイドだからそういう思考ルーチンでもしょうがないじゃない(´・ω・`)

ラントに帰ろうと言われるも未踏の砂漠へ。
なんかよくわからんがモンスターとバトルに。
ヒューバートとパスカルの恋愛フラグ?

あーここでフォドラで入手したアンマルチアの鍵が使えるのかw
ここがラストダンジョンなのか?
まあまあ敵が強いな。
ただのエクストラダンジョン?

砂に埋れた遺跡が正式名称か。

この色付き電力は結構やり応えのあるパズルだな。
孤独の魔導書を(σ・∀・)σゲッツ!!

3色のところは失敗するとリセットかかるから面倒くさい(ヽ'ω`)
奥に居たボスモンスターは弱いなw
雑魚モンスターの方が強いだろw

英雄の杖…?


バロニアの道具屋で星イベント。
ああ、フレデリックのハンケチ置き忘れか。

大輝石の前に時空の歪み?
ってバトルかよヽ(`Д´)ノ
結構強かったな。
つーか硬かった。

もしかしてこれもクリアの為に必要な戦闘だったのかな?
じゃああと2つ回らんと駄目か(´・ω・`)メドイ

適当に依頼とかをクリアする。
オーレンの森にピアスが居ったww


モイラ…?
家出した貴族の娘とソフィが間違えられた?
ああ、本当は死んじゃってるのか…(´・ω・`)

闘技場のノーマルクラスでアスベルがクリア…
レベル62くらいだったけど、20階の続きから始めて、最後はアイテム使ったわ。
ってまだ戦うんか?

あれ?
前にやったシリーズ作品のキャラ?
ヴェイグって氷のスタンドの…
ああ、黒衣の番人ってなんか居たな、そういやw

パーティーバトルで良かった。
あれ、アイテムはそのままか…
やばいかも…

ヒューバートがやられたけど、なんとか勝った。
セルシウスキャリバー、強力だわ。
なんか剣を探して来てくれとかどうとか。

英雄の杖、ここの宿の依頼なのかw
リアラって誰だっけ…思い出せない……("・ω・゙)

闘技場の宝箱のパスってライオットピークなのかw
代謝の魔導書を(σ・∀・)σゲッツ!!


ストラタの西の遺跡の前に星イベント。
モイラの骨か…(´・ω・`)

あれ?
ここはバトルが発生しない…

街に戻ってモイラの形見を渡す。

ロックガガンに挑んでみる。
とても勝てそうにない(ノ∀`)
毛が盗めたので逃げる。
このゲームのバトルで初めてのマニュアル操作を行った(・∀・)


取り敢えず本編の続きをやりにラントの自邸へ。
ハンケチの忘れ物はフレデリックの謀であったかw

なげぇな、ここのイベント(´・ω・`)
なんかようわからんけど花畑に行くことに。
原素注入(`・ω・´)

お、最終決戦前夜の解散か(・∀・)?
ソフィ、死亡フラグか…?
ヒューバートも若干死亡フラグっぽい感じではあるw
マリクは特に何もなし。

あれ?
シェリアが家に居ない?

門のところに来たらイベント。
バリーとレイモンがシェリアにプロポーズww

アスベルがあだち充漫画の主人公なら身を引きそう(´・ω・`)カワイソウナアダチミツル

つーかパスカルのことを忘れてたわw
何処だろうw

あれ?
道端にパスカルとポアゾンが居ったわ。
フーリエも来た。


まだもうちょっと街を巡る。
デール邸のパス宝箱に金運の魔導書。

あれ?
騎士学校に行ったら、ヴィクトリアが普通に居るんだけどw?
謀反に参加してなかったっけ?

かめにんに売った剣が聖剣?

ブリッジウォールのかくれんぼめどい。
やべぇ、金貸したら全部持ってかれた…30万ガルド以上も…( ;・´ω・`)ゴクリッ

ここはリセットだな(・∀・)