Google

2015年6月15日月曜日

Unrealの使いにくさを再実感

機能比較のためにUnty5とUnreal Engineで同時に小規模なアプリの実装を試みてみた。
デスクトップ用なのでパフォーマンスをさほど気にしなくて良かったのは幸いなのだけど、無駄に遠回りが多かった。
中身は書けないので、概要とか探し方の備忘録記事ってことで。

元々Unrealの使いにくさは以前から感じていたのだけど、Unityで簡単にできる事をやってみようとしたらやっぱり使いにくい事を再実感、、、。
そもそも英語コミュニティにすら質問だけしか挙がってないことが多いのが困りもの。

なので、今までやったことがないことで実現したいことがある場合、以下の方法を取ってみた。

  • Unityでの機能名をそのまま英語にしてUnrealを付けて検索
  • 機能名は表現の違いというか方言があるので、コミュではそのまま検索しても大抵だめ
  • できるだけ公式リファレンスから用語を合致させて検索
  • BluePrintの例があったら動画や画像とにらめっこ

これで大分情報が拾えたのが助かった。
Unityと違って大半のヒントが公式にあって日本語モードがあったのが救いだったかも。

自分用備忘録ってことでUnityとの違いで気づいた点とかを列挙。

  • 単純なClling Mask機能が無い
  • サブカメラは2台目カメラだけじゃダメ。SceneCaptured2Dに写してテクスチャで貼る
  • レベルBluePrint以外からLevel上のActorを参照する時は、All Actors ClassからForeachLoopで目的の型にキャスト
  • カメラ付きマチネを有効化すると実行時にそっちが優先される
  • カメラ付きマチネは編集時にディレクター部分を切らないとエディタカメラと同一化して混乱する
  • C++に慣れてるならそっちで書いてBluePrintに公開する方が簡単
  • BluePrint操作時に、ノードから伸ばして出る一覧と右クリックして出る一覧は内容が違う
  • マチネの自前追加イベントは参照時にBluePrintノードをリロードしないと出てこない
  • 原因不明エラーという酷い内容のエラー時は大抵処理ノードのつなぎ忘れ

とにかく落ちるのは勘弁して欲しい。
リファクタリングして参照が切れた時に固まって落ちるのは何回見たことか、、、、。

うーん、すさまじく抽象的かつ愚痴だらけな記事になってしまった。
ディスってばかりですみません。
環境光等ではやっぱりUnrealが上なのは間違いない模様。
使いやすさではUnityがまだ大分有利かと。

2015年6月9日火曜日

Unity4.6で64bit版の審査

備忘録のおはなし。

Unity4.5.xで安定動作するiOSアプリをバージョンアップ申請したら、大分時間が経ってからリジェクトされてしまった。

確か最後に申請したのが5月下旬ごろ。
リジェクト食らった時点で6月に入ってるから、もう32bit版は受け付けてくれない。
こんなに遅れたのはもしかして、アップル審査チームが64bitへの移行騒ぎでカツカツだったのかも知れない。
が、あータイミング悪すぎ、、、。

本来こういう記事は事前予測の上6月前に書くべきなんだろうけど、古いプロジェクト変換の備忘録のために記事を作っておく事に。

さて、32bit版のUnityプロジェクト(実は自作プラグイン込み)を移行せねば。
Unity5にするのも時間が掛かりそうでお客さんを待たすのも何だったしで、とりあえずUnity4.6.5p1を準備し、プロジェクトを読み込んでみた。
プロジェクト自体の互換性はあるので、ビルドを64bitにすべく設定変更開始。

Unityのプロジェクト設定を開いて、Configrationグループを見つける。
そこからScripting BackendをMono.2.xからIL2CPPに変更。




こうしないと64bitの追加が選択肢に入らない。
同、ArchitectureがあるのでそれをUniversalに。
armv64単体だと古い機種が動作不可能になるので、これは仕方なし。


これでBuildし、XCodeプロジェクトを生成。
予想通り、今までの生成時間より体感で倍近く掛かるようになった。

生成されたXCodeプロジェクトを開いたら設定に移動。
TARGETからUnity-iPhoneを選択し、Build SettingsタブからArchitecturesグループを探す。
既に存在するStandard Architecturesにすればarmv7, arm64のファットバイナリにしてくれる。
後は同グループのBuild Active Architecture OnlyをReleaseだけNOにする。



うちの都合ではあるものの、ターゲットが7.0以降という事情があるので、GeneralタブからDeployment infoグループを探し、Deployment Targetを7.0である事も確認。
Unity側でターゲット設定してあるから今回は特に問題なし。



さあこれで後は実機で動作実験、、、と思ったらこんな問題が待っていた。

 1. 自作プラグインで実装していたauto release廻りの処理が変更に
 2. OnGUIで出す座標が@2xのような等倍での指定になっていた
 3. 自作プラグインで別のUIViewを親子関係付けする際、UnityViewの生成タイミングが変わったらしく、最初に取得して使いまわそうとしたらぬるぽだった(必要時に取るだけでOKだった)

2. はデバッグ出力用なのでどうでも良かったのだけど、1. はUnityの内部でクラッシュしてしまい、一瞬焦ってしまった。
宜しくないコードの修正にもなって良かったといえば良かったんですが。
参考にもならんのでしょうが、4.5からの移行で発生したという事の記録なんで、読みに来た人にはお役に立ちませんがご勘弁を。

後はいつもどおりメニューのProductからArchiveし、OrganizerからValidate、Submitでアップロード完了。

こっちはどうにかなったけど、もしかしたらサードパーティでarmv7にしか対応してないライブラリを使っているプロジェクトとか、大変な思いをしてるんじゃないだろうかと勝手に予測。
XCode側のarm64リンケージでエラーが大量に出るはずだし。

で、今回のオチですが、レガシープロジェクトは安定してる時期に切り替えた方がいいという教訓を学べたということで。