【Unity】XcodeのプロジェクトからTARGETSを消してはならない!
発生した問題
UnityでiOS向けにBuildしてXcodeのプロジェクトに変換したときに以下のエラーが出てビルドできない。
Exception: Deletion of either of the "Unity-iPhone" or "Unity-iPhone Tests" targets is not supported
解決策
UnityでFileからBuild Settingsを選び、BuildかBuild And Runでファイルを選択するときに出てくるWindowで「Replace」を選択する。
Append(追記)じゃなくReplace(置換)することでTARGETSを作成してくれる。
しかし、Xcode側から設定した内容が消えているので注意です。
【GAS】GoogleAppScriptをはじめよう
GoogleAppScriptとは
Google Apps Script(GAS)はGoogleが提供する11のサービスをクラウド上でスクリプトを実行することで操作できるサービスです。
言語はJavaScriptをベースとしています。
例えば一定時間ごとにデータを集計したり、SNSに投稿するBotを作ったり、GoogleSpleatSheetを編集したりなどが可能です。
以下のGoogleの機能と標準で連携することができるのでいろいろな使い方が可能です。
GASを用意しよう
GoogleDriveに入って右クリックで「その他 > Google Apps Script」を選択。
※その他に無い場合はアプリを追加で探してみてください。
GASを使ってみよう
上のアプリを追加で作成された無題のプロジェクトです。
左上の「無題のプロジェクト」の部分をクリックすることでプロジェクト名を変更できます。
左の「コード.gs」の部分にgsファイルが並びます。
ファイル名の右の▽をクリックすることでファイル名を変更したり、ファイルを削除、コピーできます。
とりあえず動かそう
プロジェクト名、ファイル名、メソッド名を「test」に変えてみました。
function test() { Logger.log("Hello World!"); }
Logger.log(string)でログを表示します。
ボタンをクリックで実行されます。
初回実行時のみ、Googleアカウントの認証が必要です。
実行後「⌘+Enter(Mac)」でログが表示されます。
行数の部分をクリックすることでブレークポイントを設定できます。
ボタンを押すことでブレークポイントで停止してくれます。
2017/07/25現在ではブレークポイントで止まってくれるのは実行開始したファイル内だけのようです。
別のファイルのブレークポイントで止めたい場合は、メソッドから別のファイルのメソッドを呼び出しているところで一度止めてから、ステップインすることで呼び出し先の別ファイルのメソッドへ移動できます。
別のファイルに移動した後であればそのファイルのブレークポイントに止まってくれました。
他に何ができるかは以下を参考にどうぞ
Calendar Service | Apps Script | Google Developers
トリガーの設定
定期的に集計などをしたい場合、その都度再生ボタンを押すのは面倒です。
トリガーとは再生ボタンを押さなくても一定時間ごとに指定したメソッドを実行してくれます。
ボタンを押して、トリガーを設定してください。
トリガーを設定するウィンドウが表示されました。
最初は青文字のリンクを押すことでトリガーを追加できます。
実行の部分はメソッド名が入ります。ここではtestを選んでいます。
イベントには実行周期を登録します。
「特定の日時」「月タイマー」「週タイマー」「日タイマー」「時タイマー」「分タイマー」から選べます。
また、「新しいトリガーを追加」で新しいトリガーを追加できます。
時タイマーで設定して1時間ごとにはなりますが、0:16→1:15のように0分ぴったりでは無いので注意です。
ぴったりの時間に処理したい場合は以下のように毎分に設定し、NowMin(分)が0であることを確認すれば間違いないです。
これで毎時0分ぴったりに処理することになります。
var Nowymdhms = new Date(); var NowYear = Nowymdhms.getYear(); var NowMon = Nowymdhms.getMonth() + 1; var NowDay = Nowymdhms.getDate(); var NowHour = Nowymdhms.getHours(); var NowMin = Nowymdhms.getMinutes(); if (NowMin == 0) { }
【Unity】パズドラ風パズル作ってみた
はじめに
最近いろんなゲームをやりつつ、戦略系などが好きなんだなーと実感しました。
その中でも単純なんだけど考えるようなものは暇つぶしには最適で、それがパズルでした。
パズルと言ったらパズドラということもあり(1週間くらいしかやったことないが...)
作ってみることにしました。
完成した動作が以下です。
レイアウト等はまだまだですが一応パズルできる...という感じです。
これにコンボやスコアを設定すれば完璧、作り上簡単にカスタマイズできるはずです。
今日朝から作りはじめてここまでできた pic.twitter.com/RAbkk3kZkn
— ナノカさんのアカウント (@nanokanato) 2017年5月31日
実装内容
実装後に違うパズルに改造してしている途中なので確かこうだったなぁという復元になってますが、動かない場合はコメント等にておしらせください。
Line3Block
パズルのピースを用意します。
80x80のPrefabです。
階層構造はBlock(CreateEmpty:空のGameObject)に
BackGround(UI.Image)とIcon(UI.Image)を用意します。
Blockには以下のScriptを追加します。
主にピースの移動後の座標と種類を管理しています。
InspectorからBlockの色(BlockColors)とキャラアイコン(BlockCharas)を設定します。
BackGroundとIconにはBlockの下層に作った同じ名前のUI.Imageを設定します。
設定したBlockの色とキャラアイコンの数だけピースの種類が増えます。
Line3Puzzle
BlockのPrefabを生成したり、ピースが揃っているか確認する部分です。
階層構造はCanvas以下にBoard(CreateEmpty:空のGameObject)を配置しているだけです。
Canvasは640x1136で、Boardは560x760です。
Camera等の設定は省きます。
Canvasには以下のScriptを追加します。
Blockの生成と破棄、タップ操作の管理、ピースが揃ったかどうかの確認、アニメーションなどを行なっています。
InspectorのBoardにはCanvas下層のBoardを、BlockPrefabにはBlockを設定してください。
ビルド
あとはビルドすることでCanvas > BoardにBlockが生成され、操作待ちになります。
処理の手順は以下になります。
- ピースの生成 → 2
- 揃っているか確認
揃っていた場合 → 3
揃っていない場合 → 6 - 揃っていたピースを消す → 4
- ピースを下に詰める
空いている場所には上から新たなピースを落とす → 5 - 移動後に再確認 → 2
- 移動するピースの選択待ち → 7
- ピースを移動して入れ替える
指が離されたら移動を確定 → 2
まとめ
パズルって単純なゲームなのに内部では色々なロジックが動いており面白いです。
結構出尽くしている感もありますがぜひオリジナルのパズルを作ってみてください。
UnityのAssetBundleを簡単にしてみた
はじめに
AssetBundleを使用するときにAssetBundleを読み込んでローカルに保存、Spriteの取得というのが毎回実装していると手間なので以下のように呼び出せるようにしました。
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(進捗度)と通信結果を受け取ることができます。
staticのクラスなのでどこからでも呼び出すことができます。
MonoBehaviourを通信開始時に取得してCoroutineの処理をしているのでその部分のみ指定のMonoBehaviourに差し替えて使用することもできます。
現状、タイムアウトの処理がないので今後実装するかもしれません。
Unityでアプリ容量削減。700MB→179MB
こちらに移転しました。
www.bacu.jp
UnityのuGUIで縦書きテキスト表示
移動しました。
scrapbox.io
UnityAdsを実装してみた
移動しました。
scrapbox.io
Unity for MacでVisualStudioを使用する
UnityをWindowsでやっていた人が、Macでやり始めると思うこと?にMonoDevelopってなんだ?ってのがあるかと思い調べてみた。
MacだとVisualStudioではなくMonoDevelopなので使い勝手がいいほうのエディターに変えたいという人もいるだろう。
Visual Studioをインストール
まず、MacにはVisualStudioはない....(完)
だが、VisualStudioCodeというEditorがあるのでそちらを使うことにする。
サイトのトップよりダウンロードができるのでインストールする。
単品で使った場合、WindowsのVisualStadioとはレイアウトなどが違うが、使い勝手や機能は大体同じのようだ。
Unityと連携させるために...
Unityで普通にEditorを変更させようとしたがVisualStudioCodeが起動してそこからMonoDevelopが起動してしまう。
調べているとこんなものが…
VisualStadioCodeをUnityに追加するためのScriptらしい。
VSCode - Unity Visual Studio Code Integration
これをAssets以下に追加する
Editorを変更
UnityのツールバーからUnity > Preferencesを選択。
PreferencesのWindowが開く
VSCode.csを追加したのでVSCodeという欄が増えている
External Toolsを選択してEditor AttachingをCodeに変更
もしくはBrowse...からVisualStudioCodeを選択する。
これで連携が完了です。EditorがVisualStudioCodeになりました。
インテリセンス(自動補完)を利用する
VisualStudioCodeをEditorに設定し無事Scriptを編集できたのですが、MonoDevelopにはあるインテリセンスがなかったので設定する。
使い心地
Editorとしては最高だと思います。
- 拡張機能でインストールすることで多言語対応
- Windows,Mac,LinaxなどのOSで利用でき、OS間の操作感の違いを吸収
- Microsoftや利用者の更新頻度が高く、機能拡張が増えている。
- Methodやif,forなどで折りたたむことができる
- 左右でエディターの分割ができる。(コピペや他プロジェクトとの比較が楽)
- 上書き保存していないScriptに応じて左上にバッジ表示(自動保存もあり)
- インテリセンスは機能拡張から追加できるので独自のものも可能?
など...
しかし、Unityで使うには以下の点よりまだ早いようです。
- Projectに常にVSCode.csを追加しないといけない
- Debug時にBuild構成ファイルやタスクランナーの構成が必要
- ブレークポイントの設定がし辛い?
- Unityでの利用者が少ないので何か起こると困るしかない
それでも多くのOSと多言語に対応しているMicrosoftのフリーエディタですのでどこかのすごい人が解決していそうです。
解決策があればぜひ教えていただきたいです。
KudanARのUnity用SDKのサンプルを検証
移動しました。
scrapbox.io
SmartARのUnity用SDKのサンプルを検証
移動しました。
scrapbox.io