Programming Serendipity

プログラミングを中心に種々雑多に書き留めます

Unity5 メモ

雑記。

  • Skybox
    Skyboxを設定するには、シーンのメインカメラにSkyboxコンポーネントを追加してスカイボックス用のマテリアルを適用(アセットストアにある設定済みマテリアルを利用すると楽)
    Skyboxを自作する場合はprojectビュー内で右クリックからcreate>materialでマテリアルを作り、
    shaderをskybox/6 sidedにして前後上下左右の6枚の画像を入れて作る

  • テキスト
    hierarchyのcreate>UI>Textで作成。posx, posyを0にするとgame画面に見えるようになる
    Horizontal OverflowとVertical OverflowをOverflowにすることで、width, heightよりテキストが大きくなっても表示される
    best fitにすれば、範囲内で自動算出してくれる

  • フォント
    フォントは標準ではArialしかない。
    .ttf, .otf, .dfontをunityに読み込ませるとそのまま使える。windows標準のものでも、asset storeにもあるのでも可

  • RectTransform
    UIのオブジェクトについている特殊なtrasform。
    モバイルはデバイスによって画面サイズが異なるので、width,heightを直接指定するとデバイスによっては非常に小さい文字が表示されてしまう。
    それを解決してくれるのがこれで、アンカーをセットすることで表示のズレを最小化してくれる。
    特に、画面サイズによって文字サイズを変えたい場合、左上にある AnchorPresetsから右下のstretch, stretchを選択すると、自動で拡縮してくれる。

  • Unityのアクセス指定子
    private ... スクリプト内部でのみ使用できる。デフォルト。
    public ... エディター側で値をセットしてして使用する。外のスクリプトから変更できる。スクリプトの宣言の場所で初期化しても反映されない。
    [SerializeField] private ... 外のスクリプトからは操作されたくないが、エディタ側でも設定・操作したい場合に使う。
    標準でprivateなので単に[SerializeField]としてもいい。

  • スクリプト名の変更
    基本的にProjectビュー内でリネームすればUnityが内部的に依存関係を更新してくれる。
    が、スクリプト内のクラス名だけは手動で変更する必要がある。
    たとえば、A.csというスクリプトをB.csにしても、スクリプト内のクラス名の部分は
    public class A : Monobehaviour {
    のままのようになっているので、ここを
    public class B : Monobehaviour {
    に変える必要がある。

  • Findよりもメンバ化
    GetComponentやFindGameObjectWithTagなどスクリプト側でオブジェクトを探す関数があるが、動作が重い。
    スクリプトのメンバ変数として保持させてそこに変更を加えたほうが直感的で動作も軽い。

  • テキストをスクリプトで操作
    using UnityEngine.UI;
    を追加し、
    [SerializeField] Text staminaText;
    を宣言して、
    staminaText.text = "スタミナ : " + Player.staminaValue;
    などとすることでテキストをスクリプトから変更できる

  • アサート
    Unity5.1からアサートが追加されていた。
    using UnityEngine.Assertions;
    とした後、
    Assert(condition);
    のように使える。

  • canvas
    テキストなどUIオブジェクトを追加すると自動的に既存のcanvasに追加されるが、canvas複数作ることができる。
    なお、複数のテキストを1つのgameobjectにまとめる時、
    canvas > gameobject > text の順にするとrecttransformのanchorが無効化されるので、
    gameobject > canvas > text のようにする必要がある。

  • デフォルト引数がエラーになる場合
    monodevelopのtools>optionから、一番下のdebuggerで"Build project in MonoDevelop"のチェックを外すと直る