アデリーペンギンについて
※開発には全く関係ありません
皆さんはアデリーペンギンという動物を知っていますか?
とても愛らしい目が特徴の鳥類ペンギン目ペンギン科アデリーペンギン属の一種です。
アデレーペンギンとも呼ばれています。
このペンギンを一目見てから私は心を奪われてしまいました。
まずはこちらの画像をご覧ください。
アデリーペンギンです。
艶やかですね。
このような外見をしています。
一緒に暮らしたいですね。
生態
アデリーペンギンの生態について紹介します。
このペンギンは南極大陸で繁殖します。
南極大陸で繁殖できるのはなんと
つまりお姫様なわけです。
可愛いですね。
体長は50-70cmくらい、体重は5kgほど。
もてもてと太っているように見えて痩せ型です。
これが南極でペタペタと何万匹も歩いているわけです。
飛び込みたいですね。
全身が羽毛で覆われていて、寒さに適応した形になっています。
もふりたいですね。
成長するときはこのように成長します。
最初の方は特徴的な目もともそれほど目立ちません。
成長してくると、目の周りに白いラインの羽毛が生えてきます。
それがあの可愛らしい顔のワンポイントになるわけです。
ひなの状態では、親がとってきた魚を口移しで食べます。
そして、成長して羽毛が生え変わると海に入っていくのです。
さて、このようなアデリーペンギンですが
地球温暖化の影響で数を減らしています。
由々しき事態です・・・。
そういうことなので皆さんも環境には気を向けていきましょう。
ただ私が言いたいことは一つです。
アデリーペンギンは可愛い
終わり
Swiftでカメラで撮ったUIImageをいじった
SwiftのAVFoundation
を使ってカメラで撮った写真を加工する必要があって、いろいろいじっていた
らなぜかうまくいかず、画像が回転したりした
なんでなん
カメラを使って保存したUIImageは向きに応じて自動で回転したり補正される
けど、加工する時CGImageに直すと補正がかかってないからいじるとおかしくなる
詳しい人原因求む
かなり強引に直した
image = UIImage(CGImage:image.CGImage!,scale:1.0,orientation:UIImageOrientation.LeftMirrored)
UIGraphicsBeginImageContext(size)
pngImage.drawInRect(CGRectMake(0, 0, size.width, size.height))
pngImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
カメラからCaputureしたimageをLeftMirroredで回転
CGRect型のSize(中身はimage.size.widthとかから取得)を指定して強引に元のサイズに戻す
もっといい方法があるはずなので模索して追記予定
終わり
UnityのRemoteProfilerを使おう
RemoteProfilerとは
実機上で動作しているUnityアプリケーションの動作状態をEditor上のProfilerで確認出来る
logcat使うよりグラフィカルに見れて割と便利なのでまとめておく
準備
ビルドするときにDevelopmentBuildとAutoconnect Profilerにチェックを入れる
自動ビルドしてると入れそこねてたりする(した)
コード上で書く場合は
BuildOptions opt |= BuildOptions.Development|BuildOptions.ConnectWithProfiler;
とかで指定してBuildPipelineに渡しましょう
iOS
iOSはめっちゃ楽です
- 実機にipa入れる
- PCとUSB接続してアプリ起動
- PlatformをiOSにSwitch
- Editor上でProfilerタブを開く
- Profilerタブの上の方にあるActiveProfilerを開き、端末名を選択する
Android
ちょっとめんどい
- 実機にapk入れる
- Unityを終了させる(USB接続をUnity起動後にやると認識しない)
- PCとUSB接続してアプリ起動
- ターミナル起動してadbにパスを通し下記を入力
adb forward tcp:54999 localabstract:Unity-[bundle]
[bundle]部分は設定したBundleIdentifier
- Unity起動してPlatformをAndroidにSwitch
- Profilerタブを開く
- Profilerタブの上の方にあるActiveProfilerを開きAndroidPlayerを選択
Unity起動してBuild&Runしても動作しなくて詰まってたら再起動しないと認識しないとか聞いてない(´Д` )
上記で確実に動くはずです
終わり
UnityEngine.VRについて
UnityEngine.VR
公式でVRがサポートされるようになってから追加された名前空間
割と使うなっていうモノがそろってたのでまとめる
unity5.1.3f1での情報です
VRNode
LeftEye,RightEye,CenterEye,Headの4種類がある列挙体
Transformなどを取得する際に必要になる
-
LeftEye
その名の通り左目のノード
-
RightEye
その名の通りry
-
CenterEye
右目と左目の真ん中のノード
-
Head
頭らしい、これはちょっと謎です
VRDeviceType
OculusやMorpheusなどの情報が格納されている
何が接続されているかのチェックなどに使用できる
InputTracking
-
GetLocalPosition(VRNode)
Nodeで指定した部位のPositionをLocalに変換してVector3で返す
ゲームを作るだけなら大体カメラのポジションとるだけで事足りる・・・( 一一)
-
GetLocalRotation(VRNode)
Nodeで指定した部位のRotationをLocalに変換してQuaternionで返す
オブジェクトの位置補正をしたりするのに使う可能性もあるかも
-
Recenter()
現在の位置をセンターとしてトラッキング位置を初期化する
めっちゃ使う
VRDevice
-
GetNativePtr()
VRデバイスシステムのポインタ(IntPtr)を取得する
まず使わないけど自分でVRデバイスシステムをカスタムしたいウィザード級の人向け
-
family
loadされているVRデバイスの名前、string
ロードされているデバイスが一つじゃなかったとき複数返ってくる
複数デバイス持ってないのでどう返ってくるかは検証できない、だれかしてください
-
isPresent
正常にデバイスが動作しているかの真偽値
正常に動作してなかったら再ロードしたりするときに使う
-
model
ロードされてるVRデバイスのモデル名、らしい
あとで調べて追記予定
VRSettings
これ便利です
-
enabled
VRデバイスに画面を出力するかどうかの設定
これを使えばゲーム中にHMDを外させたりつけさせたりする事が出来る
ただ、trueからfalseにしたときHMD側に出力されていた映像がそのまま出力され続けてしまう(更新が止まるだけ)
-
loadedDevice
VRdeviceTypeをセットすることで強制的にそのデバイスをロードする事が出来る
逆に今ロードされているデバイスのタイプも取得可能
上記の映像がそのまま出力され続ける状態を回避するために
loadedDeviceにVRDeviceType.Noneをセットすることで映像を消せるんじゃないか??
試します・・・
-
renderScale
いじるとトラッキングの制度が下がるがテクセルとピクセルの比率を変えられる
わからなければいじらない方がいい
-
showDeviceView
メインディスプレイ上にHMDで表示されている画面をミラーリングするかの真偽値
左目の画面しかミラーリングされない
おわり
参考
UnityのBatchBuildについて
BatchBuildってなんですか
コマンドラインからUnityEditorを起動し、プロジェクトをビルドすることです。
バックグラウンドでビルドを走らせることができ、エディタを立ち上げる必要がないです。
何に使うの?
主に自動ビルドを行いたい場合などに用いられます。
継続的インテグレーションといえばわかる人がいるかもしれません。
詳しくは調べてみてください、Jenkinsなどが代表的なビルドサーバーですかね。
今回の例ではiOSとAndroidのビルドについてを挙げます(XCodeとandroidsdkは設定済みの体で進めます)
準備
まずはプロジェクトのAssets/Editorフォルダ内にBatchBuildフォルダを作成し、その中にBatchBuild.csをCreate->C#スクリプトから作成しましょう。
スクリプトの中身はこんな感じです。
順を追って説明をします。
BuildProject_~
これがコマンドラインから直接呼ばれるメソッドで、ビルドに関する設定を行います。
ビルドするシーンのパス、ビルドの成果物の保存先のパス、ビルド先の対象、ビルドのオプション(これは色々ある)の4つを設定しています。
iOSでは他にも色々設定してありますが、この辺は設定ミスをなくすためにPlayerSettingsの中身をいじってたりするだけですので割愛します。
GetEnabledScenePaths()
見てのとおりです、他にBatchBuildを紹介しているブログさんは多々あったのですがシーンの指定が手入力だったり全取得だったりで使い勝手に欠けたので設定をしました。
BuildSettingsの中に追加されていて、かつチェックの入っているシーンのみパスを返します。
ApplicationBuild()
実質ビルドをするのはこのメソッドです。
BuildPipeline.BuildPlayerに先ほど設定したフィールドを引数として与え、ビルドを行っています。
こんなところがあれば準備完了です、他にもコマンドライン上から引数を持ってきて判別することもできます。調べてみてください。
ビルドしてみよう
では実際にビルドしてみましょう。
その前に
Unityを起動したままコマンドラインで叩くとエラーを吐き出す場合があります
(実際自分はエラー吐きました)
Unityは終了させましょう。
気を取り直して、Androidビルドしてみます。
ターミナルを起動して以下のコマンドを叩いてみてください
$<Unity.appのパス> -batchmode -projectPath <プロジェクトのパス> -executeMethod BatchBuild.BuildProject_Android -quit
-batchmode
バックグラウンドでエディタ起動します
-executeMethod
指定したメソッドを叩きます
うまくできていれば指定したパスに成果物のapkが出力されているはずです
AndroidとiOSの違い
AndroidはSDK連携を行っているので直でapkが吐き出されますが、iOSはXCodeのプロジェクトが吐き出されます。
iOSは設定によってシミュレータービルド、デバイス向けビルドがあるのでそこも忘れないようにしましょう。(あんまり困ったことはないけど一応)
以上、何か間違いがあればコメント、もしくは@YutaKasedaまでお願いします。
2016/8/15追記
Windowsだとシンボリックリンクが使えないのでsymlinkLibのbuildOptionを使うとエラーを吐き出すらしい
対処法を書かれてる方がいらっしゃるので追記
参考ブログ様