投稿記事

2019年 01月の記事 (2)

UnityでAssertを使うときに覚えておきたい2つのこと

http://kan-kikuchi.hatenablog.com/entry/Assert
Unityには標準でアサーションクラスが定義されています。
これはdevelopment buildのチェックを外すと製品版から取り除くことができる優れものです。
防御的プログラミングとしてアサーションを積極的に使っていることでしょう。

しかしUnityのこのアサーションクラスを使うときに気をつけなくてはいけないことが、いくつかあります。
それを見ていきましょう。

Assertの第二引数は必ず評価される

どういうことかというと
SpriteRenderer sprite = null;
Assert.IsTrue(true, sprite.name);

このAssertは常に正なのでアサーションは発生しません。
にもかかわらず第二引数であるsprite.nameは評価され、null errorが発生します。
これ、意外と引っかかります。
そのため第二引数部分は、どんな時でも正常に動作するコードのみ書かなくてはいけません。

Assertはラップして使う

次のコードを見てください。
void Update()
{
Assert.IsNotNull(hogehoge, "hogehoge is null =" + Time.frameCount);
}
hogehogeがnullだったらアサーション発生というごく普通のコードです。
ところが第二引数は必ず評価されます。
この処理は動的にstringインスタンスを生成するためgcallocが発生します。
さらにUpdateで毎フレーム呼び出されるため、毎フレームgcallocが発生します。
これが致命的で、無駄なgcallocのせいでパフォーマンスの正確な計測が難しくなります。


development buildのチェックを外すことでアサーションを無効化できますが、今度はprofilerが使えなくなるのでパフォーマンスチェックできません。

PlayerSettingsのLoggingでAssertをNoneにしても呼び出しはされるため結局gcallocされます。

どうすればよいかというと、UnityのAssertクラスをラップして自プロジェクト用のMyAssertクラスを作ればよいのです
http://d.hatena.ne.jp/nakamura001/20151202/1449029637
[System.Diagnostics.Conditional("USE_ASSERT")] を設定し、USE_ASSERTデファインを無効にすればAssertの呼び出しそのものを無くすことができます。

まとめ

上記以外にも、そもそもアサーションをどこに使うべきか、という悩みもあります。
あらゆるところにAssert.IsNotNullを仕込むのが適切かといえば、違います。
ガイドライン的なものに関しては、長くなるので他の書籍にゆずります。

</iframe>

MicrosoftのCode Completeは一番のオススメです。
アサーションを使うためのガイドラインについて、具体例をまじえて分かりやすく説明しています。

</iframe>

契約による設計という開発手法における、事前条件・事後条件のためにアサーションを使うことを説明しています。
この本は理論中心でかなり難しいです。
しかし理論を学んだうえでの実践は、習熟度が圧倒的にあがるので読んでみることをおすすめします。

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

Apple Developer Program membershipを更新してみた

僕はiphoneやipadでアプリをリリースするためにApple Developerとして登録してます。
実はこれ、年に一回更新が必要なんです
更新を忘れていると失効30日前にAppleから「Your Apple Developer Program membership expires in 30 days.」というドキッとするタイトルのメールが送られてきます。
もし失効してしまうとAppleStoreで公開してるアプリがダウンロードできなくなってしまいます
せっかく作ったアプリがダウンロードできなくなるのはとても悲しいですよね。
そこで今年も更新します。
そして僕は、この手順をよく忘れてしまうので備忘録と活動してますという生存報告もかねて、記事として書き残しておこうと思います。

Apple Developerへサインイン

メールに書かれている Renew now > というリンクをクリックします。


するとこのようなページに飛ばされました。
Appleらしいシンプルなデザインです。
スクショにはないですが、左上に小さくAppleのロゴが表示されています。
おしゃれです。

気をとりなおしてサインインしましょう。
Apple IDが必要みたいですね。
全然覚えていません。
年に数えるくらいしか使わないIDを覚えているわけないですね。
「Apple IDをブラウザに保存」というチェックボックスは、こういう忘れっぽい人のために追加されたのかもしれませんね。

この後いろいろ探してApple ID見つけました。
メールアドレスでした。
メールアドレスを入力するとスッとパスワードの入力フォームがあらわれました。
おしゃれです。
ci-enもそうですが、ほとんどの場合IDとパスワードは初めからフォームがあります。
このAppleのこだわり何なんでしょうか。

membershipを更新できない

長い間ログインしてなかったせいか、規約変わったよみたいな確認画面が表示されました。
なにも考えず前向きにGOなのでボタンおして先に進みました。


無駄のないスッキリとしたサイトですね。
無駄がなさすぎて、どこで更新できるのかまったくわかりません。
毎年ここで頭を悩ませている気がします。
(メールでRenew nowといっておきながらRenewさせる気ないんじゃないかといつも思います。
はい、実はこのページ、本当のmembership更新ページではありません
僕が使ったApple IDは開発者アカウントではなくて、手持ちのipad用の一般アカウントでした
左上にdeveloperとあるのにまぎらわしいですね。

本当の更新ページ


本当のmembershipページはこういうものです。
左のタブにProgram Resourcesとあるのが違いですね。
ちなみに右側のメインページの上部にRenew Membershipが目立つ形で表示されています
更新したいので押します。

すると再度サインインを求められます。
さきほどのApple ID(メールアドレス)とパスワードを入力します。

次は「お支払い」画面です。
membershipはタダではありません。
年間99ドルかかります(2019年1月では消費税込み12744円でした
つらいですね。
いいんです、99ドル以上の価値をうみだせば。
心を強く持ち、請求先住所などを書き、注文を確定しました。

まとめ

Apple IDを複数もっている人は気をつけましょう。

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

月別アーカイブ

記事を検索