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モデル化してみました。
WebPlayer版
Unity Web Player | Figure
Memento
少し前ですがMementoというサービスがベータ版で公開されたので少し試してみました。
Autodesk Memento
簡単に言うと複数の角度から写真を撮影し、アップロードするといい感じに3D化してくれるサービスです。www.youtube.com
(PVかっこいい)
と、いってもいい被写体がなかったので近くにあったフィギュアで試してみました。
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タグが存在しないので無視されます。
これでキャラクターのみの自前シャドウマップが作成出来ました。
めでたしめでたし
UnityのArialフォントがAndroid実機上で表示されない場合がある
問題
Unity上のシステムフォントテキスト設定でデフォルトのArialのままAndroidビルドを行った場合、
確認できただけですが、LG-02E, GalaxyS5で日本語フォントが表示されない問題があります。
理由
どうやら挙動的にはDroid Sansというフォントがロードされているようで上記の端末には英語と韓国語しか入っていませんでした。
そのため日本語が表示されないという問題です。日本で発売している端末なのにひどすぎる…
解決
どちらにしろDroid Sansはフォントが汚いのでこちら側で指定しました。
Unityに適当な日本語に対応したttfをインポートし、以下のように設定すると問題なく表示されます
・Incl. FontDataをfalse
・Font NamesをMotoyaLMaru, MotoyaLCedar, RobotoSansFallback, Droid Sans Fallbackと指定
これで日本語が表示されます。ここで使用したttfファイルはビルドに含まれないことも確認しました。
しかし、今度はGalaxyS5だとモトヤフォントに韓国語と中国語が入っていないという問題が発生しましたがそれに対しては対応できていません。
(L-02Eの方はちゃんと入っていました)
海外の端末ではMotoyaではなくRobotoが呼ばれ、昔の端末ではDroidSansが呼ばれるはずなのでひと通り網羅できるのではないかなと思います。
Unityの端末向き設定
随分前に調べて忘れないようメモ
UnityiOS,Androidで横向きのアプリを作成する際、PlayerSettingsから回転設定を指定しますが、
一方向固定又は自動回転しか設定ができません。
Landscape Right Left
的なものが欲しいのですが複数選択できません。
その場合最初のシーンに配置されているスクリプトのStartに以下のコードを書くと実現できます。
Screen.autorotateToLandscapeLeft = true; Screen.autorotateToLandscapeRight = true; Screen.autorotateToPortrait = false; Screen.autorotateToPortraitUpsideDown = false; Screen.orientation = ScreenOrientation.AutoRotation;
これで横持ちをしても自動で回転してくれるようになります。
Unity側の設定はLandscape Right, Landscape Leftどちらでも問題ありません。起動後に自動回転します。