太郎Work

Unityとかで困ったこと等を残しておきます

コマンド引数を指定しつつUnityを複数起動する方法

クローン後の初プロジェクトオープン時PC&Macでプロジェクトが開かれてしまい、そこからiOSにswitchPlatformするのも時間がかかりすぎるのでコマンドラインから起動する方法
そして複数起動も出来る方法です

open -n /Applications/Unity/Unity.app --args -buildTarget iPhone -projectPath projectpath

--args をつけるのがミソみたいです。

UnityEditorのObjectFieldでフォルダのみ入れる

もっと簡単な方法あれば教えて下さい><

Object folder;
var newFolder = EditorGUILayout.ObjectField (folder, typeof(Object), false);
var path = AssetDatabase.GetAssetPath (newFolder);
if (AssetDatabase.IsValidFolder (path)) {
	folder = newFolder;
} else {
	folder = null;
}

どこかにありそうですが、パッと見つからず、試しにそれっぽく使ってみたら上手く行ったのでメモとして残しました。

AssetBundleメモ

Unity5.1.0での話

  • AssetBundle.CreateFromFileはエラーになって動かない
  • ビルド時は出力フォルダの.manifestファイルを参照しているためファイルをリネームすると再ビルドが走る
  • AssetBundle本体のファイルが存在しているかどうかのチェックはされていないのでリネームしても可
  • AppendHashフラグを持たせるとファイル名の後にハッシュ値が付与されたファイル名になる。

MementoBeta使ってみた

Mementoというサービスを使用して適当なフィギュアから簡易的に3Dモデル化してみました。
f:id:tarowork:20150326012101p:plain

WebPlayer版
Unity Web Player | Figure

Memento

少し前ですがMementoというサービスがベータ版で公開されたので少し試してみました。
Autodesk Memento


簡単に言うと複数の角度から写真を撮影し、アップロードするといい感じに3D化してくれるサービスです。www.youtube.com
(PVかっこいい)


と、いってもいい被写体がなかったので近くにあったフィギュアで試してみました。

続きを読む

Vector3.magnitudeの負荷について

きっかけ

とある実装でC#処理負荷が非常に高く困っていたのですが、C#の実行速度が遅いからと考えていました。

ふと、magnitudeの平方根計算が非常に高負荷になっているのではないかと思い、検証してみました。

A,B2点間の距離を出す式は以下のようになり、公式リファレンスにも負荷があるよと記述があります

{ \displaystyle
V = V_A - V_B\\
length = \sqrt{Dot(V,V)}
}
HatenaってTex記述もできるんだねすごぃ
Unity - Scripting API: Vector3.sqrMagnitude

続きを読む

SetReplacementShaderの使い方

公式の説明が全く意味不明だったのでメモ

Unity - Manual: Rendering with Replaced Shaders


カメラに映る全体を単一シェーダで描画したい場合は呼び出すだけ。

camera.SetReplacementShader (shader, null);


問題は特定のシェーダの場合のみ描画したい場合。

第2引数にカスタムタグの「キー」を指定すると、差し替えるシェーダに指定されているタグと対象にセットされているシェーダに指定されているカスタムタグの「」が一致していた場合描画される。
ここを理解するのに時間がかかりました…

shadowcamera.cs

camera.SetReplacementShader (shadow, "Shadow");


shadow.shader

Tags {
    "RenderType"="Opaque"
    "Queue"="Geometry"
    "Shadow"="Character"
}


character.shader

Tags {
    "RenderType"="Opaque"
    "Queue"="Geometry"
    "Shadow"="Character"
}

このようにするとUnity側がShadowタグを確認しここではCharacterが共通なため描画される仕組み。
他のシェーダにはそもそもShadowタグが存在しないので無視されます。

これでキャラクターのみの自前シャドウマップが作成出来ました。
めでたしめでたし