作成者別アーカイブ: Hiroshi Murata

【Unity】タッチ処理による画像Panning/Zoomおよびダウンロードした画像の表示テスト

Unity学習ついでに画像ビューア的なものを作ってみた

2DObject-Sprite

最初は下記サイトを参考に2DObjectのSpriteを使用してみた。

Unity – How to do Pinch Zoom And Panning In Unity 2D And Unity 3D : The App Guruz

悪くないけどシンプルな実装なので慣性スクロールがなくてちょっと物足りない。

UI-ScrollRect

やっぱり慣性スクロール入れたいけど自前で処理書くのも面倒なので、UI-ScrollRectを使用してみることに。画像表示はUI-Imageで。

結果、慣性スクロール付きPanning処理はScrollRectがお任せでやってくれるので楽だった。

ただし一点問題が。

マルチタッチでPanningすると、画像があちこちに飛ぶ現象が発生。
おそらく、すべての指それぞれでドラッグ処理が始まってるのが原因と予想。

ScrollRectのサブクラスを作成してドラッグ処理をコントロールしてみることに。
とりあえず今回は現象が発生しなければ良いので、単純に複数のドラッグ処理が行われないようするだけの処理を書いてみた。

 

なんとなくぎこちない動きが残ってるけど、まあこんなものかなという動作になった。
ここからの改善は切りがなさそうなので一旦良しとする。

その他の調整

ダウンロードした画像の表示

ついでにUI-Imageの方は、ダウンロードした画像を表示するようにしてみた。
UI-Imageは自動でアスペクト比を保って表示できるので便利。
Spriteの方はサイズ調整を自分で書けばいいけど、時間ないのでひとまず保留。

Scene切り替え

SpriteとUI-Imageそれぞれの表示は別Sceneに分けて切り替えできるようにした。

サンプルプログラム

Unity ImageViewerTest 

ここ怪しいぞとか、ここはこうした方がもっと良くなるとか、いろいろご指摘いただけるとありがたいです。


UnrealEngineの日 立ち上げ

名古屋のフィーバー柳橋でUnrealEngineの日というものが立ち上がりました。
Meetup主催のたす(@tassjp02)さんも参加されています。

毎月第一、第三木曜日、19:00-21:00の間に、みっちり集中してUE4を触ります。

差し当たっては、もくもく会的に各自のUE4スキルを高めて、春のUE4ぷちコン参加を目指そうということになっています。

お時間合う方はどんどん参加して、名古屋のUE4熱をさらに燃え上がらせて面白くしていきましょう!


第2回 UE4 名古屋ミートアップに参加しました。

先日、名古屋のSHAREBASE.INCで開催されたUnrealEngine4のMeetupイベントで少しだけ発表してきました。
2015年10月に開催されたUNREAL FEST 2015 YOKOHAMAの報告がメインでした。

第2回 UNREAL ENGINE4 名古屋 Meetup!!

#ue4studynagoya

主催者の方が簡単に挙手でアンケートとってましたが、30人ほどの参加者のうち、ゲーム開発系の人が最も多かったです。ちなみに第1回の時に多かったのは建築系だそうです。
いろいろな業界の方がUE4に興味を持っているのが感じられます。

 

報告

フェスから日が経っていることもあり、記憶が薄れてて話す内容がないという状況で。。。
結局、フェス参加後に書いた自分のブログを読み返して記憶を掘り起こしながら発表間際までスライド作ってましたがなんとか間に合いました。

主に、OculusTouch体験の感想と、株式会社ヒストリアの佐々木CEOの講演内容とをピックアップして報告いたしました。

勉強会

第2部として、UnrealEngine開発専門会社の株式会社ヒストリア 原龍さんのお話。

講演中にスライドとデモ動画を公開しておきますとの予告通り、

[UE4] 名古屋 / 仙台 Meetup お疲れ様でした:historia

講演内容を公開されています。
流石ですね。有り難いですね。

次回のぷちコンは春頃予定とのこと。
ぜひ参加したいです。それまでにUE4いじくり回しておかないと。。。

今後

このMeetupは3回、4回と続けていく予定だそうです。
名古屋からUnrealEngine4を使った素晴らしいコンテンツが生まれると良いなあ。
というか、それを自分で作ればいいのか!

ついでに

名古屋のフィーバー柳橋でUnrealEngineの日というものが立ち上がりました。
Meetup主催のたす(@tassjp02)さんも参加されています。

毎月第一、第三木曜日、19:00-21:00の間に、みっちり集中してUE4を触ります。
差し当たっては、もくもく会的に各自のUE4スキルを高めて、春のUE4ぷちコンを目指そうということになっています。

燃えるぜ。


【UE4】UNREAL FEST 2015 YOKOHAMA メモ

パシフィコ横浜で行われたUNREAL FEST 2015 YOKOHAMAについて、自分が気になったことの主観的なメモ。 A,Bの2会場に分かれてて、A会場に張り付いたのでもう一方は分からない。
聴きたい講演が分散かつ時間帯被ってて困った。 それとほとんどの講演は撮影禁止だったので写真はない。  

基調講演

稲船敬二さんの熱い講演響いたなあ。

不可能を可能にするために常に考える。工夫する。チャレンジする。 大事なのはまず自分がやること。 楽したいなら、お金が欲しいなら、もてたいなら、ゲーム業界に来るな。 クラウドファンディングは資金集めより(もちろんそれも大事だが)、応援団を集めるという意味で重要。 ゲームが完成したら買いますよという人でなく、お金を払ってまで応援してくれる人は大切。 そんなことは不可能だと言う人がいたら、動画撮っとけ。

 Oculus Touch

激戦区のOculusTouch体験BulletTrain整理券を運良く入手。
夜行バスで早朝に横浜入りして受付列の先頭の方に並んだ甲斐があったというもの。 受付時には近くに並んでた人でも、初回時間枠では整理券入手できなかった人もいた。
人気があるだけあって、体験した甲斐のあるものだった。  

自分なりの体験感

UnrealEngine + OculusTouchによるFPS系ゲームを体験してみて、この両者の親和性の高さを感じた。 VR空間の手と実際の自分の手との動きのズレはほとんど気にならいぐらい自然。
手が見えてるだけで臨場感が大きく増してる。 違和感があったとしたら、落ちてる銃を拾う際のVR中の手と銃との距離感。それと中指トリガーボタンで銃を握るという操作感。これはそれぞれのコンテンツごとに慣れで対応できる程度のものだと思う。 コンテンツ内のシーン移動にはテレポートという表現を使って画面切り替えしてた。あれは加速を感じさせないことで、感覚不一致からのVR酔いを防ぐための工夫らしい。  

他の方の体験を見て

もう一つ興味深かったのは、他人が体験してるのを横で見てて、体験者の動作を格好良く感じたこと。今ままでの良くあるVRコンテンツだと、体験者のリアクションを滑稽に感じることが多かった。 これはたぶん体験者の動作のイメージと、VR中の動作のズレがあまり無いからだと思う。  

雑感

このコントローラの構成と形が当面のVR標準となる予感。 UnrealEngineとの親和性も高いし、これが出てくることでVRコンテンツ開発はますます加速すると思う。ぜひ抑えていきたい。 これからどんなコンテンツが出てくるか、自分がどんなものを作れるか、とても楽しみ。  

株式会社ヒストリア 佐々木CEO 講演

UE4専門会社が語るUE4のいま / 事例から学ぶモバイル開発のすすめ

iOSアプリ開発者として、今後のUnrealEngineとの関わりを考える上でとても聴きたかった講演。そして聴いてよかった。 さらに、写真撮影OKとのこと。佐々木さん、素敵。
でも撮った写真をここに貼り付けるのも何なので結局写真はなし。  

相談数と受託数

あくまで当社の場合は、という前置きながらとてもリアルな数字を公表してくれたことに本当に感謝!これが聴きたかった!

家庭用/アーケードゲーム系の割合はどちらも大きい。一番安定してる。 モバイルゲームの割合はどちらも小さい。 映像系も相談から受託になること多い。 建築系は相談数は多いが、受託になかなかつながらない。

自分の今いる立ち位置からだと、いずれも一山(それ以上)超える必要がある感じ。
まあiOSアプリ開発者としては差し当たって狙うはモバイル系ですわな。  

家庭用ゲーム機/アーケード

表には出てこないが、大型・中型タイトルにUE4が採用されていってる。 現状、UE4開発者は足りない。今はまだ作ってるところなので、2年後ぐらいに市場に出てくるかも。

とてもやってみたい分野だが、どこから近づいていけばいいんだろうか。
フリーランス辞めて就職か。 

モバイルゲーム

黎明期の感じがしてる。国内の動きは鈍い。 研究を行っているところは多い。 UE4のモバイル対応もロードマップを見る限り、ここから半年でどんどん充実。 事例が出始めているので、ここ一年が勝負。

自分の既存の技術を活かすにはこの方向性ということで、一番聴きたかったところ。
家庭用ゲーム機やアーケードの廉価版にならないように、モバイルデバイスならではのコンテンツを考えたい。

映像

レンダリング時間短縮用途が主。 VR、インタラクティブコンテンツ化、4K/8Kがきっかけの案件も。 静的コンテンツの場合はコンポジット前提。

今までの自分の経験の外にある業界。聴いてて分からないことが多い。
でも自分の回りにも、この業界の人がちらほらいる気配があるので話しかけてみようか。  

映像業界

同じクリエイティブ業界なのでやりたいことは似てて学べることも多い。 UE4を教えれば習得してくれる。

UE4習得してくれる、というのは他の方のツイートで見かけたけど、映像業界では元々ツール系の使用が多いので、新しいツール習得に対してハードルが低いから、ということらしい。

用語、ファイルフォーマットなどが似ているようで違う。
ワークフローや手法が違う。
(中間ファイルの利用、エフェクト、表情もボーンアニメーション、ボーン構造の制約) クオリティラインの高さ、納期の厳しさ

今のところ映像業界に絡むようなお話は身の回りには全く無いけど、未来はどう転ぶか分からない。業界が違えば慣習も違うということ、頭の片隅に置いておこう。 

建築

ウォークスルーの相談が多い。 ウォークスルー + VRも多い。 単なる現状の建築パースの置き換えでは案件になりづらい。

気になっていた業界。単純なVR化では予算感が合わないのでは、とのこと。
簡単ならみんなすぐに参入できてしまう。難しいからこそ工夫の余地があり、手をかける価値がある。

UE4

フリー化と極本の増加でホビーユーザーが増えた印象。

ここ1年の予想

大型タイトル量産フェーズ モバイルタイトル、映像用途の波 ノンゲーム採用の事例が多くでてくる

参考

UE4攻略wiki  

モバイルパフォーマンス

iPhone5世代ならまあ動くぐらい。 iPhone5s世代で30fpsは出てる。 報告によるとiPhone4s世代でもかろうじて動く?

iOS側はまあまあ対応状況良さそうな感じ。  

機種依存

Androidの特定端末において、メモリ不足でテクスチャ壊れたり、そもそも起動しなかったり。 技術検証的なプロジェクトだったこともあり、Androidのいくつっかの端末は切った。

Androidはまあ、うーん、いろいろ出てくるだろうな。
いつも切り捨てできる状況のプロジェクトならいいけど。   以上、気になったところ(理解できたところ)のみ抜粋。
後はUE4触りながら経験あるのみ。  

GRID VRICK

レゴで家の間取りを作ると、3Dモデルが作られていくソフト。 まだ開発中。 子供の食付きは凄いらしい。  

その他

Oculus Rift

みんなOculusって呼んでるけど、Oculusは社名、Riftが製品名。(by GOROmanさん)

その他

他にもいろいろ深い話聴けたけど、いろいろ力尽きたのでまた今後加筆修正することにする(かもしれない)  

参考サイト

詳しいレポートは以下に譲る。
細かい様子はこれを追っかけたら全部分かる。
まとめてくれた方に感謝。 UNREAL FEST 2015 YOKOHAMA tweetまとめ #unrealfest2015:togetter [UE4] UNREAL FEST 2015 Yokohama レポート:Developers.IO


【iOSメモ】iOS9でUnwindSegueが動作しない

iOS8では問題なかったUnwindSegueが、iOS9へアップデートしたデバイス上では動作しなくなった。

参考リンク先によると、Custom UnwindSegueを使用するためにCustom Container ViewController(UINavigationControllerのサブクラス)でオーバーライドしている以下のメソッドが問題らしい。

ただし、このメソッドはiOS9からDeprecatedされてる。

そして新たに登場するのが、

なぜかこのメソッドは現時点ではドキュメントに記載されていない。

詳細は参考リンク先に任せるが、iOS8以前とiOS9以降両方の環境に対応するためには、これらのメソッドを混在させないといけない。
結局リンク先の記事を参考にいろいろ弄ってみて落ち着いたのが以下のコード。

とにかくiOS9では、unwindForSegue:towardsViewController: を呼んでやることが重要らしい。

だがいろいろ試してる途中で、pushとmodalで動作が異なっていたり、headerコメント通りの結果にならなかったり、怪しい動作がちらほらと。

そもそもDeprecatedされたメソッド使ってるので、将来のOSバージョンアップで動作かわる可能性はあるので、気に留めておかないといけない。

面倒くさい。

参考

Custom Unwind Segue for iOS 8 and iOS 9

 

 


【iOSメモ】SLServiceTypeFacebookの場合、SLComposeViewControllerのsetInitialTextメソッドが機能しない

2015/5/29追記

Facebook Developers サイトのBugsレポートで見かけた。
SLComposeViewController no longer works after Apr 24th Facebook App update

Facebookの中の人の最後のコメントが、

Amudi Sebastian ·  · Facebook Team

setInitialText behavior is by design. Please refer to the Platform Policy here: https://developers.facebook.com/docs/apps/review/prefill
May 26 at 12:26pm · Edited · Confidential Reply · Reply
 
このレポートのstatusはFixedになってるので現時点でこれが答えですな。。。
 
 

setInitialTextしても初期テキストが表示されない

ふと気づくと、setInitialTextメソッドを使って初期テキストを設定しても、SLComposeViewControllerの画面に初期テキストが表示されなくなっていた。

 

調べてみると、Facebookへのシェア時には、投稿文はすべてユーザーが自分で書いたものしか許されない、というFacebook側のプラットフォームポリシーが原因のようす。

新しく追加されたポリシーなのか、以前からあったものが厳格に適用されるようになったのかは不明。。

内容を読むと、ユーザーが自分で編集したり削除したりできるものであってもNG、ユーザーがボタンをタップして自動入力させるようなものであってもNG、など個人的にはちょっと厳しすぎるんじゃないかと思える内容となっている。

iOSはこれに準じて動作しているようで、今のところ回避策は見えない。
iOS8.3から症状が出たと書いてるサイトもあったけど、手元ではiOS8.0.2でも再現してるのでたぶんiOSバージョンは関係ない。

ちなみに、Facebookアプリを削除すると現象は治ってInitialTextが表示されるようになる。
なんの解決にもならないけど。。

 

参考リンク

Sharing on iOS

Platform Policy 2.3 Example and Explanation


【iOSメモ】画像の撮影日時を特定したい

画像の撮影日時を特定したい

画像データの撮影日時を特定しようとして、Exif撮影日時の取り扱いにちょっと悩んだ。
理解不足があるかもしれないけど、現時点で分かったことをメモしておく。

 

そもそもの要件として

  • UIImagePickerControllerのカメラまたはフォトライブラリから画像を取得する。
  • 撮影日時と撮影場所の座標を特定したい。

 

撮影場所の特定

カメラ撮影時

CLLocationManagerを使って現在位置(CLLocation)を取得する。

フォトライブラリ利用時

画像データの持つExif内のGPSデータを利用する。

撮影場所の取得については特に問題ないと思う。
それぞれGPS情報が得られない場合はどうするのかはまた別に考える。

 

撮影日時の特定

まず撮影日時として使えそうな値が3つほどある。

  • GPS日付
  • システム日付
  • Exif撮影日時

 

それぞれの取得方法をざっくりまとめてみた。

  GPS日付 システム日付 Exif撮影日時
カメラ撮影時 CLLocation *location
[location timestamp]
(UTC)
[NSDate date]
(UTC)
DatetimeOriginalタグ
(タイムゾーンなしの現地時間)
フォトライブラリ
利用時
Exifの GPSデータ
DateStamp, TimeStamp
(UTC)
 × DatetimeOriginalタグ
(タイムゾーンなしの現地時間)

 

Exif撮影日時

本来、撮影日時といえばこのExifのDatetimeOriginalなんだろう。
でもこいつはタイムゾーンを持っていないという問題がある。

例えば、iPhone端末を持って国外へ行き、現地でタイムゾーン情報を取得した以降に撮影した写真の日時は現地時間となる。
東へ向かって旅行してタイムゾーンを跨ぐと、後に撮影した写真の日時が先の写真よりも前になる。

GPS情報が記録されていれば、タイムゾーンを判定してUTCへと変換することはできるかもしれない。
しかし、撮影日時は必ず現地のタイムゾーンで記録されてるんだろうか?
GPSは現地の位置で記録されていて、撮影日時は出発地点のタイムゾーンのまま記録されてしまっていた、ということはないんだろうか?
という疑問について、Exif情報への理解不足から確信がもてない。

システム日付

システム日付はフォトライブラリ利用時は意味が無いので使えない。
カメラ撮影時は別に使っても良いけど。

GPS日付

要件上、カメラ撮影時は撮影場所を特定するためにGPS情報を取得しているので、GPS日付は使用できる。

フォトライブラリ利用時は、GPS情報が記録されている画像を使用することが前提にはなるが、GPS日付を使用できる。

実はこのGPS日付もタイムゾーンを持っていないが、UTCということを前提に扱う。

 

現時点での結論

いろいろ理解不足な面があるので確信もてないところもあるが、写真画像データに関する仕様上、安定して使える日付情報は今のところないように見える。
とりあえず、現時点ではGPS日付を使って撮影日時を特定するのが最適だと判断。

 

参考

Exchangeable image file format

Exifファイル(4回目) ~ Exif IFD解説 ~

iPhoneの画像からEXIF,GPSデータを取得する

Get EXIF data of a particular image/photo in cameraroll


「Paddy: 風景を共有するアプリ」をリリースしました

長らく開発のお手伝いをさせていただいてたアプリが、ようやくのリリースとなりました。

風景写真を共有するアプリです。

家の近くで自分の知らない風景を見つけたり、旅先で地元の人しか知らない風景を知ることができたり、思わずそこに行ってみたくなるような風景を発見できたりします。

自分が見かけた気になる風景を気軽に撮ってシェアしてみてください。
風景写真と言っても、プロ写真家が撮るような超絶技巧の素晴らしい写真でなくても全然大丈夫です。

自分には当たり前の日常の景色が、他人にとってはそこへ行ってみたくなるような風景かもしれません。

リリースしたばかりで機能的にもまだまだ改善の余地がありますが、長く育っていけるアプリだと思います。

ぜひ使ってみてください。

(ご要望やバグを発見した際はお気軽にお知らせください。)


iPhone用福笑いアプリのサンプルプログラム(Swift版)

以前作ったサンプルプログラムをSwiftで書きなおし

福笑いアプリ

以前に福笑いを題材にサンプルアプリを作りました。

iPhone用福笑いアプリのサンプルプログラム

これは全てObjective-Cで書いてたので、Swiftで書きなおしてみました。

サンプルプログラム

福笑いiPhoneアプリサンプルプログラム Swift版

前回のコードはこちら
福笑いiPhoneアプリサンプルプログラム Objective-C版

ここ怪しいぞとか、ここはこうした方がもっと良くなるとか、いろいろご指摘いただけるとありがたいです。


【Parseメモ】BFTaskMultipleExceptionsExceptionリンクエラー

ParseSDKをver1.6.1からver1.6.4に更新したら以下のリンクエラーがでるようになった。


BFTaskMultipleExceptionsExceptionは、Bolts.frameworkの最新版(ver1.1.4)ではBFTask.hに

として定義されている。

しかし、現状の環境下で参照してるバージョンでは定義されていないらしい。

 

現状の環境は、

  • ParseSDK Ver1.6.4
  • FacebookSDK Ver3.20.0

Bolts.frameworkはFacebookSDKに含まれていて、このBolts.frameworkはver1.1.3であり、BFTask.hには上記の定数は定義されていない。

だからといって、Bolts.frameworkの最新版(ver1.1.4)を個別にリンクしようとすると、FacebookSDKが持つBolts.frameworkとduplicate symbols のリンクエラーを生じる。

FacebookSDKを最新版のver3.23.1にアップグレードしても、Bolts.frameworkのバージョンは同じくver1.1.3なので状況は変わらない。

FacebookSDKが参照しているBolts.frameworkを手動で最新版へ変更する手段が私には分からないので、ParseSDKのバージョンを元に戻して、FacebookSDK側の対応を待つことにする。

 

参考

Parse and facebook sdk -duplicate symbol