TAKOYAKING’s blog 一覧

TAKOYAKING’s blog

たこ焼き系

Unity: Addressable.LoadSceneAsyncとEnter Play Modeの時は一回しかCompletedが呼ばれない

環境

  • unity 2019.3.15
  • Addressables

現象

Enter Play Modeを設定していると、Addressable.LoadSceneAsyncを呼ぶと一回しかCompletedが呼ばれません。
どういうことかと言いますと
再生し、停止して再生すると呼ばれません。
Hierachyを見てもsceneがloadingと表示されたままになっており、完了しません。
statusもずっとNoneのままになります。
async awaitの構文を使っても変化は見られませんでした。

ただ、enter play modeをoffにしたり、ソースコードを変更するとちゃんと呼ばれます。(コンパイルされるため)
開発上この現象が起こると大変不便です。

回避

Addressable.LoadSceneAsyncを使わずに
SceneManager.LoadSceneAsyncを使って回避しました

感想

Enter Play Modeはまだ出たところなので、今後直るのではないでしょうか?

Unity: 「Unknown Assembly DOTween」というエラーが起きる

環境

  • Unity 2019.3.15
  • Addressables 1.8.3
  • DOTween 1.2.335

推測

AddressablesとDOTweenを使用するとこの現象が起きる気がします。(予想です。)

現象

Unknown Assembly DOTween
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)

Unityを再生時に上記エラーが必ず出ます。ただ何も影響が無いように思われます。

解決策

2019.4.4にバージョンを上げたら勝手に直りました。
(Addressablesも勝手に1.8.4になりました)

感想

別に何も影響はなかったのですが、気になるので、直ってよかった!

UniRxのCombineLatestでReactivePropertyを合成する

ことの経緯

1つのReactivePropertyと変更対象のUIが1対1になっている時は問題ありませんが、2つのReactivePropertyが異なる条件で1つのUIを変更しようとしているときに困ったことになりました。

例えば
ゲージが貯まれば背景のグレー解除
マナが貯まれば背景のグレー解除

だとゲージとマナで2つの軸ができてしまいます。
仮にゲージが溜まっているのにマナが溜まっていない状態だと、ゲージの背景のグレー解除が行われてしまい挙動が不正となってしまいます。

CombineLatestで合成する

UniRxのReactivePropertyについて - Nobollel開発者ブログ

public static IObservable<TResult> CombineLatest<TLeft, TRight, TResult>(this IObservable<TLeft> left, IObservable<TRight> right, Func<TLeft, TRight, TResult> selector)
{
    return new CombineLatestObservable<TLeft, TRight, TResult>(left, right, selector);
}
var isMaxGaugeReactiveProperty = new ReactiveProperty<bool>();
var isMaxManaReactiveProperty = new ReactiveProperty<bool>();

IObservable<bool> IsMaxGaugeAndMaxManaReactiveProperty = Observable.CombineLatest(
    isMaxGaugeReactiveProperty, // ReactiveProperty<bool>
    isMaxManaReactiveProperty, // ReactiveProperty<bool>
    (isMaxGauge, isMaxMana) => isMaxGauge && isMaxMana // (bool, bool) => bool
); // IObservable<bool>

返り値の型はIObservable < TResult>となります。

2つのReactivePropertyを渡してあげることで、第3引数にReactivePropertyのT型を引数に持つメソッドを渡すことができます。
そして、2つのPropertyの値を判断したReactivePropertyが出来上がります。

上の例だと
ゲージが貯まりかつマナが貯まる状況を作り出せます。

感想

UniRxとても便利!

SourceTreeで特定のファイルだけStashする

stashは全部の追跡ファイルをstashしてしまうので割と一部分のファイルだけスタッシュしたい時があります。

それをSourceTreeでやってみたいと思います。
一発で行う方法ではないので数回の作業となります。
(やや邪道です)

流れ

  1. stashしたく無いファイルを仮コミット。
  2. スタッシュする
  3. 一つ前のコミットまで戻す。

  • main.rs
  • lib.rs

の2つのファイルがあって、main.rsはスタッシュしたくない場合です。

1. main.rsをコミットする (コミットメッセージは「たこ焼き」にしています。(なんでも良いです、真似しないでください。))

f:id:TAKOYAKING:20200711184224p:plain

2. スタッシュする (未追跡ファイルもスタッシュしたいならステージングにあげる)

f:id:TAKOYAKING:20200711184340p:plain

3. main.rsを戻すために1つ前のコミットまで戻す

履歴から一つ前のコミットで右クリック (例ではmain.rsは「たこ焼き」でコミットしたので、「たこ焼き」の一つ前を選択します)
f:id:TAKOYAKING:20200711184738p:plain

「このコミットまで戻す」を押す
f:id:TAKOYAKING:20200711184552p:plain

SoftかMixedを選んでOKで戻す(HARDはダメですよ!)
f:id:TAKOYAKING:20200711185131p:plain

  • softは変更状態を残しながらステージングに戻す (上段)
  • mixedは変更状態を残しながらインデックスに戻す(下段) (初期値)

コマンドで行う方法

コマンドで行う方法もついでに置いておきます。

git stash push
git stash push <ファイル名> -m <コメント>

これが一番便利

source treeの操作を愚直に表現

git stash pushがあるのでこちらの方法は意味を無しません。

git add ファイル名(stashしたく無いファイル)
git commit -m "たこ焼き"
git stash
git reset ~HEAD
git stash -p

こちらは差分を選択していく方法で、指定のものをstashするのにぴったりですが、ファイル丸ごとstashするという時はちょっと気持ち的に面倒に感じることがあります。(コマンドは短いですが、その後の選択していく作業が割と面倒です。)

git stash -p

感想

GUI操作も覚えておくと、右手一本だけで作業ができるので便利です。
気が向けばカスタムアクションを作ると思います。


関係ないですが、Source Treeには不満はありませんが、やっぱりRevertとResetの日本語の説明が見分け付きづらいので日本語の横にReverやResetの文字を入れて欲しいです。

UnityでAndroidビルドすると「This could be caused by a class being stripped from the build even though it is needed. Try disabling 'Strip Engine Code' in Player Settings.」

現象

05-17 19:19:48.076  4675  4713 E Unity   : This could be caused by a class being stripped from the build even though it is needed. Try disabling 'Strip Engine Code' in Player Settings.

原因

Addressables(Asset Bundle)を使っていると、手動で含めないといけないクラスがあるため。

対処法

必要なクラスをビルド対象に含めてあげる必要がありますが、だいたい以下の4つがあります。

  • link.xmlに書く(デメリットあり)
  • Resourceにダミーとして配置する
  • Sceneにダミーとして配置する
  • Player Settingの「Strip Engine Code」をoffにする (手軽)

4つ目のStrip Engine Codeをoffにするのが一番お手軽ですが、デメリットが無いか以下で検証してみました。

アプリサイズ (Android)

「Strip Engine Code」 OFF

アプリサイズ(「Strip Engine Code」 OFF 正しく動く)
42.41MB
ユーザーデータ
5.21MB
キャッシュ
94.21KB
合計
47.62MB

「Strip Engine Code」 ON

アプリサイズ (「Strip Engine Code」ON (animationはまだ動かない))
28.05MB
ユーザーデータ
4.97MB
キャッシュ
94.21KB
合計
33.02MB

アプリサイズ (「Strip Engine Code」ON (animatorControllerはResoucesに含めることで正しく動かせる)
28.12MB
ユーザーデータ
4.97MB
キャッシュ
94.21KB
合計
33.09MB

検証結果

Strip Engine Codeを手っ取り早くoffにして済まそうと思いましたが、約10MB異なっているので、無視できない数値となっているので、エラーが起こるたびに頑張るしかなさそうです。

link.xmlに書く方法のデメリット

link.xmlにビルドに含めたいものを記述すればビルド時に含めてくれるようですが、記述しても含めてくれないものもあるようです(とても残念)
【Unity】Unity 5.3からAssetBundleはどう変わるのか…まとめ - テラシュールブログ

ここに書いてある通り、エディタクラスはlink.xmlに定義しても意味が無いようです。
Animations.AnimatorController - Unity スクリプトリファレンス
公式Docで調べてAnimatorControllerはclass in UnityEditor.Animationと書いてあるので無理なようです。

animationControllerはlink.xmlに書いても動かないのでResourcesフォルダにいれたり、シーンに含めることで対応する必要がありそうです。

感想

resourcesフォルダに簡易prefabを作って入れておくのが今のところ手っ取り早いかなという気がします。
link.xmlの方を使いたかったのですが、書いても意味ないクラスとかあるのは辛いです。
Strip Engine CodeをOffにするのも良いですが、容量が結構違うので、僕はOffにしない方向で行きたいと思っています。

zsh print -z

ターミナル(コマンドライン)のバッファを編集する方法です。(zshのみ)
ちょっと日本語の意味がわかりづらいですが、以下のような画面に表示されている文字を編集したり、カーソルの位置を変えたりすることです。
f:id:TAKOYAKING:20200711173025p:plain

環境

やり方その1 (ショートカット登録必須)

ウィジェットに登録し、ショットカットを作る
Macがzshになるなら、ZLEを習得するっきゃない! | Developers.IO

zshの機能で以下のような機能があるのでこれらを使って、コマンドライン の表示を操作します。

  • BUFFER
  • CURSOR

このやり方は

2つの作業があり、ショートカットを必ず登録しないといけないのが欠点です。
登録しないと以下のようなエラーが出ます。

widgets can only be called when ZLE is active

やり方その2 (ショートカット必要無し)

zleを使わないでコマンドラインに値を入力した状態にする - Qiita

print -z

を使う
こちらはショートカットの登録をしなくても良いので便利です。
(カーソルはデフォルトで最後尾になる)

感想

fzfやpecoを使っていると出力の表示を操作したいことがちょくちょくあるのでこれを使っています。
おすすめは2番目の方法です。

Affinity Designer: 波線

波線を書きたいことがあってAffinity Designerでどうやって書けば良いのか調べていたら以下のサイトが参考になりました。
AffinityDesignerでの波線の描き方 | coneta.me

やり方

1. ペンツールでギザギザを書く
f:id:TAKOYAKING:20200711171242p:plain

2. コーナーツールで角をつける
f:id:TAKOYAKING:20200711171550p:plain
このツールを選択して、
コーナーを作りたいパスを選択して、コーナーを作ります。
f:id:TAKOYAKING:20200711171619p:plain

ウェーブを使ってみた

コーナーツールを使って砂のウェーブを作りました!(自分のゲーム内で使うもの)
f:id:TAKOYAKING:20200711171919p:plain

メモ

緩やかなウェーブにしたい時はギザギザの角度を緩やかにすれば緩やかウェーブになります。

感想

ウェーブ!