強火で進め

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

GoPro HERO7 Black の撮影テスト

TimeWarp ビデオ


ジンバルを使って撮影したかの様なスムーズな動きの動画に仕上がってますね。

タイム ラプス ビデオ


0.5秒設定で撮影した事もありかなり慌ただしい感じの動画になっちゃってますね(汗

タイム ラプス フォト

元画像

3fpsで動画化したもの

※画像が回転しまっくてるのは恐らく肩にマウントして撮影したのが原因です。逆に同じ条件なのに TimeWarp ではグラグラしてないのは同じ傾きの画像だけをチョイスして最終的な動画を作成してるのかな?

ナイト ラプス フォト

元画像

露光時間が長いので自動車のヘッドライトが長く伸びてますね。というか左側の自転車もかなり伸びてますね。

3fpsで動画化したもの

リスト

自分が GoPro HERO7 で撮影した動画はこちらのリストにまとめています。

アプリ内に Unity 式の Readme を置く方法

「Survival Shooter」のチュートリアルを見ていると Inspector にこんな感じの表示がされる Readme が有りました。

Survival Shooter Tutorial - Asset Store
https://assetstore.unity.com/packages/essentials/tutorial-projects/survival-shooter-tutorial-40756

これ、自分でも使えないかな?と仕組みを確認した所、問題無く使えたので手順をメモっておきます。

構造

構造としては ScriptableObject と Inspector での表示方法をカスタマイズする CustomEditor を使って実装されていました。

自分で使う場合

自分でこの Readme の仕組みを使う場合の手順は以下の様になります。

1. 「Survival Shooter Tutorial」をプロジェクトに追加。
2. Assets フォルダから TutorialInfo フォルダ以外のファイルを削除。
3. Assets/TutorialInfo/Scripts/Readme.cs を開き、 class 定義の前に [CreateAssetMenu] を追加。

using System;
using UnityEngine;

[CreateAssetMenu]
public class Readme : ScriptableObject {
	public Texture2D icon;
	public string title;
(以下略)

4. Inspector での拡張表示を一時的に止める為に Assets/TutorialInfo/Scripts/Editor/ReadmeEditor.cs の [CustomEditor(typeof(Readme))] の記述をコメントアウト

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System;
using System.IO;
using System.Reflection;

// [CustomEditor(typeof(Readme))]
[InitializeOnLoad]
public class ReadmeEditor : Editor {
(以下略)

5. Projecrt ビューの上で右クリックし、メニューから Create > Readme と選択し、 .asset ファイルを作成。名前は Readme に変更して保存。
6. 生成されたファイルを選択し、以下の様に入力。

※ Icon には Assets/TutorialInfo/Icons/SurvivalShooter.png を選択。

7. ずっと出てても邪魔なので 3. で追加した [CreateAssetMenu] を削除。
8. 4. でコメントアウトした部分を元に戻す。

作業を行った後に Readme を選択するとこの様に表示されます。

Heading で記述したものが文章のブロックのタイトル、 Text が本文に成っているのが確認できます。
また、 LinkText がリンクのテキストと成っていて、これが記述されていない場合にはリンクそのものが存在していない事が確認できます。

Tips

Readme の作成が終わった後は Assets/TutorialInfo/Layout.wlt は必要ないので削除しておくと多少節約ができます。

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/