Programming」カテゴリーアーカイブ

プログラミング全般に関するカテゴリーです。

C#のSystem.DateTimeを使って経過時間を計る方法

UnityでしかC#を使ったことがなかったので、C#の機能で経過時間を計る方法を調べてみました。

var time1 = System.DateTime.Now;
// .. 何かの処理 ..
var time2 = System.DateTime.Now;
TimeSpan elapsedSpan = new TimeSpan(time2.Ticks - time1.Ticks);
Console.WriteLine("{0} seconds", elapsedSpan.Seconds)

Unityを使う場合はUnityの機能を使うのが普通だと思いますが、async/await関係でうまく動かなかったのでテスト的に使ってみました。

リンク

DateTime.Ticks Property (System)
https://msdn.microsoft.com/en-us/library/system.datetime.ticks(v=vs.110).aspx

Makefileの書き方メモ

Makefileで個人的によく使う書き方メモ

基本的な書き方

ターゲット名: 依存ファイル
--TAB-- コマンド1
--TAB-- コマンド2

よく使うマクロ

$@ターゲット
$<依存ファイルの先頭
$^依存ファイル全て

サンプル

helloをビルド(マクロを使わないパターン)

hello: hello.c
--TAB-- cc -o hello hello.c

lesscpy.less.cssに変換(マクロを使うパターン)

lesscpy $< > $@

convertコマンドで.pngファイルを.jpgに変換(サフィックスルール)

.SUFFIXES: .jpg .png
.png.jpg:
--TAB-- convert $< $@

Unityで複数のメッシュを結合する方法

Unityで複数のメッシュを結合したい場合はMesh.CombineMeshesが使えるそうです。 例えば、targetの子オブジェクト全体を結合したい場合は次のような感じです。

GameObject target;
MeshFilter[] meshFilters = target.GetComponentsInChildren<eshFilter>();
CombineInstance[] combine = new CombineInstance[meshFilters.Length];

for (int i = 0; i < meshFilters.Length; ++i) {
  combine[i].mesh = meshFilters[i].sharedMesh;
  combine[i].transform = meshFilters[i].transform.localToWorldMatrix;
}

GameObject result = new GameObject();
MeshFilter meshFilter = result.AddComponent<eshFilter>();
meshFilter.mesh = new Mesh();
meshFilter.mesh.CombineMeshes(combine);

ちなみに、1つのメッシュで多くの頂点があるとうまく表示できなくなることがあるみたいなので気を付けてください。

リンク

Unity – Scripting API: Mesh.CombineMeshes
https://docs.unity3d.com/ScriptReference/Mesh.CombineMeshes.html