ラベル Unity の投稿を表示しています。 すべての投稿を表示
ラベル Unity の投稿を表示しています。 すべての投稿を表示

2017年5月20日土曜日

Visual Studio 2017でPushCommand.ExecutePushCommand

週末なのでMicrosoft Visual Studio 2015を2017に更新することにしました。
保守案件がありそうな2008やそれ以前のを残して2012以降をばっさりと切り捨ててすっきりです。

同時にUnityも5.6にしたらAdMobが動かない。。。
開発環境を更新したのですから当然何かあるとは思っていましたが、まずUnity側で事案発生。まあ、所詮誰も遊んでくれないゲームアプリで利用しているだけなので更新することもないでしょうから当分こちらは放置です。

2017はこの段階では別段何事もなさそうだったので、早速Cities: SkylinesのMODを今度発売されたMass Transit DLC用に機能追加をしてテストして無事リリース。
早速早期対応ありがとう(意訳)なコメントをいただいて、照れくさくござる。

ここまでは順調だったのですが、テストを完了してローカルでコミットされていたソース群をオレオレサーバにpushしようとして開発環境移行時多発事案の発生であります。
リモート リポジトリへのブランチのプッシュ中にエラーが発生しました: Git failed with a fatal error.
fatal: unable to access 'https://xxx/yyy.git/': SSL certificate problem: self signed certificate in certificate chain
数年前から趣味で作ったソフト群はサーバ上に設置したgitbucketという大変スバラシイソフトウェア経由で管理しており、それへのアクセスはhttpsを経由して行っていたのですが、先日までの2015では特に叱られもしませんでした。
2017からちゃんと対応するようにしたのでしょうか、オレオレ証明書なんか知らねーよとおむずかりです。

これはまあ、言われた通りにすればいいので、オレオレ認証局の証明書をconfigに追加するか、そもそも証明書のチェックをさせないかのどちらかで対応可能です。
  1. オレオレ認証局の証明書をconfigに追加する場合
    証明書はderじゃだめでpemじゃないとダメな様子です。
    https://oreoreというサーバを証明するca_oreore.derという証明書があったとして、opensslでder形式からpem形式に変換するには以下の構文になります。
    openssl x509 -in ca_oreore.der -inform DER -out ca_oreore.pem -outform PEM
    ここでできたca_oreore.pemを .git/config に、以下を追記してあげます。

    [http "https://oreore/"]
    sslCAInfo = X:/path/to/ca_oreore.pem


    お気づきかと思いますが、ドライブレターがついています。
    ついていないと、標準インストールの場合、
    C:\Program Files (x86)\Microsoft Visual Studio\2017\[エディション名\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer\Git\mingw32
    という気が遠くなるような深いパスがrootとなってしまいます。
    素敵な仕様ですネ。
    また、バックスラッシュ(\)ではなくスラッシュで記述したほうがよろしいかと思います。また、"https://oreore/"を省いてもいいのですが、それだとサーバ毎に証明書を設定することはできません。
  2. 証明書をガン無視させたい場合
    .git/configに下記の行を追記します。
    [http]
    sslVerify = false
まあ、ここまでは良かったんですが、いざpushしようとするとさらにおむずかりのようで、コンソールに書きのメッセージがお出ましになられました。
リモート リポジトリへのブランチのプッシュ中にエラーが発生しました: Git failed with a fatal error.
    PushCommand.ExecutePushCommand
こっちは先ほどと違って、何を言ってるのかわかりません。
今現在、記事にしている最中ですが現時点でもさっぱり訳が分かっていません。

PushCommand.ExecutePushCommandで検索すると、2017添付のgitを最新版に更新したら直っただとかopenssl系のdllが混在していただとかいろいろ記事はあるのですが、それらすべてを試しても何の解決にもなりません。

加えてサーバ側のgitリポジトリのアクセス許可や実行ユーザを再度確認したりVisual Studioを再インストールしたり、修復したり、などと試していて、これだけで土曜がつぶれてしまいました。

さらに直接gitコマンドでpushを試みたところ、さらにわけのわからないエラーが。
リモート側に存在しないpackファイルをunpackしようとして存在しない(ないんだからないわな)からって大激怒してるんです、keepだけ残して。
もう本気で意味不明でごわります。

リモートリポジトリからcloneしなおして、再度commit, pushを行っても同様の結果ですし、サーバ側のgitのバージョンは1.8、PC側が2.13ということで、バージョンの違いではないかと考えてサーバ側からpcをmountしてpushしても同様に怒られるし、ほとほと困じ果てました。
ふとコミットを一度取り消し、コミットメッセージを変更してコミットしてpushしたら。。。通りました。

いったいなんなんだ!!
それがしも大激怒です。

テスト用リポジトリを作成し、通らなかったときとまったく同じコミットメッセージをつけてコミットすると、今度は何事もなく通るじゃありませんか。
ますます意味不明です。

git fsckしても問題ないし、cloneはできるし、何がどうなってるのかさっぱりわかりません。

とても恥ずかしいことをしている気がするので、ここにご報告する次第です。

2017年3月10日金曜日

Google AdMob, AdSenseの導入

このような場末のマニアックなブログにまで来てくださる方たちですからadblockの導入率が高いと思いますが、実は先日、AdSenseを導入いたしました。
私自身も自宅内サーバのdnsmasqでふつーに広告URLをdropしていますのでPCでもタブレットでもスマホでも広告は見えません。(まあ、自分自身でうっかりクリックすると契約違反になるそうですのでむしろ自衛となるわけだからいいよね)

なぜ今頃こんなことを言い出したかというと、AdSenseを導入できなくて阿鼻叫喚している人が多いということを知って驚いたからです。

事前に申し上げておきますが、広告掲載開始の知らせを受けて一か月程度ですが、
¥100円
にもなってないサイトの記事ですので、そこのところはご承知おきください。

以下、すごく長い余談です。
まず、いきなり話が飛ぶようですが導入の動機はUnityです。

そもそも、Cities: SkylinesというゲームのMODを作っていて、そのCities: SkylinesはUnityがベースになっているのですが、私はまったくUnityというものを知らないながら(そしてC#にも不慣れながら)調子に乗っていくつかMODをリリースしてみたものの、そもそもUnityってなんなのよ、どういうものなのさ、と気になっていました。

で、あるパズルゲームのアイディアが浮かんだので、Unityってゲームエンジンなんだから作れないかな?と、これをUnityで実装してみようと思い立ったのがきっかけでした。
調べてみると、なんとWindows, Linux, Android, iOS, なんでもかんでも一つのコードで動かせるというじゃあありませんか。びっくりしました。
さらに個人利用は無料だっちゅうので、こりゃあいい、一つ勉強してやるべえ、と実際に作り始めてみますと、最初は独特の概念などがあって面食らったものの、Cities: SkylinesのMOD作りで見よう見まねで苦労してきた甲斐があってかほんの数日で作りたいとおもっていた以上のものができてしまいました(もともと大したものではないのですが)。
もちろん、こんなことが可能だったのはUnityだけでなく、ゲーム用の楽曲や画像などの素材を提供してくれる各サイトの皆さんのおかげということはこの場を借りて感謝を申し上げたいと思います。

で、実際にAndroidの実機がいくつかあり、実際にテストプレイをしてみると、本当にコードを書き換える必要もなく古い機種でも割合快適にプレイできるapkをUnityが吐いてくれているのに気をよくしてしまい、(かなり)過去にAndroid用アプリを公開しているためデベロッパーID取得費用の$25も支払い済みですので、個人的には結構満足な出来だったので最適化をしたうえでAndroid用のゲームとして公開してみようと思い立ちました。

そこで、さらに一工夫してみたいと思いました。広告です。
今時のアプリは何でもかんでも広告がついてます。

これまでの経験からAndroid用アプリは余程経費をかけないとダウンロード数が伸びないことはわかっているので、今回もほぼ誰も遊んでくれるどころかGoogle Playで誰にも見つけてもらえないところに落ち着くことは目に見えていますし、そもそもこれまで個人的な活動で作ってきたプログラムは数多くフリーウェアとして公開してきましたが(MS-DOS用常駐プログラムすらVectorさんでいまだにおいていただいていてたりします)、AndroidやiOSの世界は独特です。過当競争どころの騒ぎではありません。
まーどうせ誰にも見てもらえないなら技術的に面白そうだというだけでやってみてもいいだろうということで広告を入れるには何がいいかな、と調べると、GoogleがやってるAdMobというのがあることを知りました。

そこで、どうせAndroidだからGoogleさんのサービスがいいやねと思い、AdMobを導入するにはどうすればいいか、と調べてみると申し込みが必要で、それは当たり前ですが、これとAdSenseがなんか連携しているということでした。で、このAdSense、どっかで見たなー、と思ったら、このブログで何年か前だったか、割と読んでいただいた記事があって、その時にAdSenseに申し込んでくれたらうれしいなー、みたいなことをログイン時に言われてたのを思い出しました。
まあ、そんなことはほんの一瞬だけでしたので、たぶん勧誘する対象を誤判定したんでしょう。

話が回りくどくて恐縮ですが、これでAdSenseに申し込んだ理由にやっと戻ってこれました。AdMobに申し込むとAdSenseとAdWordsのアカウントを同時に取得させられるとのことでしたので、折角の機会ですしAdSenseのほうも申し込んでしまえ、という次第です。
AdWordsのほうは、これはむしろGoogleさんに広告をお願いするアカウントのようなので、そんなこたあまずないだろうと思います。

で、間借りしているこのBloggerさんだと、ボタン一発で申し込みができるようになっていましたので、さっそくそのボタンを押して見ました。すると、AdMobと違ってAdSenseのほうは広告出稿に当たりサイトの審査があるんだそうで、時間がかかるから待てと。

あらあら、思わぬ手間がかかるのね、と思いましたが、じゃあ折角もらった時間だし、ゲームのブラッシュアップでもしてみようかとおもっていると、翌日だか翌々日だかには偉そうに「おめでとうございます!広告が掲載されました!」とかメールをよこす始末です。
広告媒体が広がるんだから広告主のほうがおめでてーんじゃないの普通?と思いつつ、まあ、これで中断していたAdMobのほうも手続きを進めて、ゲームをリリースしましました。

ちょっとAdMobのほうに飛びますが、AdMobのほうは審査も一切なし、Unity用ライブラリもしっかり整っていてあっさりテスト用広告表示もできて、拍子抜けするほどでした。なるほど、ここまで簡単なら猫も杓子もアプリに搭載しますわね。
こちらは$25も払ってフリーウェアを配布しているのにわけのわからないいちゃもんつけてくるやつ、もとい、ユーザ様(なんで急に卑屈になってんだ!)とかいますが、自分自身が世界の中心においでの方が山ほどいるのですからまあ、中心がどれだけあるのかわからないのがこの世の中ですのでせめて広告代でも・・・と思ったら甘いんですよねえ。
なんせ誰にも使ってもらえないのですから広告代だって入らない。来るのはいちゃもんばかり。なーんだいつもの通りじゃん、てな具合。
無料なんだから使うほうも自己責任で使えや、作ってる方は誠心誠意作ってんだからよー、といっても通じませんわねこのご時世。

ま、やっと本題に戻りますが、AdSenseの話を書く気になったのは、冒頭でも触れましたが、審査に通らないとか通すためには云々という話が多いという話を聞いたからでした。

私自身は上述の通り、ボタンを押したっきり、何もしていません。ですので余計びっくりしました。
申請期間中の記事の更新もなし、記事数も少なく、一日のページビューなど口に出すだに烏滸がましいこのブログです。100そこそこです。

審査が通らないと話を聞かされてから試しに検索してみると、確かにそういう記事がどっさり出てきます。
中には涙ぐましく申請前にダミーサイトを作るだのサイト利用約款を作るだの(これはプライバシーポリシーという形で私も最近ページを作りました。確かにGoogleに追跡されてるよ!という警告を表示するのは賛成でしたので)なんだか偉そうに「審査合格」を指南しているサイトも多々見受けられ、ほとほと考え込まされました。

一応申し添えますが、審査合格指南者の言っていることはすべてこのブログには当てはまりません。だから、審査に通りたいなら彼らの言うことを聞いても無駄でしょう。なぜなら、ここに実例があるから。

確かに、出稿主がなんでこんなブログに出稿したいかと考えたかはわかりません。そして、出稿主の期待もむなしくページビューもなく実際に支払われる額も\100円未満。そんなサイトでも何もしなくても彼らの言うところの審査に通りました。

ま、出稿先としてまるで魅力がないことは明白なのであっさり広告出稿停止なんてことになりそうですが、審査に通らないということでお悩みな方には何かこのブログにヒントがあるのかもしれませんよ。

そうそう、AdMobのほうですが、こちらはなんと
¥0円
です。だって自分で検索してもGoogle Playで見つかんないんだもんなあ。当たり前ですよねえ。それに私が作ったゲームにも魅力がないってことです。残念ですが、まーそんなもんかなあ、くらいの気持ちで次に行きましょう。自分でもやってないし(アイディアを形にするのが好きなので形になってしまった後は・・・まぁお察しください)
そもそも、自分が作ってるものなのに自身のブログで宣伝もせず、むしろこのブログで公開しているプログラムがらみというと、主に自分が利益を得ない洋ゲー日本語化用スクリプトとかが主ですからねぇ。
見る人が見ればバカに見えることこの上ありますまいなあ。

本当にお恥ずかしい話ですが、当ブログは恥を記録してまいるのが主眼ですので、AdSenseやAdMobネタを提供してくださったGoogleさんに、今回もいいネタをいただいた気がしております。

ご清聴ありがとうございました。

2017年2月20日月曜日

unityでのGoogleMobileAdsパッケージインポート時のエラー

恥の記録です。

以下、Google Mobile Ads Unity Plugin v3.2.0の場合です。

unityでandroid向けにAdMobを仕込もうとしてこちらからGoogleMobileAds.unitypackageをインポートしたときに
Unable to find the Android SDK manager tool.  Required Android packages (extra-google-m2repository, extra-android-m2repository) can not be installed.  Android SDK path not set.  Set the Android SDK property using the Unity "Edit > Preferences > External Tools" menu option on Windows or the "Unity > Preferences > External Tools" menu option on OSX. Alternatively, set the ANDROID_HOME environment variable
とか説教される場合があります。
エラーメッセージではSDKが見つからないだのパスを正しく指定しろだの環境変数を設定しろなどなんだかんだと仰せになっておいでですが、全部大嘘ですのでご注意ください。

実際には(unityではなく)Adndroid SDKのGoogle Play Servicesパッケージがインストールされていないと怒られるわけですが、さらにGoogle Play Servicesには2つのリポジトリパッケージがインストールされていなければなりません。
つまるところ、SDK ManagerでExtras から以下の三つをインストールすることで解決します。

  • Android Support Repository
  • Google Play services
  • Google Repository

実は公式(英語版)のページにはAndroid Support Repositoryを入れろという記載はないのですが、実際には必要です。
まあ、そもそも日本語版の同ページにはパッケージのインストール元の記述すらありませんが・・・。

わかった後でエラーメッセージを見返してみると、extra-google-m2repositoryとextra-android-m2repositoryが見つからないよ、と仰せなので、まあこれがそれぞれのリポジトリのパッケージなんだろうなと。

まあ、こんな程度で躓いているような情けないありさまです。