Unityで2Dゲーム系アプリを作るときのメモ

iOSで60FPS出す方法

Is it possible to get above 30 FPS on an iOS device? – Unity Answers

Androidだとデフォルトで60FPSが出ているんですが、iOSで試すとFPSが30しかでません。
これだと、アニメーションの速度などに差異が出てしまうので、同じにしたいもんです。

Application.targetFrameRate = 60;

これだけでOK!

UnityアプリをiOSで書きだしてビルドするとdSYMのところですんごい時間かかる

  • XCodeのプロジェクト設定ページからBuild Settingsタブを選択
  • dSYMでBuild Options項目を検索
  • DWARF with dSYM fileからDWARFに変更
  • via: UnityアプリをiOSに書き出す時間をdSYMを無効化して早くする – The jonki

    これで解決!
    1分以上かかっていたビルドが数秒になります。

    ただ、XCode上から設定するので、これ以降はUnityはappendでビルドしないといけないかもです。

    prime31のEtceteraTwoの在処が分からない

    LocalNotificationのスケジューリングをしようとすると、EtceteraプラグインだけではダメでTwoのほうが必要になります。
    AndroidのほうはなぜかEtceteraだけでいけるんですが、iOSは2個必要みたい。

    このtwoプラグインはAssetStoreにありません。
    なので、以下のURLから購入することができます。
    prime[31] – the best Unity native code plugins

    ただ、LocalNotificationをただ通知したいだけなら、iOS・Android含めたコードは、

    #if UNITY_IPHONE
            LocalNotification l = new LocalNotification();
            l.applicationIconBadgeNumber = 1;
            l.fireDate = System.DateTime.Now.AddSeconds(10);
            l.alertBody = "hello world";
            NotificationServices.ScheduleLocalNotification(l);
    #elif UNITY_ANDROID
            EtceteraAndroid.scheduleNotification( 10, "Notiifcation Title", "The subtitle of the notification", "Ticker text gets ticked", "my-other-special-data" );
    #endif
    

    こんな感じでもいいかなーと思います。
    LocalNotificationのためだけにtwoで$65払うのもちょっとね。

    PlayerPrefs

    ちょいと値を保存したいとき用に使える。

    Unity – Scripting API: PlayerPrefs

    複数のシーンをマージしてロードする

    テラシュールウェア [Unity3D]ロードの待ち時間を短くする(その4/Application.LoadLevelAdditive)
    このあたりを読むとApplication.LoadLevelAdditiveはかなりオーバーヘッドがあるようで、あまりシーンの分割をしすぎるのは危険のよう。

    開発する人数が多いとシーンの分割はしたくなるが、ある程度最小限のほうがよさそう。

    今回はUnity3D – Unity3Dで、体感ロード時間を減らす – Qiitaを参考にApplication.LoadLevelAdditiveAsyncを採用してみた。

    ただし、非同期で読み込むので、読み込みが完了したかが分からなかったので、以下のようにあるオブジェクトがFindできたらLoadしたとみなす処理を書いた。

    Application.LoadLevelAdditiveAsync ("Game");
    
    StartCoroutine (ObjectChecker (0.1f, () => {
        Debug.Log ("OnLoad---------------------------------");
    }));
    
    IEnumerator ObjectChecker (float secs, Action callback)
    {
        while (GameObject.Find(ConstantsUI.GAME_CAMERA) == null) {
            yield return new WaitForSeconds (secs);
        }
    
        callback ();
    }
    

    このあたりもっと良い方法がないかなー

    NGUIについて

    2Dのゲームアプリを作るため、NGUIを使ってみました。
    はじめの数日はハマることが多いですが、手に馴染んでくるとこれなしでは2Dアプリは作れないという印象。

    NGUIのレンダリングコントロール

    少しやっかいだったのが、レンダリングの順番をどうコントロールするか。

    UIPanelのRenderQでStartAtにしてここでコントロールした。
    NGUIはどうもRenderQueueが3000番から始まるようで、ここを知っていればレンダリングのコントロールは用意です。

    NGUIのコントロールとUnityの3Dコントロール、たとえばパーティクルとかを一緒に使う場合は、以下のようなコードをパーティクルにつけて、3001とかになるようにすればパーティクルが手前にレンダリングされます。

    ■参考リンク

    Webデザイナーが覚えるUnity その2 NGUIの基礎知識 | GREE Creators Blog
    【Unity】NGUIを使ってボタンを実装する。 | albatrus.com
    ゲームは初心者にやさしく: NGUI 描画順について
    NGUIではないオブジェクトをNGUIの手前に描画する方法 – 太郎Work
    ウダサンコウボウ: [Unity]NGUIのDepth設定
    ウダサンコウボウ: [Unity]NGUIのDepth設定その2(複数Atlas)

    NGUIのアニメーションをプログラムから指定する

    TweenPosition tp = TweenPosition.Begin (gameObject, 0.5f, new Vector3 (0, 0, 0));
    tp.tweenGroup = 0;
    tp.from = new Vector3 (transform.localPosition.x, transform.localPosition.y, transform.localPosition.z);
    tp.method = UITweener.Method.EaseInOut;
    tp.style = UITweener.Style.Once;
    tp.AddOnFinished (new EventDelegate (OnShowOverlayEnd));
    tp.Play (true);
    

    ■参考リンク
    開発メモ 「NGUIのまとめ(スクリプトから動的動作)」 – シヴァのブログ
    NGUI TweenPostion.. – Unity Answers
    NGUI: Next-Gen UI kit: TweenPosition Class Reference
    【Unity】NGUIのTweenを利用してみる | albatrus.com

    NGUIのイベントたち

  • void OnHover (bool isOver) – マウスポインタが重なったときに呼ばれます。タップは×。
  • void OnPress (bool isDown) – マウスによりクリック(押下時と離脱時の2回)が発生したときによばれます。タップも○。
  • void OnClick() — 上と同じですが、離脱時の1回だけ呼ばれるパターン。
  • void OnDoubleClick () — ダブルクリックされたとき。
  • void OnSelect (bool selected) –選択メニューで便利?OnClickと同じだけど、こっちは他のものが選択されるまでは2度目の選択時には呼ばれません。
  • void OnDrag (Vector2 delta) – OnPress(true) と OnPress(false)の間に起きた移動を取得。タップ○。
  • void OnDrop (GameObject drag) – ドロップ時(OnPress(false)のタイミング)にドロップされた(下にある)オブジェクト側で呼ばれる。引数には、ドロップした(上にある)オブジェクトが渡される。
  • void OnTooltip (bool show) – Sent after the mouse hovers over a collider without moving for longer thantooltipDelay, and when the tooltip should be hidden. Not sent on touch-based devices.
  • void OnScroll (float delta) マウスのホイールが動いた時によばれる
  • void OnKey (KeyCode key) キーボードが押されたときによばれる
  • via: NGUIでイベントを取得する | Unity3Dのプラグインによる開発

    こちらのサイトにはほんと助けられました。
    どうゆうイベントがいつ呼ばれるのかまったく分かりませんでした。

    動画をネイティブのプレイヤーでフルスクリーンで再生する

    Handheld.PlayFullScreenMovie ("main_movie.mp4", Color.black, FullScreenMovieControlMode.Full);
    

    たったのこれだけ、ただUnity上で実行するのではなくあくまでもネイティブのプレイヤーを表示するので、
    使いどころとしては、何かチュートリアル的な動画などを再生するときかなー

    Unity – Scripting API: Handheld.PlayFullScreenMovie
    Handheld.PlayFullScreenMovie on Android | Unity Community

    Unity4入門   最新開発環境による簡単3Dゲーム製作
    浅野 祐一 荒川 巧也 森 信虎
    ソフトバンククリエイティブ
    売り上げランキング: 1,332

    コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

    *

    次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>