テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

独断と偏見で選ぶ、Unity 4.5アップデート注目ポイント

Unity 4.5が来た!

今回は少なめのたったの450個合計660個(450は修正点)位の更新な訳だが、今回も簡単に注目ポイントを独断と偏見によりまとめてみようと思う。

Unity 4.5 リリースノート

他にも「ココは見るべきそうすべき」「コレを見れないtsubakiに未来はにぃ」的な物があれば、下のコメント欄やツィートで補足してくれると超うれしい。


1. Unity Remoteがかなり使いやすくなった

UnityRemote4.gifUniteRemoteは、Unityのタッチパネルやプレビュー画面をエミュレートするiOS/Androidアプリだ。これを利用する事で、アプリを実機端末へビルドする事なく、タッチの操作感やアプリの挙動を確認することが出来る。

今回新しくなったUnityRemote4は今までのUnityRemote3と違いWifiではなくUSB接続となり、わざわざPCと同じネットワーク空間に配置せずともUSBを繋ぐだけで遠隔操作が可能になった。

しかもヌルヌル動く。
しかもヌルヌル動く!

これで大分実機確認が楽になるぞヤッター!ちなみに動かすにはUnityEditorのEdit→UniteRemoteのDeviceを指定の端末に設定する必要がある。


なおソースコードはAssetStoreに公開されている模様
Unite Remote 4


2. シェーダーのインポートが高速化

したらしい。以下喜びの声

10倍以上の高速化…だと…!
シェーダーのコンパイルはテクスチャのインポートとオーディオ変換の次くらいに時間がかかっていたので、かなり嬉しい。これは捗る!

これの詳しい話はこちら


3. 構造体のシリアライズが可能に

まずはこいつを見てくれ。こいつをどう思う?
これ、構造体なんだぜ?

スクリーンショット 2014-05-28 1.02.56
何と構造体(Struct)をシリアライズ可能になり、Inspectorに↑の図のように表示出来るようになった。今まではstructがシリアライズ出来ずヒープ領域を汚していたとお嘆きの貴方、もう安心!これからはInspectorで表示する項目も構造体で記述可能です!

ちなみにソースコードは以下のとおり。本当に構造体が使える。

using UnityEngine;

public class SerializeTest : MonoBehaviour 
{
    public Data data;

    [System.Serializable]
    public struct Data
    {
        public int score;
        public string name;
    }
}


4. ドキュメントが新しくなった

ドキュメントが一新された。読みにくい?いや、少し待ってくれ。
コレを見ろ!

スクリーンショット 2014-05-28 1.09.02
フォルダの中に「en」の文字。en...english…つまりjpがあったら…
後は、判るな

まだ無いけどな!!
(正直、こんな感じで分けないで日本語ドキュメントに整形したファイル寄越せ上書きするからって気もしなくもない)

また内容も幾つか更新された。例えばUnityのイベント発生タイミング等も図入りで紹介と、かなり親切になっている。(Execution Order of Event Functions:イベント関数の実行順)の項目で確認出来る。

スクリーンショット 2014-05-28 2.33.11
正に今日はイベントの実行順について書こうと思ってたりしたのは秘密

ちなみにAPI履歴復活。


5. ラベル機能が良くなった

余り使われている所を見ないラベル機能、使えば凄く便利なのだが…
やはりラベルの複数選択・編集が出来ないのが良くない

出来るようになりました〜(イヤッホォオウ)

スクリーンショット 2014-05-28 1.13.52
だいぶ前に【Unity】ラベルを利用したアセットの管理について - テラシュールブログでも紹介したが、この方法は結構良い(面倒だが)。ファイル名にタグを付けるみたいな危険な事をしなくても良いし、検索のヒット率も上がる。
tsubakit1.hateblo.jp


イイね!


6.  名前空間(Namespace)周りの強化

まず一つ!名前空間を使った場合のデフォルト引数が使えるようになった!! 

名前空間はクラス名の衝突を回避する手段の一つ。プログラマー名前空間によって構造化された範囲内で安全・安心にプログラムを開発出来る。 今までも使えたには使えたのだが、名前空間を使った場合デフォルト引数が使えなかった。オーバーロードは使えたはずなのでソレで実行すれば良い話でもあるのだが(最終的にはそうなったと思うし)、オーバーロードはイケてないので結局は名前空間を使わなくなっていた。

しかしYAT安心これからは、namespaceもデフォルト引数も使えるよ!

using UnityEngine;
using System.Collections;

namespace Player
{
    public class MoveObject : MonoBehaviour
    {
        void Update ()
        {
            if (Input.GetKey (KeyCode.W)) {
                MoveRigidbody ();
            }
            if (Input.GetKey (KeyCode.S)) {
                MoveRigidbody (-3);
            }
        }

        void MoveRigidbody (float speed = 3)
        {
            rigidbody2D.MovePosition (transform.position + Vector3.up * speed * Time.deltaTime);
        }
    }
}


それともう一つ、スクリプトの実行順にnamespaceが含まれるようになった!これは少し分かりにくいが、今まではnamespaceがScript Execution Order(スクリプトの実行順)に含まれていなかった為、凄く分かりにくかった(多分動かなかった)

しかし、これからはnamespaceが含まれるので読める!読みやすい!

スクリーンショット_2014-05-28_1_41_21

さらにもうひとつ、名前空間内で名前付き引数が使えるようになった。

この項目は、引数をどの引数に指定するかを決定することが出来る。上手く使えばデフォルト引数をより便利にしてくれる機能だ。例えば以下のように名前付き引数を指定することで、引数の順番を入れ替えたりも出来る。

public void SetParam(string msgint count)
{
    Debug.Log(msg + count);
}

public void Start()
{
    SetParam("通常通り"1); // 通常通り1 と表示
    SetParammsg:"付与"count:2 ); // 付与2 と表示
    SetParamcount:2msg:"逆転" ); // 逆転3 と表示
}

これだけでは便利さが分からない? ならばコレを見よ。名前付き引数を使いデフォルト引数と組み合わせる事で、メソッドの必要な部分だけ定義するような形の実装も可能なのだ!

public void SetParam(string msg = "default message"int count = 5)
{
    Debug.Log(msg + count);
}

public void Start()
{
    SetParamcount:2 ); // default message2と表示
}


7.  Rigidbody2d(2Dの物理演算)が凄く機能拡張した

何かすごく色々と増えた
実際、ログをバーーーーっと眺めると、かなりの割合でrigidbody云々と記載されている。幾つかの項目はphysX(rigidboy)にあってBox2D(rigidbody2d)に無い機能を追加したような印象だ。

rigidbody2D.Moveとかは無かったと思うので、これはかなり嬉しい。またwheel join2Dが追加され、車ゲーが作れるようになった。自分の好きなゲームに運べ!荷物があるのだが、こんな感じのゲームを作ろうと思ったら便利なのかもしれない。

あと、box2dのバージョンが2.3.0になった。


8.  モジュールマネージャーが追加

4.5よりモジュールマネージャーが搭載される。モジュールマネージャーは、多分その名の通りUnity内部の幾つかの機能をモジュールとして分離し、アップデートしやすくする為の仕組みらしい。つまり、エディタ自体をアップデートしなくても、自分の欲しいプラットフォームだけアップデートが可能となるし、Unity側もそこだけアップデートすれば良いのでバグの対策が素早く出来る(当社比)ようになるらしい。

とりあえず分離するのはアップデートの激しいAndroid/iOS/WIndowsPhone/blackberyが対象とのこと。将来的にはuGUIの更新もコレで行っていくらしい。

モジュールマネージャーについてはこちら

スクリーンショット 2014-05-28 1.57.57

9.  シーンのロードが早くなった

正しくはシーンをロードした後、GameObjectやComponentをインスタンス化するパフォーマンスが早くなった。大体、2〜5倍くらい高速化するらしい。

4.1辺りでUnloadUnusedAssetsも大分高速化してたし、3系と比べて
大分高速化したんじゃないかな!

実際はこの辺りは検証が必要だが、Unityのローディングのコストの何割かは間違いなくインスタンス化の部分なので、この項目が高速化されれば、かなーり読込がスムーズになるんじゃないかな。かな

structのシリアライズも含めて、シーンに配置したインスタンスの管理もかなり効率的に運用出来るようになりそうだ!


10.  他

その他色々で目についた所

  • Xcode 5.1に対応
  • Texture2DからJPGが出力可能になった
  • USB経由でプロファイラが使用可能になった
  • iOSのトランポリンが増えてレンダリング関連もカスタマイズ出来るようになった
  • iOSのOpenGL3対応
  • WWW.audioとWWW.assetbundleの負荷を修正
  • WWWのメモリリークを修正
  • PLCrashReporterとPhysXとFMODを-mno-thumbでビルド
  • GetComponentsInParent(親からコンポーネント取得)が追加。
    親が非activeでも取れる
  • Hierarchyビューの項目を自由に並び替えられるようになった。
    ソートも可能らしい。ココ
  • 独自イベントのUnityActionが追加。多分デリゲートイベントを使うと
    iOS下でクラッシュする問題の対策。(一昨日気づいた)
  • SpritePackerがPreviewじゃなくなった
  • コンポーネントにUIRenderer、RectTransform、Canvasが追加
    どう見てもUI関連です。ちなみにCanvasはカメラに置換される。
  • transform.root(ルートオブジェクト取得)みたいな便利機能が追加
  • Projectブラウザの検索バーにSpriteが追加
  • その他WWW周りが色々と修正されてる
  • その他色々なバグ修正



個数は少ないが割と大きめの内容が多い印象。
特にAPI周りは大分色々と追加されてるような気がする。

間違いがあれば指摘してくれると嬉しいです。