おれんじりりぃぶろぐ

きっと何者にもなれないエンジニアのブログ

適当なバイナリファイルを作る

適当なバイナリファイルを作成する方法のメモです。 1KBのsample.binという適当なバイナリファイルを作成してみます。

dd bs=1024 count=1 if=/dev/urandom of='sample.bin'

bs: 1ブロックのサイズ count: ブロック数 of: ファイル名

C#で特定の文字列を抽出する

数ヶ月に1度くらいの頻度でMatchと向き合わなければならないときが来るわけですが
毎度、1万3000年の時を超えて記憶を辿るはめになるので
次回からはそうならないようにメモしておこう。そうしよう。

"http://sample.com?id=2"からid=2を抽出したい。

using System;
using System.Text.RegularExpressions;

class MainClass {
    
    static void Main(){
        Regex r = new Regex("id=([0-9]+)");
        Match m = r.Match("http://sample.com?id=2");
        Console.WriteLine(m.Groups[0].Value);
    }
}
id=2

数字の2だけ抽出したい。

using System;
using System.Text.RegularExpressions;

class MainClass {
    
    static void Main(){
        Regex r = new Regex("id=([0-9]+)");
        Match m = r.Match("http://sample.com?id=2");
        Console.WriteLine(m.Groups[1].Value);
    }
}
2

簡単じゃん。

MacにUnityのキャッシュサーバーを導入してみる

概要

ビルド時間、Switchプラットフォーム高速化のため Unityのキャッシュサーバーを導入してLaunchAgent登録するところまでやってみました。

インストール

バージョン6以上からはGithubでの管理になりました。

Readme通りnpmでインストールできます。

npm install unity-cache-server -g

npm入れてない場合はあらかじめインストールしましょう。

起動スクリプト作成

適当なディレクトリに以下のスクリプトを用意します。

com.unity3d.CacheServer.sh

#!/bin/sh

export PATH=/usr/local/bin:$PATH

PORT=8126

/usr/local/bin/unity-cache-server --port ${PORT} --log-level 5

権限設定を忘れずに行いましょう。

chmod 744 com.unity3d.CacheServer.sh

port 8126はデフォルトです。

LaunchAgentへ登録

こちらの~/Library/LaunchAgents/com.unity3d.CacheServer.plistにplistを作成します。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.unity3d.CacheServer</string>
    <key>ProgramArguments</key>
    <array>
        <string>(先ほど作ったディレクトリ)/com.unity3d.CacheServer.sh</string>
    </array>
    <key>KeepAlive</key>
    <dict>
        <key>SuccessfulExit</key>
        <false/>
    </dict>
    <key>RunAtLoad</key>
    <true/>
    <key>StandardOutPath</key>
    <string>/tmp/com.unity3d.CacheServer.out</string>
    <key>StandardErrorPath</key>
    <string>/tmp/com.unity3d.CacheServer.err</string>
</dict>
</plist>

登録方法はこちらです。

launchctl load ~/Library/LaunchAgents/com.unity3d.CacheServer.plist

解除はこちらです。

launchctl unload ~/Library/LaunchAgents/com.unity3d.CacheServer.plist

UnityのPreference登録

f:id:orange_lily27:20190115111152p:plain

ローカルだけではなくリモートの登録も可能です。 チーム開発している場合などは、便利かもしれません。

Unityで作ったアプリで端末の電源ボタンを押してもアプリが復活する問題に遭遇した

現象

Unityで開発中のアプリにてAndroidの特定端末でタイトルの現象に遭遇しました。 アプリ起動中に電源ボタンを押してサスペンドさせても数秒後に勝手にロック画面も表示されずアプリが復活してしまうという現象です。 なんと自己主張が強いアプリです。

対処法

BuildSettingsのDevelopment Buildにチェックが入っていたのでOFFにしたところ現象の発生はなくなりました。 全ての端末で起きるわけでもなくAndroidの特定の端末のみで起こるので厄介な問題でした。 (今回、自分が試した端末はAsus Zenfone5でAndroid Nでした) Android ManifestのOrientationとか色々いじりましたが、Unityの余分な仕様というオチでした。

参考

現象は少し異なりますが対処方法は同じでした。

Unityを使って女の子二人を動かすまで

成果物

f:id:orange_lily27:20180801014559g:plain

使用したツール

やったこと

MagicaVoxcelを使って簡単なモデリングをし、blenderでリギングを行いました。さらに、Unityにインポートしてアニメーションをつけるまでを紹介します。

モデリング

MagicaVoxcelを使って頑張ってモデリングをします。 ひととおりモデリングが終わったら右下のobjで書き出しを行います。

f:id:orange_lily27:20180801015548p:plain

リギング

次にblenderを使ってリギングを行います。 こちらで紹介されている素体用のアーマチュアを使わせてもらいました。
アーマチュア、objの順に取り込んでボーンの位置合わせを行います。 右クリックでアーマチュアの頂点を選択することができ頂点移動ができます。 「Remove Doubles」で重複頂点を削除するのも忘れないようにします。
Editモードにすることで左ウィンドウに「Remove Doubles」が出てきます。 f:id:orange_lily27:20180801020420p:plain

Objectモードに再び戻します。 メッシュ -> アーマチュアの順に選択をします。順番が大切です。Shiftを押しながら選択することで複数選択できます。 Ctrl + Pで「Make Parent」->「Armature Deform With Automatic Weights」でメッシュをボーンに関連付けができます。

最後にFbxとしてExportします。

リギングに関してはMixamoという自動で行ってくれる便利ツールがあるのですが、頭が大きすぎるからか髪の毛と腕がくっついてしまって今回は使うことができませんでした。

Unity

さきほど作ったFbxをUnityにD&Dします。

InspectorでAnimationTypeをHumanoidにします。

Configureを押して緑の人間が出てきたら成功です。Musclesで各部位をスライドさせることで動作チェックも行います。これで同じHumanoidTypeのAnimationClipを使い回すことができます。

モデルに色がついていない場合は、MagicaVoxcelのObj出力時に.objと同時にできた.pngを使ってMaterialを作成します。 MaterialのShaderはMobile/diffuseにしてpng画像をセットします。

最後に動かすためにアニメーションを設定していきます。 Unity Chanの3DモデルのAnimation Clipを使いました。

今回はAnimationControllerを使用しないSimpleAnimationを使ってアニメーションをつけました。 こちらの記事を参考にさせてもらいました。

f:id:orange_lily27:20180801014559g:plain

参考

Googleドキュメントにソースコードを綺麗に挿入する

いくつか試しましたが、「Code Block for Google Docs」というアドオンが良かったです。

[アドオン] -> [アドオンを取得] -> 「Code Block for Google Docs」で検索して追加できます。
使い方は、[アドオン] -> [CodeBlocks] -> [Start]から整形することができます。
コードを選択して[Format]を押すと整形されます。

こんな感じで表示されます。 f:id:orange_lily27:20180518203417p:plain

UnityでGCの回数を計測する

GC.CollectionCount()を使ってGCの回数を取得することができます。 GC.CollectionCount(0)はプロセスを起動してからのGC回数を返してくれます。

int startGcCount = GC.CollectionCount(0);

// GCが走りそうな処理

Debug.Log($"GC回数: {GC.CollectionCount(0) - startGcCount}回");