まいにち、いっぽ

物事を理解するための出力装置

Oculus GO にUnityでビルドしたアプリをインストールしてみた

概要

Oculus GO 向けに Unity でビルドしたアプリをインストールさせる手順をまとめます。
Unity を使った事はあり、 Android のビルドをした事がない人向けです。
手順が多くて忘れないように纏めました('ω')

環境

  • Unity 2018.1.0f2

1.通常のセットアップを行う

  • iOS, Android の「Oculus」をインストールする
  • 通常のセットアップはアプリの指示に従って設定を行えばOK
  • 初めて電源ボタンを長押しする際、ランプが点灯するまで押し続ける事

2.開発者オプションを有効にする

  • Oculus開発者ダッシュボードで組織設定を行う
  • モバイルアプリから開発者モードを ON にする
    • モバイルデバイスでOculusアプリを開きます。
    • 設定メニューで、開発に使用しているOculus Goヘッドセットを選択します。
    • その他の設定を選択します。
    • 開発者モードをオンに切り替えます。

※本来は以下の手順で良いはずですが、Oculus GO を ADB が認識しない問題が出ました。
環境による問題だと思いますが、この記事ではインストールせずに進めます。 developer.oculus.com

目玉Pさんの作成された資料を読み対応でき、本当にありがとうございます('ω')

3.Unityをインストール

  • Unity hub からインストールする
  • 多くの Unity バージョンで動作するそうです

4.Unity の Android ビルドの環境を整える

基本は公式のマニュアル道理です。 docs.unity3d.com

  • Java Development Kit をインストール
  • Android Studo をインストール
  • SDK Manager から以下のインストールを行う。
    f:id:syuuki_kisaragi:20180506092804p:plain f:id:syuuki_kisaragi:20180506092814p:plain 画像には収まらなかったが、 SDK Tools の Android SDK Build-Tools 28-rc1 は 「25.0.0」「25.0.1」「27.0.3」をインストールしている。
    Android OS は 5.0 以降なら問題ないと思われます。細かく追っていないので、不要なインストール物があると思います

  • Unity プロジェクトを適当に作る(ビルドをテストするだけ)

  • Preferences の External Tools の SDK, JDK のパスを設定する
     以下は私の例です。JDK バージョンは使用したバージョンに合わせてください。
     Android : C:\Users(ユーザー名)\AppData\Local\Android\Sdk
     JDK : C:/Program Files/Java/jdk1.8.0_151
  • ビルドをしてみる

android の tool バージョンによってビルドが出来ない事があります。

Unable to list target platforms. Please make sure the android sdk path is correct. See the Console for more details. See the Console for details.

と出たら以下を参照して tool を旧バージョンに戻してください。tools フォルダは絶対に上書きしない事。 blog.naichilab.com

5.SAMSUNGAndroid USB Driver for Windows をインストール

以下からファイルをダウンロードしてインストールする。 Android USB Driver for Windows | SAMSUNG Developers

6.PC と Oculus GO を同梱ケーブルでつなぐ

  • 繋いだ際、Oculus GO 側に接続の確認ウィンドウが出るので許諾する

7.デバイスが繋がっている事を確認する

命令の内容は以下を参照。
https://developer.oculus.com/documentation/mobilesdk/latest/concepts/mobile-adb/#mobile-android-debug-intro

8.Unity から Oculus GO にアプリを書き出す

  • build setting を以下のように設定して「Build & Run」を行う f:id:syuuki_kisaragi:20180506095638p:plain f:id:syuuki_kisaragi:20180506095647p:plain

最後に

これで終了です。時間が経つにつれて楽になっていくと思います。
お疲れさまでした(^ω^)ノ

タワーディフェンステンプレートを改造してみた

概要

www.asset-sale.net

イベントという事なので、解析したかったアセットを解析&お題の「3」に合わせて3点改造してみました。元の状態と比べて、Waveの最後まで楽しく見ていられるくらいになっています。 公式で解説されていない部分を書き換えているので、アセットをダウンロードしてチラ見しては如何でしょうか(^ω^)ノ

assetstore.unity.com

以下が改造点です。

  • 改造1.テキストの日本語化
  • 改造2.攻撃した感を出す
  • 改善3.マウス+キーボード操作を私にとってやりやすくする

アセットを解析する際のアドバイス

  • 気になる挙動に注目して調べる事。調べていて気になった単語、処理は別途まとめる事で脱線を防ごう。
  • 公式ドキュメントを一通り読んでおくことで、どういう機能があるかを前もって把握出来る。
  • 全部を詳細まで理解するよりも、1つのコンポーネントが受け持っている内容を理解していく方が解析スピードが上がる。
  • 作り方の違いからデータの管理方法、UIの挙動、Prefab の構造は違う物と考えておく。「いつもの」は存在しない。
  • この作り方が絶対ではないはずなので、良い点悪い点を考える必要がある。

改造1.テキストの日本語化

タワーの情報をパッと見たときに分かり辛く感じてしまったので、日本語化を行った。
書き換えたファイル達は以下の通り。

  • Assets\Data\Levels にレベル別の詳細テキスト
  • Assets\Data\Tower にタワー情報
  • Assets\Prefabs\Towers の各タワーのプレハブの Tower コンポーネントのタワー名
  • Assets\Scenes の各シーンの UI の英語(個別に書くのは辛い…)

テキストを変えた事でレイアウトが狂うので、サイズ調整が必要でした。 こんな感じです。 f:id:syuuki_kisaragi:20180422134538p:plain f:id:syuuki_kisaragi:20180422134602p:plain

改造2.攻撃した感を出す

改造した動機

  • 攻撃した感が薄く、何が起きたのか分かり辛く感じた
  • scene 上では色々と動いているように見えるが、画面上に反映されていないように見えていた
  • 各パラメータを見る限りでは異常を感じる物が見つからず、不思議に感じていた

結果

  • 「Directional Light」の intensity を 1 に変更し、各レベルのライトマップをベイクしなおす
  • 攻撃エフェクト、ヒットエフェクトが見えるようになり楽しく見えるようになった
  • 最初はダメージ数値を表示しようと思ったが、エフェクト達が見える事で十分に楽しくなったw

エフェクトが見えやすくなりました(^ω^) f:id:syuuki_kisaragi:20180422135311p:plain

改善3.マウス+キーボード操作を私にとってやりやすくする

操作し辛いと感じた部分

  • マウスポインタを画面端に移動させるとカメラが移動する為、ポーズボタンなどを押すとカメラが移動する
  • マウスの右ボタンを押しながらドラッグでカメラが移動するが、カメラの移動方法が逆に感じる(windows ユーザーだからとか?)
  • マウス左ドラッグでカメラを動かしたいと感じた
  • 配置するコストの表示を見落としがち

コードの解析

  • level 1 の Scene の GameCamera オブジェクトの TowerDefenseKeyboardMouseInput コンポーネントで処理を行っている様なのでコード確認
  • 継承元の KeyboardMouseInput の DoScreenEdgePan()と DoRightMouseDragPan() が該当部分だった

画面端ではカメラが動かないようにする

  • 画面端の処理を無効化するためのプロパティを追加
  • DoScreenEdgePan() に判定処理を追加して無効化!

ドラッグ方向を逆にする

  • 反転させるためのプロパティを追加
  • DoRightMouseDragPan() で panVector を求めた後にプロパティに応じて反転させる

マウスの左クリックでドラッグさせる

  • DoRightMouseDragPan() の mouseInfo.mouseButtonId で ID を指定して判断を行っているのでコメントアウト
  • ID の判定が無くなり、左右どちらのボタンでもドラッグが可能になる
  • 関数名から「Right」を削除して完了

コスト表示を分かり易い位置に移動させる

  • UI を動かして、サイズ調整
  • UIによって基準となる位置が違ったりするので、不思議な挙動が見られた。極力基準は揃えた方が分かり易そう

最後、解析をした感想

  • 結果として全体の雰囲気はつかめてきたが、思ったより内部が複雑なので新規拡張には時間がかかりそう。
  • チュートリアルに書いてある事以上に色々な技術が詰まっており、非常に有用なコンポーネントがあった
  • 普段はタワー情報などは1ファイルにまとめて管理していたため、タワー名とタワーの詳細が別のファイルにあり動作を追い辛かった
  • Key 操作はかなり分かり易い状態。InputController でイベント発行、処理は TowerDefenseKeyboardMouseInput。Key のクラスが少し継承数が多いかな?
  • 公開しようと web gl で書き出してみたら、シーン切り替えで止まる。4時間くらい動作検証をして、すぐに解決できなさそうなのでステージ1のみに切り替えた(´・ω・`)
  • unity room にサンプルと見た目が変わらない物を置くのはどうなの?、と悩んだので公開はしませんでした。
  • 実は大体1日で終わろうと考えていたが、合計で3日くらいかかりました(^o^)

公開しなかった実行ファイル

2018/05/11 頃までアップしています。ソースコードも公開しようか迷ったのですが、何か権利に引っかかると面倒だと思いましたので諦めました、すみません(´・ω・`) bin.zip - Google ドライブ

Civilization 5 をプレイしてみて

概要

1ヵ月くらいプレイし続けたので、得た情報を文書化する目的。 ただの感想です。

プレイ実績

  • 初の Civilization。 5 なのはセールで買ったから。
  • 前半2週間はバニラ
  • 後半2週間はDLC全部導入。UIのMODも少し追加。
  • 難易度は皇帝までは何とかクリア

前半のバニラプレイ

  • 始めるまでにパラメータを設定する必要があり、導入までが重い。チュートリアルはスキップ可能で自動でMAPを用意してくれた方が良い
  • 各内容の help が画面右上に出てくるが、正直情報が多すぎてプレイの邪魔&意味が伝わらない物が多い
  • そして勝利条件が分からない。勝利条件が分からないので、結局何をしていけばいいのか方針を決めれず、初回プレイで離脱するユーザーが結構いるのではないだろうか?
  • wiki を見ても分からず、ゆっくり動画を見る → プレイ → 動画を見る というループに入った
  • ロケット勝ち、文化力勝ちは、制覇は分かり易かった。難易度の問題はあるが、ロケット勝ちが楽過ぎたように思う
  • ケシクの壊れっぷりも理解できた。ユニークなユニットも旬があるので個性があってよかった
  • モンテスマやアレクサンドロスなど指導者の個性やAIの違いは感じられて良かったが、都市をねじ込んで来て非難を飛ばすのはどうなのだろうか?
  • 地形改善も大事だが、市民の配置が大事な事を動画で気づく。意味を理解し辛い。表現方法はない物か

後半のDLCプレイ

  • バニラとルールが違う印象
  • テクノロジーツリーに手が入っているので正直別ゲーム
  • 宗教や観光力など複雑性が増している
  • 勝利条件が分かり辛いのはバニラから変わらず
  • 指導者の数が増えた事により、AIの状況が大きく変わるようになったので、指導者によるゲームの変化を感じやすかった
  • クラッシュ多い。DirectX10 は良いが windows8 対応版?だと頻繁にクラッシュする。相性だろうか?
  • ユニットを選択しているのにメニューが操作出来ないなど、細かい不具合も多い。1プレイ4時間くらいだが、毎プレイにつき10回程度は問題が出ているように思う
  • 敵のターンが長い、、、移動アニメーションをOFFにしても長い
  • Mod で資源をアイコン表示できるようにしたら凄いプレイが快適になった。特に遺跡を探すのが超手間だったので良い感じ。なぜ標準機能じゃないのか首を傾げる程。

改善案?

あくまで私個人が思った部分でしかありません。手を入れると個性が消える可能性すらあるので難しいですよね。考える程UIや不具合が気になってくる印象がありました。マイナスイメージに引っ張られてプラス方面が少ないかも。

  • 時代の流れがあるので、途中結果画面が欲しい。初期目標と途中結果である程度方向性を与えたい。Wave1 生存競争 みたいな区切り。
  • ダメージ予測を平均ではなく平均より下で表示する。倒せると思ったらミリ残しする事があり、見間違いかと最初は思ったが倒せるようにしか見えない時でも残る事がある。体感的にデメリット部分が多いので6~10のような数値化するかランダム量を減らす、クリティカルみたいな形で差別化する、という所だろうか
  • 外交関係図が欲しい。MOD でサポートできるとは言え、誰が誰をどう思っているかを可視化出来ないのは辛い。オプションに非常に欲しい項目。ゲーム的すぎるのだろうか。
  • プレイ目標、勝利条件などをもう少し可視化して欲しい。初心者には分かり面過ぎる。
  • プレイ時間が長いので、操作を快適にしたい。特にキーボード操作をカスタムしたい
  • XCOM2 の時もそうだが不具合が非常に多い。不具合を全て取れるはずもない物量だと思うので、何とかできない物か

最後に

読んでいただき、ありがとうございます。 飽きるまでプレイし続けてまとめる所存です。

1週間ゲームジャム お題「当てる」に参加しました

概要

Unity Room の1週間ゲームジャム お題「当てる」に参加しました。 https://unityroom.com/unity1weeks/8

ゲームの説明

1日くらいでクイズを作りました。 アセットの Arbor2 と dialogue system を使用しています。 時事ネタ クイズ | 無料ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう

作成目的

  • 約 1 カ月ほど Unity を使っていなかったので、リハビリをする。
  • dialogue system の理解を深める。

結果

  • 見た目が残念。
  • 使った時間が少なかった結果、シンプルになった。
  • アレコレ迷う余裕がなかったので、ある意味気楽に作成できた。
  • 過去のプロジェクトの資産を有効に使えた。
  • Arbor2 の良さを再認識。別項目に良さをまとめる。
  • dialogue system の良さも認識。これも別項目。
  • 数人でもプレイしてくれた人がいて嬉しい。0かもしれないと思っていた。
  • 次につなげていきたい。

Arbor2

https://www.assetstore.unity3d.com/#!/content/47081?aid=1011l3pq4

  • ゲームの遷移を作成するアセット
  • 演出部分を使う場合 timeline を機能が被る事があるが、今回は意図して timeline を使わないようにした。
  • 遷移が見て分かり易いので、忘れてしまった過去プロジェクトでも復帰が容易。
  • 遷移していく状態が見えるので、不具合が発生したときに状況の把握が楽。
  • 今回は殆どの処理を Arbor と dialogue で管理できたので、全体が見やすい状態に保てた。
  • 今後も使う予定。

実際に使用したステート。 f:id:syuuki_kisaragi:20180225224356p:plain

dialogue system

https://www.assetstore.unity3d.com/#!/content/11672?aid=1011l3pq4

  • テキストの再生、データ構築を行えるアセット
  • 誰かと会話するタイプのデータが作りやすい。
  • 状況に合わせた会話をし、フラグ分岐が細かくなる物だと特に有用だと思われる。
  • SE の再生を dialogue で処理したが、自作のクラスを呼び出す事も可能。
  • Lua でセーブデータを管理しており、Unity 上でセーブデータが見えづらいのが難点。
  • Lua を理解している人には拡張性が高く感じると思われる。
  • 今後も使う予定。 f:id:syuuki_kisaragi:20180225224401p:plain

XCOM2をプレイ中

プレイの仕方、環境について

  • Steam版をプレイ
  • 操作はマウス+キーボード
  • フルスクリーン
  • 難易度は「イージー」
  • 久しぶりに2周目をプレイしている。難易度ノーマルにしたら、ユニットが死にまくって困るw

システムについて

  • ターン制のSRPG
  • HPが0になるとユニットが死亡する
  • HPが減ると怪我を負う
  • 怪我が回復するまでに日数がかかる
  • ユニットの種類は、遊撃兵、狙撃兵、技術兵、グレネード兵、サイキック兵
  • ユニットの差は相当感じる
  • 研究でエイリアン達の技術を解析していく
  • 開発で解析した技術を武器や装備にしていく

総評

  • シミュレーション系で久しぶりに面白いと感じた
  • 上手く立ち回って敵を倒したときの快感は良い
  • 理不尽な状況も良く起きるので、絶望する事も多い
  • コアなゲーム層にはお勧めできる
  • 気楽にゲームをしたい、楽に楽しみたい人にはお勧めできない

良かった点

  • 移動アニメーション中に tab キーを押すと次のユニットに切り替わる。これが相当ストレス軽減になった。
  • 気を付けていてもユニットがどんどん怪我をするので、2軍3軍の需要が高い
  • ユニットがあっさり死ぬ(難易度が一番低いイージーなのに)ので、続けるかどうか凄く悩む
  • 蛇の引き寄せ、毒攻撃がウザい。スタンランサーもウザい。
  • 状態異常系が回復出来ない+キツイのが多い
  • 敵が攻撃出来ないように立ち回る事が前提になっているので、どう攻撃するか非常に考える
  • グレネードが便利だけれど回数制限があって悩む
  • 位置関係+方向+高さ+武器やスキルの補正で命中率が変化するが、命中率が結構低い(考えて動かないと 30~50%、考えて 80~80%くらい)
  • システムを理解してきたら、戦闘が楽しくなる

気になった点

  • 1週クリアするまでにゲームのシステムを理解しきれなかった。wiki を見てみたら知らない事だらけ。
  • 後半になると、ミッション内容が同じ過ぎて飽きる
  • 操作ミスで移動する → 警戒範囲に入ってしま → 潜伏が解ける → 敵兵に囲まれる → 敵のグレネードで被害甚大\(^o^)/
  • 模倣ビーコンが強すぎる。1個あれば3体くらいの敵の攻撃を対処できる。敵は3体を1チームとして動いているので、大概の問題はビーコン1個で事足りる。1ステージに大体3~5チームの敵がいるので、2個あればかなり安定する。模倣ビーコンがないと辛過ぎる場面も多い。
  • 頑張っても対処できない問題(90%の攻撃が2回外れるとか)が起きたとき、絶望感も凄い

備考

DLCを買っていない状態なので、DLC も買って遊びたい。

スマホアプリのサーバーサイド構築 その2 セットアップ

終了地点

  • flask が動いている事が分かる

 ※静的ファイルは flask じゃなくて nginx で行うのが負荷的に良いらしい。
  nginx には何時辿り着けるのだろうか?

環境

  • windows10

flask のインストールからサーバーが動く所まで

  1. python をインストールする。3.x.x を使いました。
    www.python.org
  2. 環境変数を設定してパスを通す。以下は私のPCのパス
    python 自体のパス設定
    C:\Users(ユーザー名)\AppData\Local\Programs\Python\Python36-32
    pip を使うためのパス設定
    C:\Users(ユーザー名)\AppData\Local\Programs\Python\Python36-32\Scripts
  3. PCの再起動
  4. コマンドプロンプトで flask をインストール
    pip install flask
  5. サンプルの hello.py ファイルを作成する。
    pythonソースコードなので、新規テキストを作成して拡張子を変えてしまってOK。
  6. hello.py にサンプルコードを書く。以下が中身。
    http://flask.pocoo.org/
    from flask import Flask
    app = Flask(name)  <- ブログだとアンダーバー2本が太文字になってしまう。公式サイトのサンプルを見てください。
    @app.route('/')
    def hello():
      return "Hello World!"
  7. コマンドプロンプトで hello.py を保存したフォルダまで移動する
  8. コマンドプロンプトで実行するファイルを設定する(以下の命令を実行)
    set FLASK_APP=hello.py
  9. コマンドプロンプトで flask を動かす
    flask run
    
  10. ウェブブラウザで http://localhost:5000/ にアクセスして動く事を確認

備考

自分自身で設定している時は、いっっっっっっっぱいミスをしたりインストールしたりしたので、
何かインストール漏れがある可能性もあります。

日頃対応してくれているサーバーエンジニアさんには敬意を払うと共に感謝します。

スマホアプリのサーバーサイド構築 その1 知識をつける

概要

python の flask を使ったサーバーを作る為の内容をまとめます。 私は今までサーバーサイドを作った事がなく、完全なド素人が何とか進むための物です。 間違っている個所があれば教えて頂けると非常に助かります。

※このページだけでは構築は終了しません。覚えた物をまとめてきますので、記事が続いていきます。

実装したい内容

  • ゲームのリソースのダウンロード(必須)
  • 各ユーザーのログイン時間を把握して、ログインボーナスを渡す

疑問 flask ってなに?

python を使った web アプリケーションを作るためのマイクロフレームワークらしいです。 Welcome | Flask (A Python Microframework)

以前 python を触った事があり flask の本が売っているのを見かけた為、何とかなるんじゃないかと思って選択しました。 最終的に flask を使うかは別として、まずは flask を使っています。

疑問 web サーバーとかweb アプリケーション って何が違うの?

  • 役割(機能)の違い、らしい
  • 使う言語やフレームワークによって長所と短所があり、いい感じに使うために役割を分けているようだ
  • web サーバー、webアプリケーション、データベースに分かれている

web サーバー?

  • ブラウザなどから最初にアクセスされるサーバー
  • アクセスする内容によって、web アプリケーションに処理リクエストを送ったりする
  • apache, nginx が該当するらしい
  • nginx を今後調べていく予定
  • ロードバランサ機能はココで実装(設定?)していくみたい

web アプリケーション?

  • phppython などを使って、リクエスト内容に合わせて処理を行って返す所
  • 今回使用する flask が該当するらしい

データベース?

  • 名前道理、ユーザーのデータやアプリケーションが保持するデータなどの事、らしい
  • My SQL, SQlite とかの事らしい(名前しか知らない...)

疑問 何て単語で検索すれば思った機能が見つかるのか?

言語やフレームワーク名+機能の名前で検索していくのが良さそうです。 実際に使った検索ワードは以下の通りです。 - python + インストール - pip + 設定 (pip install flask が出来なくて調べていた) - Flask + 静的ファイル

知りたいフレームワークを絞る事で狙った情報を探しやすくなると思います。 まずは公式HPの クイックスタートを読んでみて、使えそうな物を片っ端から調べるのが速いです。

次の予定

  • 環境設定をまとめる予定です。
  • 素人には環境を作る事も凄い難しいと感じるのです...