West Hill 開発メモ

カテゴリ: Unity



TextMesh Proは便利ですが、デフォルトフォントの参照を
「Assets/TextMesh Pro/Resources/」内の「TMP Settings.asset」というScriptableObjectの「Default Font Asset」というパラメタで持っているため、
ここに設定したフォントアセットはResourcesフォルダ外に置いていたとしても、ビルド時にはResources内に含まれてしまいます。
tmpfont01
最初から指定されている「LiberationSans SDF.asset」は1MBですが、
仮に日本語フォントアセットを2048x2048サイズで生成して「Default Font Asset」に指定した場合は、4MBのフォントアセットファイルがResources内に入ることになります。

これを、Resourcesのサイズは抑えた上で、サイズの大きいフォントアセットをデフォルトフォントっぽく使えるように変更します。

まずは「TMP Settings.asset」の「Default Font Asset」を「None」に設定して、
Resources内に含まれている「LiberationSans SDF.asset」は削除するか、
Resourcesフォルダ外へ移動させます。
tmpfont02

これでResourcesからフォントアセットは除けましたが、
Hierarchyメニューの「Create/UI/TextMesh Pro - Text」でTextMesh ProのGameObjectを生成した際に、デフォルトフォントが存在しないとエラーになります。
tmpfont03

このエラーを解消するために、以下のような設定でサイズの小さいフォントアセットを作ります。
tmpfont04
64x64サイズで4KB。(もっと縮めても良いかも)
↑で生成したフォントアセットを「TMP Settings.asset」の「Default Font Asset」に設定することで、Resourcesのサイズを抑えつつ、TextMesh ProのGameObject生成時のエラーが発生しないようにします。
tmpfont02

この状態でHierarchyメニューの「Create/UI/TextMesh Pro - Text」で生成すると、
サイズの小さいデフォルトフォントが適用されたボケボケのTextMesh ProのGameObjectができます。
tmpfont06
その後でInspector上からTextMeshProUGUIコンポーネントのFontAssetを、
Resources外のフォルダにあるサイズの大きいフォントアセットに差し替えれば良いのですが、毎回手で指定するのも面倒なので、カスタム生成メニューを作ります。

※フォントパスやTextMeshProUGUIの設定は適宜変更してください。

↑のスクリプトをプロジェクト内に配置して、
Hierarchy上でCanvas配下を選択した状態で、
メニューの「Create/UI/Custom TextMesh Pro - Text」で生成すると、
フォントアセットを差し替えた状態のTextMesh ProのGameObjectが生成されます。
tmpfont07

これで、Resourcesのサイズは抑えつつ
Resources外にあるフォントアセットをデフォルトで使用する形にできました。
このエントリーをはてなブックマークに追加 Clip to Evernote

unityroom様で、2017-11-13 〜 2017-11-19 に開催された
Unity 1週間ゲームジャム お題「space」に参加して、
スペースドギーというゲームを制作しました。

このゲームで使用したアセットは以下になります。



短期間で集中して作るのは楽しいですね。
面白い作品が多くて刺激にもなります。
Unity 1週間ゲームジャム / お題「space」ゲーム一覧

Unity 1週間ゲームジャムについて詳しくはこちら
このエントリーをはてなブックマークに追加 Clip to Evernote

以前作成したUnity UI(uGUI)で頂点カラーを付けるUIエフェクト(uGUI-Effect-Tool)に
だんだん透明になるアルファグラデーション用のコンポーネントを追加しました。

使い方は(Add Component >> UI/Effects/Gradient Alpha)でUIオブジェクトにつけるだけです。
ugui-effect-tool_gradient_alpha01
テキストの場合、全体か1文字づつか選べます。
ugui-effect-tool_alpha02
カラーグラデーションの方にも同様のパラメーターを追加しました。
ugui-effect-tool_gradient03 
カラーグラデーション、色合成についての以前の記事
このエントリーをはてなブックマークに追加 Clip to Evernote

Unity上で楽曲をテンポ解析してBPMを推定する機能を作ってみました。

使い方
public AudioClip targetClip;

private void Start()
{
    int bpm = BpmAnalyzer.AnalyzeBpm(targetClip);
    Debug.Log("BPMは多分 " + bpm + " くらい");
}
AnalyzeBpmの中ではAudioClip.GetData()で取ってきたオーディオのサンプルデータを解析しています。

BpmAnalyzer.cs内で
サンプルデータをある程度で区切ってまとめるCreateVolumeArrayメソッドと、
実際にBPMを推定しているSearchBpmメソッドは、
処理時間が結構かかるので別スレッドから呼ぶように変更したほうが良いと思います。

※コルーチンみたいに使えるThread Ninja(Unity Asset Store)はおすすめ。
UnityEngine名前空間でもMathfなら別スレッドからでも呼べます。

また、例のシーンではメトロノームを使っていますが、実際の楽曲はテンポが動的に変わったりするので、万能ではないです。
楽曲を数秒おきに区切ってその範囲でBPMを推定する等が良いかもしれません。


参考
テンポ解析のアルゴリズム:
C/C++言語で音声ファイルのテンポ解析を行うサンプルプログラム 

AudioClip.GetDataで取れる値について:
このエントリーをはてなブックマークに追加 Clip to Evernote

Steam上でゲームをリリースする際に、Steamworks SDKの組み込みが必要になります。
steamworks
Steamworks ドキュメンテーション (要Steam開発者登録)

Steamworks SDKはC++のdllのため、Unityで使う場合はネイティブコード呼び出しで使用する必要がありますが、
ほぼ全APIをC#でラップしてくれているありがたいプロジェクトがありました。

GitHub - Steamworks.NET
ドキュメント - Steamworks.NET

このエントリーをはてなブックマークに追加 Clip to Evernote

このページのトップヘ