CS_INDUSTRIAL

AR/VRエンジニアの趣味ブログ

【Unity】WindowsPCのスクリーンをキャプチャして再生する

以下のほうが高機能で高速です。
tips.hecomi.com

しかし...GTX10XX系を搭載したゲーミングPCでは動かないそうで...??
実際、GTX1070を積んだノートで動作しなかった...

なので動作としては遅いが何となくPC画面をUnity内に描画したくてやってみました。
他に解決策があればぜひ教えていただきたいです。

ソースはこちら、サンプルをいくつか用意したのでどうぞ
github.com

実際に動かしてみるとこんな感じです。
exeでもWindowsであればもちろん動きます。
・Windows10
・Unity2017.3.1

【Unity】Xcodeから実機ビルド時に「App Installation Failed」

はじめに

Unityから書き出したプロジェクトをXcodeで開きiPhoneへインストールしようとした時、以下のエラーが起きた。

`[App Installation Failed] Could not write to the device.`

`[App Installation Failed] This application does not support this device’s CPU type.`

XcodeでRun時にメッセージウィンドウとして表示されます。
頻度としては4回実行して上のエラーが3回に対して、下のエラーは1回くらいです。

動作環境

iPhone7(iOS11 beta)
XCode 9.0 Beta 3
MacBook PromacOS Sierra10.12.5)
UnityPro(5.6.2f1)

そうなった経緯

  1. 朝、問題になっているプロジェクトにて実機インストールができる状態であったことを確認。
  2. デバッグのためUnityのBuild SettingsにてDevelopment BuildとAutoconnect Profilerにチェックを入れる。
  3. その後、以下の記事を参考にIl2cppだったプロジェクトをMono2xに変更する。

www.f-sp.com

すると、エラーが出てインストールができなくなりました。

解決のためにやったこと

Mono2xからIl2cppに戻す

効果なし...

Unity Development Buildを解除

UnityのBuild SettingsにてDevelopment BuildとAutoconnect Profilerにチェックが入っていたので外したが効果なし。

以下は普通にエラー文で検索してみていろいろやってみました

正しいArchitecturesの設定かどうか

teratail.com
Targetの「Build Settings > Architectures > Valid Architectures」にiPhone7のarm64が追加されているか確認したが追加されていた...

容量

gootara.org
iPhoneの容量が足りず入れられない時にエラーが出るとあり、
iPhoneの容量が足りているか確認したが121.6GBも残っていた...

stackoverflow.com
Macの容量が足りないとインストールできずにエラーが出る的なことが英語で書いてあったのでMacの容量が足りているか確認したが67.09GB残っていた...

インストールしてある同じアプリを消す

qiita.com
インストールしているアプリを削除し、再度XcodeでRunしてインストールしようとしたが同じエラーが出た...

CocoaPods

neighborhood.bluz.io
CocoaPodsを使用している場合は.xcodeprojファイルではなく、.xcworkspaceファイルから起動しなくてはいけない。

forums.developer.apple.com
CocoaPodsを更新することで解決すると書かれている。

しかし、このプロジェクトはUnityでCocoaPodsは未使用です...

記事がなくなってきたので汎用的な祈りの儀式を始めます

再起動

iPhone,Macの再起動 & Xcodeのプロジェクトを消してUnityから再度ビルドしたが同じエラーは健在...

Gitから復元

GitからUnityのプロジェクトを復元しました。
そしてバックアップしていたその後の編集内容を手動でマージ....
動いた!

まとめ

  1. いろいろやってみて解決しなかったらGitから復元しよう
  2. 慣れないことをする前にはバックアップを取ろう

おそらく原因は「Il2cpp⇆Mono2x」だとは思いますが戻しても動かなくなるのは厄介ですね...

【Unity】XcodeのプロジェクトからTARGETSを消してはならない!

発生した問題

UnityでiOS向けにBuildしてXcodeのプロジェクトに変換したときに以下のエラーが出てビルドできない。

Exception: Deletion of either of the "Unity-iPhone" or "Unity-iPhone Tests" targets is not supported

原因

Xcode側でTARGETSから「Unity-iPhone Tests」を消していた。
※「Unity-iPhone」「Unity-iPhone Tests」は残しておき、名前も変えない。

解決策

UnityでFileからBuild Settingsを選び、BuildかBuild And Runでファイルを選択するときに出てくるWindowで「Replace」を選択する。
f:id:nanokanato:20170728134716p:plain:w300

Append(追記)じゃなくReplace(置換)することでTARGETSを作成してくれる。
しかし、Xcode側から設定した内容が消えているので注意です。

【Unity】パズドラ風パズル作ってみた

はじめに

最近いろんなゲームをやりつつ、戦略系などが好きなんだなーと実感しました。
その中でも単純なんだけど考えるようなものは暇つぶしには最適で、それがパズルでした。

パズルと言ったらパズドラということもあり(1週間くらいしかやったことないが...)
作ってみることにしました。

完成した動作が以下です。
レイアウト等はまだまだですが一応パズルできる...という感じです。
これにコンボやスコアを設定すれば完璧、作り上簡単にカスタマイズできるはずです。


実装内容

実装後に違うパズルに改造してしている途中なので確かこうだったなぁという復元になってますが、動かない場合はコメント等にておしらせください。

Line3Block

パズルのピースを用意します。
80x80のPrefabです。
f:id:nanokanato:20170616113854p:plain:w300

階層構造はBlock(CreateEmpty:空のGameObject)に
BackGround(UI.Image)とIcon(UI.Image)を用意します。
f:id:nanokanato:20170616113815p:plain:w300

Blockには以下のScriptを追加します。
主にピースの移動後の座標と種類を管理しています。

InspectorからBlockの色(BlockColors)とキャラアイコン(BlockCharas)を設定します。
BackGroundとIconにはBlockの下層に作った同じ名前のUI.Imageを設定します。
f:id:nanokanato:20170616114234p:plain:w300

設定したBlockの色とキャラアイコンの数だけピースの種類が増えます。

Line3Puzzle

BlockのPrefabを生成したり、ピースが揃っているか確認する部分です。

階層構造はCanvas以下にBoard(CreateEmpty:空のGameObject)を配置しているだけです。
Canvasは640x1136で、Boardは560x760です。
Camera等の設定は省きます。
f:id:nanokanato:20170616114904p:plain:w300

Canvasには以下のScriptを追加します。
Blockの生成と破棄、タップ操作の管理、ピースが揃ったかどうかの確認、アニメーションなどを行なっています。

InspectorのBoardにはCanvas下層のBoardを、BlockPrefabにはBlockを設定してください。
f:id:nanokanato:20170616115225p:plain:w300

ビルド

あとはビルドすることでCanvas > BoardにBlockが生成され、操作待ちになります。

処理の手順は以下になります。

  1. ピースの生成 → 2
  2. 揃っているか確認
    揃っていた場合 → 3
    揃っていない場合 → 6
  3. 揃っていたピースを消す → 4
  4. ピースを下に詰める
    空いている場所には上から新たなピースを落とす → 5
  5. 移動後に再確認 → 2
  6. 移動するピースの選択待ち → 7
  7. ピースを移動して入れ替える
    指が離されたら移動を確定 → 2

まとめ

パズルって単純なゲームなのに内部では色々なロジックが動いており面白いです。
結構出尽くしている感もありますがぜひオリジナルのパズルを作ってみてください。

UnityのAssetBundleを簡単にしてみた

はじめに

AssetBundleを使用するときにAssetBundleを読み込んでローカルに保存、Spriteの取得というのが毎回実装していると手間なので以下のように呼び出せるようにしました。
f:id:nanokanato:20170615115801p:plain:w300

AssetBundleMan


キャッシュ→StreamingAssets→ローカルの保存場所→サーバーの順にAssetBundleを探しに行きます。
一度取得したAssetBundleはキャッシュされます。

サーバーとローカルへの通信はWWWクラスを使用したWWWManを使っています。
madgenius.hateblo.jp

使用方法

Spriteを取得する場合
AssetBundleMan.GetAssetBundleSprite("AssetBundle名", "ファイル名.png", (Sprite sprite) => {
    image.sprite = sprite;
});

取得失敗の可能性もあるのでnullチェックしておくとベストです。
AssetBundleとSpriteの取得後に呼ばれて画像が反映されます。

GameObject,Prefabを取得する場合
AssetBundleMan.GetAssetBundleGameObject("AssetBundle名", "ファイル名.prefab", (GameObject prefab) => {
    GameObject gameObject = Instantiate (prefab, this.transform);
});

取得失敗の可能性もあるのでnullチェックしておくとベストです。
AssetBundleとGameObjectの取得後に呼ばれてPrefabから生成されます。

UnityのWWW通信をCallBackで受けとるクラス

簡単にメモ程度ですが、WWWでの通信を簡単に行うために作成しました。
以下の画像の通り、Coroutineを使わずにCallBackでProgress(進捗度)と通信結果を受け取ることができます。
f:id:nanokanato:20170608185914p:plain:w300

staticのクラスなのでどこからでも呼び出すことができます。
MonoBehaviourを通信開始時に取得してCoroutineの処理をしているのでその部分のみ指定のMonoBehaviourに差し替えて使用することもできます。
現状、タイムアウトの処理がないので今後実装するかもしれません。

Unity for MacでVisualStudioを使用する

UnityをWindowsでやっていた人が、Macでやり始めると思うこと?にMonoDevelopってなんだ?ってのがあるかと思い調べてみた。
MacだとVisualStudioではなくMonoDevelopなので使い勝手がいいほうのエディターに変えたいという人もいるだろう。

Visual Studioをインストール

まず、MacにはVisualStudioはない....(完)
だが、VisualStudioCodeというEditorがあるのでそちらを使うことにする。

サイトのトップよりダウンロードができるのでインストールする。
f:id:nanokanato:20170417115610p:plain:w300

単品で使った場合、WindowsのVisualStadioとはレイアウトなどが違うが、使い勝手や機能は大体同じのようだ。

Unityと連携させるために...

Unityで普通にEditorを変更させようとしたがVisualStudioCodeが起動してそこからMonoDevelopが起動してしまう。

調べているとこんなものが…
VisualStadioCodeをUnityに追加するためのScriptらしい。
VSCode - Unity Visual Studio Code Integration

これをAssets以下に追加する
f:id:nanokanato:20170417115716p:plain:w300

Editorを変更

UnityのツールバーからUnity > Preferencesを選択。
f:id:nanokanato:20170417115749p:plain:w300

PreferencesのWindowが開く
VSCode.csを追加したのでVSCodeという欄が増えている
f:id:nanokanato:20170417115818p:plain:w300

External Toolsを選択してEditor AttachingをCodeに変更
もしくはBrowse...からVisualStudioCodeを選択する。
f:id:nanokanato:20170417115836p:plain:w300

これで連携が完了です。EditorがVisualStudioCodeになりました。

インテリセンス(自動補完)を利用する

VisualStudioCodeをEditorに設定し無事Scriptを編集できたのですが、MonoDevelopにはあるインテリセンスがなかったので設定する。

左側のタブから拡張機能( f:id:nanokanato:20170417115947p:plain:w12 )を選択。OmniSharpで検索してインストールしてください。
f:id:nanokanato:20170417120024p:plain:w300

使い心地

Editorとしては最高だと思います。

  • 拡張機能でインストールすることで多言語対応
  • Windows,Mac,LinaxなどのOSで利用でき、OS間の操作感の違いを吸収
  • Microsoftや利用者の更新頻度が高く、機能拡張が増えている。
  • Methodやif,forなどで折りたたむことができる
  • 左右でエディターの分割ができる。(コピペや他プロジェクトとの比較が楽)
  • 上書き保存していないScriptに応じて左上にバッジ表示(自動保存もあり)
  • インテリセンスは機能拡張から追加できるので独自のものも可能?

など...

f:id:nanokanato:20170417120050p:plain:w300

しかし、Unityで使うには以下の点よりまだ早いようです。

  • Projectに常にVSCode.csを追加しないといけない
  • Debug時にBuild構成ファイルやタスクランナーの構成が必要
  • ブレークポイントの設定がし辛い?
  • Unityでの利用者が少ないので何か起こると困るしかない

それでも多くのOSと多言語に対応しているMicrosoftのフリーエディタですのでどこかのすごい人が解決していそうです。
解決策があればぜひ教えていただきたいです。