強火で進め

このブログではプログラム関連の記事を中心に書いてます。

TileMap (タイルマップ)の機能の実装状況

Unity には現在、2017.2 で追加された TileMap の機能が実装済みです。

タイルマップ - Unity マニュアル
https://docs.unity3d.com/ja/current/Manual/Tilemap.html

プレビュー版のドキュメントを見てみると Grid コンポーネントの設定で Isometric (クォータービュー) や Hexagonal (六角形)が選択できていた様ですがリリース版ではこれらの機能が見当たりませんでした。

2D Experimental Preview R1 Reference Guide
https://docs.google.com/document/d/1fGYUBPJrJknCsYbAl4z3cOP8x6kealwjZfa2DwcXSgA/

Isometric (クォータービュー)

Hexagonal (六角形)

こちらの中の人のコメントによるとリリース版にはこれらの機能は含まれなかったみたいです。

Isometric Tilemap in 2017.2.0? - Unity Forum
https://forum.unity.com/threads/isometric-tilemap-in-2017-2-0.484182/

なお、 2018.2 では Hexagonal ( Heagon ) については選択できる様になってました。

Unity 2018.2 からSVGファイルが使える様になりました


Unity 2018.2 から SVG ファイルが使える様になりました。

しかし、デフォルトの状態では使えません。使いたい時には Package Manager を開き、 All タブを選択→ Vectorgraphics をインストールして下さい。

Vectorgraphics がインストールされていると SVG ファイルをインポートすると Prefab 化され、それをシーンに追加すると Sprite として使用できます。

形状に沿った形のポリゴンが作成されて表示されているので拡大してもかなり綺麗な表示となります。
拡大した時のクオリティを一段と上げたい場合にはテセレーションを行う事も出来ます。

一般的なテセレーションではよりポリゴンをより細かく分割しますが分割数を減らす調整も可能な様です。

SVGを使ってみたサンプルプログラムはこちらからダウンロード出来ます。

Vectorgraphics のドキュメントはこちらで公開されています。

フォントデータを使った文字を含んでいるSVGファイルの場合

フォントデータを使った文字を含んでいるSVGファイルの場合にはその部分が全く描画されませんでした。この問題はこの様な時の定番のテクニック、フォントのアウトライン化により改善できました。
※フォントのライセンス的にアウトライン化して埋め込んで問題無いかどうかは事前に必ず確認して下さい。

illustratorの場合にはこの様な設定で出力した所、正しく描画されました。

関連情報

2018.2 is now available – Unity Blog
https://blogs.unity3d.com/jp/2018/07/10/2018-2-is-now-available/

Unity-Technologies/vector-graphics-samples: SVG and Vector Graphics Sample Project https://github.com/Unity-Technologies/vector-graphics-samples

Android の 64bit 対応のapkファイルの作成方法

(2019/01/17 追記)
Unity5.6 以前で作成された32bit対応ゲームに関しては、2021年8月までアップデートを受け付けるとの発表が Google から行われました。

Android アプリの64bit必須化の続報 - 強火で進め
http://d.hatena.ne.jp/nakamura001/20190117/1547708020

(追記ここまで)


Android アプリは2019年8月に64bit対応が必須化されます。

Androidアプリ、2019年8月に64bit対応を義務化。2018年にはOreo以降をターゲット化へ - Engadget 日本版
https://japanese.engadget.com/2017/12/20/android-2019-8-64bit-2018-oreo/

Unity の対応としては 2018.1 から 64bit(ARM64) ビルドが追加されていました。

What's new in Unity 2018.1 - Unity
https://unity3d.com/jp/unity/whats-new/unity-2018.1.0

しかし、このバージョンでは Experimental(実験的) の文字が付いていました。
2018.2 ではその文字が消えました。テストをする場合には 2018.2 を使うようにしましょう。

テストする時には特に使用しているプラグが64bit対応しているか?などを重点的にチェックしておきましょう。

64bit 対応ビルドの方法

64bit対応の apk ファイルの作成はとても簡単で基本的には ARM64 にチェックをするだけです。しかし、 ARM64 対応には IL2CPP が必須なので Scripting Backend を IL2CPP にしておく事を忘れない様にして下さい。

確認方法

念の為、ちゃんと 64bit 対応になっているか確認する事にしましょう。
確認には aapt を使うのでまだパスを通して無い人はパスの設定方法を調べて、事前にパスを通しておいて下さい。

コマンドとしてはこの様になります。

aapt dump badging test.apk

※ test.apk の部分は作成した自分の apk ファイルのパスを指定して下さい。

コマンドの出力から native-code: と書かれた部分を見つけ、値を確認します。ここに arm64-v8a が含まれていたら無事、 ARM64 対応の apk が作成できています。

ちなみに ARMv7/ARM64/x86 全てにチェックを付けてビルドした apk ファイルではこの様な値が出力されました。

native-code: 'arm64-v8a' 'armeabi-v7a' 'x86'

関連情報

Google Developers Japan: 今後の Google Play でのアプリのセキュリティおよびパフォーマンスの改善について
https://developers-jp.googleblog.com/2017/12/improving-app-security-and-performance.html

Meeting Google Play requirements in the future – Unity Blog
https://blogs.unity3d.com/jp/2017/12/20/meeting-google-play-requirements-in-the-future/

Unity 2018.2 から Unity プロジェクト内の .java ファイルがビルドされる機能が追加

Unity 2018.2 から Unity プロジェクト内の .java ファイルがビルドされる機能が追加されました。

What's new in Unity 2018.2 - Unity
https://unity3d.com/jp/unity/whats-new/unity-2018.2.0

機能としてはこの辺りの事が .aar や .jar を事前に作成する事無く、 .java ファイルを置く事で実装可能になりました。

UnityPlayerActivity Java コードの拡張 - Unity マニュアル
https://docs.unity3d.com/ja/2018.2/Manual/AndroidUnityPlayerActivity.html

Assets/Plugins/Android フォルダの下に .java ファイルと AndroidManifest.xml を置くだけでOKです。

コードの例

OverrideExample.java

package com.example.javacode;
import com.unity3d.player.UnityPlayerActivity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;

public class OverrideExample extends UnityPlayerActivity {
  protected void onCreate(Bundle savedInstanceState) {
    // UnityPlayerActivity.onCreate() を呼び出す
    super.onCreate(savedInstanceState);
    //Log.d("OverrideActivity", "onCreate called!");
    
    // 「Java Code」と記述されたダイアログを表示する
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage("Java code")
        .setPositiveButton("OK", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
            }
        });
    builder.show();
  }
  public void onBackPressed()
  {
    // UnityPlayerActivity.onBackPressed() を呼び出す代わりに、Back ボタンイベントを無視する
    // super.onBackPressed();
  }
}

※ Unity プロジェクトの Package Name は com.example.javacode を設定。それが1行目に書かれています。このコードの1行目は実際に使用している Package Name に置き換えて使って下さい。

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.company.product">
  <application android:icon="@drawable/app_icon" android:label="@string/app_name">
    <activity android:name=".OverrideExample"
             android:label="@string/app_name"
             android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
  </application>
</manifest>

実際に使ってみたサンプルをこちらに置きましたので参照下さい。アプリを起動すると「Java code」と記述されたダイアログが表示されるサンプルです。

関連情報

[Unity]Unity v2018.2 で java ファイルがサポートされたらしいよ! https://anz-note.ghost.io/2018/07/12/1531331781/

「Unity テスト完全に理解した」に参加して来ました

Unity テスト完全に理解した - connpass
https://connpass.com/event/88124/

中継のアーカイブ


Togetterまとめ

「Unity テスト完全に理解した 」のまとめ - Togetter
https://togetter.com/li/1234895

さては密結合だなオメー / Clean Architecture で学ぶテストフレンドリーな疎結合設計 - @monry


テストがないUnityプロダクトにテストを導入していくまで - @adarapata


GitHub - modesttree/Zenject: Dependency Injection Framework for Unity3D
https://github.com/modesttree/Zenject

ProjectContextに持たせる
https://github.com/modesttree/Zenject#global-bindings-using-project-context

NUnit自体はasyncサポートしているようなのでUnity 内のNUnitのバージョンが上がれば変わるかも?
http://simoneb.github.io/blog/2013/01/19/async-support-in-nunit/

Unity-UITest
https://github.com/taphos/unity-uitest

forkして改修を加えたうえで使うことにした
https://github.com/adarapata/unity-uitest

  • .NET4.6環境でEditTestをCLIから走らせるとハン グする
  • Macのみ発生、Winは起きない
  • 2017.3の最後のパッチで治ったらしいが、2017.4のLTSだと普通に落ちた

https://forum.unity.com/threads/stalled-builds-following-a-cleanup-mono-after-running-unit- tests-using-unity-2017-3f3.512707/

いいじゃん!と肯定して行動するのを「のってい き」と言う
https://speakerdeck.com/kentaro/the-secret-of-leadership-and-followership

やっていきに書いた内容(一部 修正済)
https://gist.github.com/adarapata/ c017ebb755ebf4543fd596adfb615974

Fundamentals of Testing
https://developer.android.com/training/testing/fundamentals

「第33回外秩父七峰縦走ハイキング大会」に参加して来ました


秩父七峰縦走ハイキング大会:ハイキングイベント「電車でハイキング」
http://tabi.tobu.co.jp/playing/hiking/events/nanamine/

去年の参加に続き、今年も参加。去年は途中でタイムアップだったのでリベンジです。


今回は前回の反省を生かし、途中の休憩をほぼ取らない感じ(しっかり取ってたら確実間に合わない)で進みました。


去年タイムアップになった旧定峰峠の時点ではまだ足に余裕が有ったので「これは完歩(※)できちゃう?」と思っていました。
※走るの禁止な大会なので完走では無く、完歩となります。


しかし、大霧山を登る段階で一気に足に余裕が無くなりました。うーん、もう終盤だからそろそろ消化試合な山の難易度じゃないかなぁ?と勝手に予想してましたがそれを裏切る急勾配な山でした。一気に足の力を奪われ、大霧山山頂のチェックポイントでタイムアウト


去年は旧定峰峠(23.9km)、今年は大霧山を越える事ができ、粥新田峠(26.7km)まで。山1つ分距離を延ばす事が出来ました。
しかし、まだ山2つの残ってたりします(^_^;)


もっとハードなトレーニングをし、来年こそは完歩します!!

その日の活動情報

大会会場への移動なども含んだ Fitbit のデータです。やはり、階数がすごい事になってますねw

コースルートや時間

第33回 外秩父七峰縦走ハイキング大会(スタート〜大霧山〜粥新田峠〜バス停) | 外秩父七峰縦走 |YAMAP 登山・アウトドアの新定番
https://yamap.co.jp/activity/1778410