まいにち、いっぽ

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

PostProcessingの適用方法(初心者向け)

ページ概要

Unity 公式の PostProcessing の適用方法を簡易にまとめます。 大体は公式のドキュメントと変わらないので、初心者向けとなります。

PostProcessing とは何ぞや?

Unity 公式が作成している、ポストエフェクト(スクリーンエフェクト)を反映させるためのアセットの事。
公式サイト、git hub、unity package manager、と3種類のドキュメントがあります。
見た感じ Unity package manager のドキュメントが正確そうでした。

Unity 公式サイトのドキュメント
https://docs.unity3d.com/ja/2018.2/Manual/PostProcessing-Stack.html git hub のドキュメント
github.com Unity package manager のドキュメント
Description | Package Manager UI website

環境

  • Unity 2018.2.4f1
  • Post-processing 2.0.12-preview

インストール方法

  1. Unity のメニューから Window → Package Manager を選択
  2. All タブから Postprocessing をインストールするf:id:syuuki_kisaragi:20180914164514j:plain

使用方法

  1. シーン内の main camera に PostProcessLayer と PostProcessVolume コンポーネントを追加する
  2. PostProcessLayer の Layer を Default に設定する
    ※Default Layer を設定すると警告がでます。Default layer に設定すると処理負荷が高くなります。実際に製品に適用させる場合は、ポストエフェクトを適用させるレイヤーを分けて設定しましょう
  3. PostProcessVolume の Profile パラメータの New ボタンを押す
  4. PostProcessVolume の Is Global にチェックを付ける
    ※これでシーン全てに対してポストエフェクトを設定する事になる
  5. PostProcessVolume の Add effect... ボタンを押し、適用させたいポストエフェクトを追加する

おまけ

エフェクト効果についての覚書。 微妙にパッケージと公式ドキュメントに食い違いがあるようなので、バージョンによっては無い項目があるかもしれません。 詳細は公式サイトのドキュメントを見ましょう('ω')ノ

  • Ambient Occlusion(アンビエントオクルージョン)
    シーン内の環境光がオブジェクトなどで遮られているかを計算する。オブジェクトの折り目や穴が暗くなる
  • Auto Exposure(オートエクスポージャー
    カメラに搭載されている自動で露出を調整する機能のシミュレート
  • Bloom(ブルーム)
    現実の発光現象。光源の光が周囲に漏れたように見える
  • Chromatic Aberration(クロマティックアベレーション、色収差
    レンズのシミュレート用。光の屈折率の違いで色がズレてしまう現象
  • Color Grading(カラーグレーディング)
    完成した画像のカラーと輝度を変更修正する処理
  • Depth of Field(デプスフィールド、被写界深度
    カメラの焦点特性をシミュレートする
  • Grain(グレイン)
    写真のフィルムのようなグラデーションノイズを発生させる
  • Lens Distortion(レンズディストーション
    VRなどのレンズの歪みに対応させる処理
  • Motion Blur(モーションブラー)
    オブジェクトの移動が速い時に起きる、画像がボケる現象
  • Screen-space reflections(スクリーンスペースリフレクション)
    ディファードレンダリングのみ。塗れた床や水たまりのような反射のために使用する
  • Vignette(ビネット
    中心よりも周囲の方が暗くなっている

Unity の TestRunner の実行の手順(使ったことが無い人向け)

ページ概要

unity の TestRunner の実行の手順をまとめています。
対象は、テストを使ったことが無くテストを触ってみたい人向けです。

詳細を把握したい方は公式ドキュメントを参照しましょう('ω')ノ docs.unity3d.com

Unity バージョン

unity 2018.1.0f2

Unity の TestRunner の概要

  • テスト用の Attribute を付けた関数を実行する
  • EditorMode と PlayMode の2種類がある
    EditorMode = エディター上のみの同期テスト
    PlayMode = 専用シーンを作って実行する、非同期のテスト
  • EditorMode と PlayMode はセットアップの手順が少し違います

EditorMode のセットアップ手順

  1. Unity の空プロジェクトを作成する
  2. Project Window 上で Editor フォルダを作成する
  3. 上部メニューの Window -> TestRunner をクリックして、Test Runner Window を表示させる
  4. Test Runner Window の EditMode をクリックしてモードをエディター用のテストに切り替える
  5. Project Window 上で Editor フォルダを選択
  6. Test Runner Window の Create Test Assembly Folder ボタンをクリック
    Test 実行用のアセンブリファイルを生成する
  7. Project Window 上で Editor フォルダに C# Script ファイルを作成する
  8. Visual Studio 等でテスト用のコードを記入する(コードは説明の後に記述しています)
  9. Test Runner Window の Run All をクリックする 動作を確認したプロジェクトのスクショ f:id:syuuki_kisaragi:20180801182026j:plain

PlayMode のセットアップ手順

  1. Unity の空プロジェクトを作成する
  2. 上部メニューの Window -> TestRunner をクリックして、Test Runner Window を表示させる
  3. Test Runner Window の PlayMode をクリックしてモードをエディター用のテストに切り替える
  4. Test Runner Window の Create Test Assembly Folder ボタンをクリック
    Test 実行用のアセンブリファイルを生成する
  5. ProjectWindow 上の 右上のメニュー?から、Enable playmode tests for all assemblies を選択f:id:syuuki_kisaragi:20180801181940j:plain
  6. ProjectWindow 上で Tests フォルダの下に Scripts フォルダを作成する
  7. Project Window 上で Tests フォルダに C# Script ファイルを作成する
  8. Visual Studio 等でテスト用のコードを記入する(コードは説明の後に記述しています)
  9. Test Runner Window の Run All をクリックする

動作を確認したプロジェクトのスクショ f:id:syuuki_kisaragi:20180801183222j:plain

注意事項

PlayMode は Tests アセンブリーのあるフォルダ以下の Script が対象となります。
違うフォルダにScript を作ってテストコードを書いた場合、UnityEngine.TestTools が未定義になります。

使用したテスト用のコード

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.TestTools;
using NUnit.Framework;

/// <summary>
/// 動作確認用のクラス
/// </summary>
public class TestRunnerMain
{
    /// <summary>
    /// 関数のテスト
    /// </summary>
    [Test]
    public void EditModeTest()
    {
        // エラーにならないので、コンソールには何も表示されない
        UnityEngine.Assertions.Assert.AreEqual( 0, 0, "関数のテスト" );
        // コメントを外すとエラーがコンソールに出力される。
        //UnityEngine.Assertions.Assert.AreEqual( 0, 1, "関数のテスト。エラー" );
    }

    /// <summary>
    /// コルーチンのテスト
    /// </summary>
    /// <returns></returns>
    [UnityTest]
    public IEnumerator CoPlayModeTest()
    {
        UnityEngine.Assertions.Assert.AreEqual( 0, 0, "コルーチンのテスト" );
        //UnityEngine.Assertions.Assert.AreEqual( 0, 1, "コルーチンのテスト。エラー" );
        yield return null;
    }
}

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 も買って遊びたい。