FreelyApps

個人によるアプリ開発の日記です。アプリの収入だけで生活できるようになるのが目標です。UnityでAndroid向けのゲームアプリを作成しています。


    アプリ『トランプ・7並べ』を公開しました。
    Android/iOS https://goo.gl/zsFces

    カテゴリ:Unity > Script

      このエントリーをはてなブックマークに追加 Clip to Evernote
    Unityではいくつかの文字コードでスクリプトを書くと問題が起こることがあります。
    UTF-8 BOM付きにしておくと全く問題が起こりません。全てのスクリプトと文字列データをUTF-8 BOM付きにすることでコンパイルエラーや文字化け防ぐことができます。
    (他の文字コードでうまく行く場合もあるようです。)

    Windowsであれば、文字コードがSJISになったファイルを保存していることが普通だと思います。日本語のコメントや文字列をいれたときにUnityのコンパイルがエラーを出すようになった場合、文字コードが原因のことがあります。
    適当なエディター(サクラエディタとか)でエラーが出ているスクリプトファイルを開き、文字コードを 「UTF-8 BOM付き」と指定して保存し直してください。

    いちいちファイルを保存し直すのが面倒だという人はここの記事が参考になるかと思います。 ファイルを更新するたびに自動で文字コードを変換してくれます。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    Unity5.1からUnityEngine.Assertionsが使えるようになりました。スクリプトリファレンスはこちらに載っています。
    アサートは開発時に有用な機能です。Unityだけでなく、色々なプログラミング言語に同じような機能があります。どのような場合もプログラムの検証用に用いられます。
    例を挙げると、ある変数の値が0であるべき場所でそうなっているかを調べたり、値の範囲が想定内に収まっているかを調べるために使われます。

    基本的にデバッグ版のみに有効化するものです。リリース版には検証用のコード(Assertも含む) は取り除かれ余計な処理をせずに高速に実行するべきだからです。
    デバッグであれば実行速度が遅くなったとしても問題を検知できる方が重要なので、Assertを有効化して問題が起こっていないかを調べるのです。

    Assertとは英単語で意味は「主張する」といったものです。それゆえ条件を満たしているかを「主張する」機能に使われるようになったようです。 
    大抵の場合は条件を満たさないときにエラーメッセージを出力するか例外を発生させます。UnityEngine.Assertionsではこのどちらもサポートしていますが、エラーメッセージを出力するほうで十分だと思います。例外の処理を忘れると、おかしな挙動になってしまうのです。



    UnityEngine.Assertionsの使い方を説明していきましょう。

    using UnityEngine.Assertions;を宣言しておき、判定したいところでAssert.IsTrue(bool値のもの);というように書けば良いです。Assert.IsTrueの場合は引数の値がtrueであれば何もせず、falseであるとエラーになります。第2引数の指定もでき、そこにはメッセージを指定できます。どのようなエラーなのかわかりやすくするためにコメントを書いておくことをお勧めします。
    他にもIsNotNull(nullでないことを保証する)とかAreEqual(値が一致するか保障する)などがあります。

    このアサートはUNITY_ASSERTIONSが定義されているとき有効であり、ないときはコードから消えます。Development BuildのときはUNITY_ASSERTIONSが自動で定義されるようですが、UNITY_ASSERTIONSを自分で定義する方が便利だと思いました。

    using UnityEngine.Assertions.Must;を宣言すると、Assertを利用した拡張メソッドが使えるようになります。bool、int 、floatなどの型にメソッドが追加され、(数式).MustBeEqual(0);というようにアサートを書くことができます。(拡張メソッドなので、using UnityEngine.Assertions.Must;は必須になります。)

    Assert.raiseExceptionsをtrueに設定するとエラーを表示するのではなく、例外を発生させます。デフォルトはfalseなのでエラー表示がされるだけです。例外処理を書いてアサートを処理したい場合はtrueにすることになるでしょう。

    このページのトップヘ