アデリーペンギンについて

※開発には全く関係ありません

 

皆さんはアデリーペンギンという動物を知っていますか?

とても愛らしい目が特徴の鳥類ペンギン目ペンギン科アデリーペンギン属の一種です。

アデレーペンギンとも呼ばれています。

このペンギンを一目見てから私は心を奪われてしまいました。

まずはこちらの画像をご覧ください。

f:id:yutakaseda3216:20160210104610j:plain

アデリーペンギンです。

艶やかですね。

このような外見をしています。

一緒に暮らしたいですね。

 

生態

アデリーペンギンの生態について紹介します。

このペンギンは南極大陸で繁殖します。

 

南極大陸で繁殖できるのはなんと

皇帝ペンギンアデリーペンギンだけです 。

つまりお姫様なわけです。

可愛いですね。

 

体長は50-70cmくらい、体重は5kgほど。

もてもてと太っているように見えて痩せ型です。

 

これが南極でペタペタと何万匹も歩いているわけです。

飛び込みたいですね。

 

全身が羽毛で覆われていて、寒さに適応した形になっています。

もふりたいですね。

 

成長するときはこのように成長します。

f:id:yutakaseda3216:20160210105800p:plain

最初の方は特徴的な目もともそれほど目立ちません。

成長してくると、目の周りに白いラインの羽毛が生えてきます。

それがあの可愛らしい顔のワンポイントになるわけです。

ひなの状態では、親がとってきた魚を口移しで食べます。

そして、成長して羽毛が生え変わると海に入っていくのです。

 

さて、このようなアデリーペンギンですが

地球温暖化の影響で数を減らしています。

由々しき事態です・・・。

 

そういうことなので皆さんも環境には気を向けていきましょう。 

 

ただ私が言いたいことは一つです。

アデリーペンギンは可愛い

f:id:yutakaseda3216:20160210110437j:plain

終わり

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はめっちゃ楽です

  1. 実機にipa入れる
  2. PCとUSB接続してアプリ起動
  3. PlatformをiOSにSwitch
  4. Editor上でProfilerタブを開く
  5. Profilerタブの上の方にあるActiveProfilerを開き、端末名を選択する

Android

ちょっとめんどい

  1. 実機にapk入れる
  2. Unityを終了させる(USB接続をUnity起動後にやると認識しない)
  3. PCとUSB接続してアプリ起動
  4. ターミナル起動してadbにパスを通し下記を入力

    adb forward tcp:54999 localabstract:Unity-[bundle]

    [bundle]部分は設定したBundleIdentifier

  5. Unity起動してPlatformをAndroidにSwitch
  6. Profilerタブを開く
  7. 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 - スクリプトリファレンス:

UnityのBatchBuildについて

BatchBuildってなんですか

 コマンドラインからUnityEditorを起動し、プロジェクトをビルドすることです。

バックグラウンドでビルドを走らせることができ、エディタを立ち上げる必要がないです。

 

何に使うの?

主に自動ビルドを行いたい場合などに用いられます。

継続的インテグレーションといえばわかる人がいるかもしれません。

詳しくは調べてみてください、Jenkinsなどが代表的なビルドサーバーですかね。

今回の例ではiOSAndroidのビルドについてを挙げます(XCodeとandroidsdkは設定済みの体で進めます)

 

準備

まずはプロジェクトのAssets/Editorフォルダ内にBatchBuildフォルダを作成し、その中にBatchBuild.csをCreate->C#スクリプトから作成しましょう。

スクリプトの中身はこんな感じです。

giste16b45825009cff98e7e

 

順を追って説明をします。

 

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が出力されているはずです

 

AndroidiOSの違い

AndroidSDK連携を行っているので直でapkが吐き出されますが、iOSXCodeのプロジェクトが吐き出されます。

iOSは設定によってシミュレータービルド、デバイス向けビルドがあるのでそこも忘れないようにしましょう。(あんまり困ったことはないけど一応)

 

以上、何か間違いがあればコメント、もしくは@YutaKasedaまでお願いします。 

 

2016/8/15追記

Windowsだとシンボリックリンクが使えないのでsymlinkLibのbuildOptionを使うとエラーを吐き出すらしい

対処法を書かれてる方がいらっしゃるので追記

qiita.com

 

参考ブログ様

Unity - コマンドラインからビルドする - Qiita

ブログ始めました

なにすんの?

技術的なメモとか、チームでの開発記録を残すかと思います。

あなた誰?

1994年生まれのゲームとかアプリ作ってる学生です。

ゲーム会社でゲーム作ってます。

チーム、個人でも開発をしています。

なにできるの?

C++/CLIC#・Swiftとかです。

githubも使ってます。

 

試しに書いてみました、今後続くといいなあ。