まいにち、いっぽ

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

Timeline を調べた際に参考にさせて頂いたサイトまとめ

注意事項

  • 書籍による纏まった情報を得辛いです。現在は各ブログ様にお世話になっている状態です。
  • 調べている際、1年以上経過している情報は概要は正しくても詳細にズレが発生している事があります。
  • 開発する際はドキュメントや定義されたクラスを見ながら考えていく事が重要だと思います。

参考にさせて頂いたサイトまとめ

Timeline の概要を理解する www.crossroad-tech.com

生成したオブジェクトをバインドする tsubakit1.hateblo.jp

座標系を理解する tsubakit1.hateblo.jp

公式のドキュメント https://docs.unity3d.com/ja/2018.3/Manual/TimelineSection.html

Timeline の終了検知 Unity - Scripting API: Playables.PlayableDirector.stopped

ワイルドアームズ ミリオンメモリーズの戦いの始まりの仕様について

ゲーム概要

 公式サイト wild-arms.com

 IP物であり、原作好きなら楽しめると思います。
 少なくとも私はシナリオを楽しく読み進めております。
 

今回のイベント内容

  • ブーメラン+ルシエドとの闘技場
  • 主に1(F)のシナリオを軸にしている
  • ダブル・ブーメラン・ダイナミック!

各ランキングの参加者数

  • 何かの基準で振り分けされたグループでランキングを競う
  • 1000位までボーナスがあるが、恐らく参加者数は100名前後と思われる
    根拠は明らかに強いフレンドがいない、ランキングの変動が少なすぎる

スコアの判定

  • 与えたダメージ量‐被ダメ量+クリアタイム=総スコア

好スコアの為の、敵のHP回復を待ちスコアを伸ばせる事について

  • ルシエドにダメージを与えるとブーメランが回復を行う行為を発生させ、与えるダメージ量を増やす行為
  • 回復するまで待つ必要があり、1プレイの時間が間延びする
  • プレイ時間が延びる為、操作ミスによるユーザーへのストレスの上昇
    ARMの使用に長押しを必要とするため、誤動作が辛い
  • 正直、忍耐力勝負にしている
  • 何となく、仕様の穴だと思われる
  • この要素によりランキングのカンストが発生する可能性がある
  • 10分プレイし6,000,000の報告があったと思う。うろ覚えだが調べなおす気もない。

ランキングの気になる所

  • 2週間の長期期間である事
  • スコアを伸ばす方法がHP回復させる事のみである事
    クリアタイムボーナスより大きく増やし続ける事が可能なため
  • ガチャによる強化要素があまり必要ない事
  • ランキング内の人数が少ない事もあり、上位がとり易そうに見える為、時間だけが浪費される事につながる
    これはゲームへのマンネリ感の上昇を促し、ゲームの衰退速度を加速度的に上昇させる行為であると考えている

どうすれば良くなりそうか考えてみた

  • ランキングを1週間か数日のより短期間に絞る事
    期間が短ければ問題が発覚した際のリスクを軽減できる
    期間が短ければ集中してプレイしやすくなる(日々のプレイのアクセントとして)
    期間が短ければ期間限定ガチャの限定感が増し、回しやすくなりそう
  • 1ランキング内の人数を増やす事
    アクティブ数によるが、1000人程度は必要と感じる。BOTを混ぜても良い
  • ランキングの実況機能、通知を増やす事
    ライブ感が薄いため、楽しくプレイできるように盛り上げて欲しい
  • ガチャとランキングをより関連付ける事
    ボスの弱点を付けないARMガチャは、欲求値が上がり辛い
    ※セシリアガチャは、このタイミングで投下した方がよかったと感じます
    ギアガチャが耐久力しか増えない、触っていて変化を感じない部分であるため、攻撃かアクションに変化を促すものであるべき
  • 2週間の場合、ランキングの前後半に分けるか、タイムアタックランキングなど別ランキングを追加する

最後に

  • このタイトルで失敗するとワイルドアームズシリーズが消えそうに感じている  シリーズが続くような状況に盛り上がって欲しいと考えています
  • 正直アクティブ数が少なそうで怖いです。ラクウェルは何時使えるのでしょうか?

Derkest Dungeon のMODの日本語化の流れ

はじめに

 Derkest Dungeon(R)のMODの日本語化についてまとめました。
 読み進める事で英語のMODを自分の手で日本語化する事が出来ます。
 日本語化されたMODがもっと増えると嬉しいな(^ω^)ノ

 MODをより深く知りたい場合は公式のModding Guide を参照ください。
 https://steamcommunity.com/sharedfiles/filedetails/?id=819597757

 日本語WikiのMod製作ページは以下を参照ください。
 game-data-base.com

フォルダのパスについて

Derkest Dungeon のインストールパス

Steam\steamapps\common\DarkestDungeon\

 ※Steamのインストールしてあるフォルダからのパスになります。
  Steamのデフォルトのインストールパスは C:\Program Files (x86)\Steam だと思います。

Steam のWorkShop からダウンロードしたMODのパス

Steam\steamapps\workshop\content\262060\(MODのID番号)\

 ※調べたいMODのウェブページを開き、アドレスからIDを探して下さい。  f:id:syuuki_kisaragi:20181101171647j:plain

MODを書き換える準備

テキストエディタを入手する

 編集するのが大変になりますのでテキストエディタを使用しましょう。
 私は visual studio community 2017 を使用しています。

 visual studio Community 2017visualstudio.microsoft.com

 Sakura Editorsakura-editor.github.io

 Visual studio codecode.visualstudio.com  

ファイルの拡張子を表示しておく

 編集する上で拡張子を表示させておくと、理解が深まると思われます。

日本語化の手順

 ここでは SteamWorkShop から入手したMODを翻訳していきます

  1. SteamWorkShop で日本語化したい MOD をサブスクライブする

  2. MODのインストールを待つ

  3. エクスプローラー上でMODフォルダを開く

  4. localization フォルダを開く

  5. .xml 形式の文字が格納されたファイルを開く
     大概はstring_table.xmlなどの分かり易いファイル名になっています。

  6. <language id="english">から</language>をコピーし</language>の下に張り付ける
    ※他にも言語はありますが english がデフォルトの物だと思いますので english を選択しました

  7. 貼り付けたテキストの<language id="english"><language id="japanese">に書き換える

  8. <language id="japanese">のタグの中にある<![CDATA[(英語の原文)]]>の英語の原文を日本語に翻訳していく

  9. localizationフォルダ内にあるlocalization.exeを実行する
    ※入っていない場合は、DarkestDungeonに同梱されているexeをコピーしてください。
     Steam\steamapps\common\DarkestDungeon\_windows\localization.exe

  10. japanese.loc ファイルをリネームし、(MODのID番号)_japanese.locに書き換える

  11. エクスプローラー上でMODフォルダにあるmodfiles.txtを開く

  12. localization/(MODのID番号)_japanese.loc 12440を追加する
    ※最後の番号はテキスト内で重複してはいけないので、重複しない値に書き換えておく事

  13. ゲームを起動する

  14. MODを適用させたいセーブデータに、MODを適用させる

  15. ゲーム内で動作を確認する

おまけ string table.xml の構造について

XML形式で書かれており、以下のような形になっています。シンプルですね。

?xml version="1.0" encoding="UTF-8"?>
<root>
  <language id="english">
    <entry id="hero_class_name_monk"><![CDATA[Monk]]></entry>
       ・
       ・
       ・
  </language>
  <language id="japanese">
    <entry id="hero_class_name_monk"><![CDATA[モンク]]></entry>
       ・
       ・
       ・
  </language>
</root>

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 ドライブ