2013年5月26日日曜日

[Unity]Unityで開発するときにデバッガを使用する方法

Unityで開発を行うときに、デバッガを使いたかったのでメモ。

MonoDevelopを使用して、Unity用のデバッガを起動できる。
以下、Max OSXでの手順。

◆MonoDevelopUnityのデバッガを使用
 1. Mono側の設定
[Mono-Develop-Mac]->[Add-in Manager...]->Installedタブ->Unity->Mono Soft Debugger Support for Unityが有効になっていることを確認

 2. Unity側の設定
[Preference]->External Tools->Edit Attachingを有効にする

 3. デバッガーを使用する
ブレークポイントを設定する
[Run]->[Attach to point]->Unity Debuggerを選択してUnityと関連づけられたUnity用のデバッガーを選択する(なければインストール)
Unity Editorを実行する

[Unity]WebPlayer Pluginsのアンインストール方法

WebPlayerのPluginで問題が発生したのでアンインストールする必要があったのでメモ。
アンインストーラーが無いようなので、手動でPluginを削除した。

◆Max OSX
 1. ブラウザを全て終了する
 2. Macintosh HD/Library/Internet Plug-Ins/Unity Web Player.pluginを削除
 3. ゴミ箱を空にする

⬇英語だがシンプルな手順と、難しくない単語でまとめられているので分かりやすいと思う。
http://answers.unity3d.com/questions/43303/how-do-i-uninstall-the-unity-webplayer.html

※自分でやった手順を追記

2013年3月31日日曜日

[Unity]GameObject以下のコンポーネントへのアクセス方法


GameObjectコンポーネント以下のコンポーネントのゲームオブジェクトでアクセスする方法



children = gameObject.GetComponentsInChildren();
foreach (Transform item in children) {
 if ( !item.name.Equals(gameObject.name) ) {
  MeshRenderer meshRender = item.gameObject.GetComponent();
  if ( meshRender != null ) meshRender.enabled = _value;
 }
}
などでアクセスする。
ポイントはTransform型でアクセスすること。
基本的に全てのGameObjectはTransformを所有する決まりが有るので、
transformクラスからGameObjectへのアクセスが可能になっている。

アセンブリブラウザで確認すれば解るが、TransformクラスはComponentクラスを継承しているので、様々なオブジェクトを取り扱えるというわけだ。

http://docs-jp.unity3d.com/Documentation/Components/class-Transform.html

◆結論

GameObject=Transformという認識で問題ない。


しかし、スケール値の不均等によるパフォーマンスの問題や制限があるだなんて初めて知った……。

[Unity]Errorについて

Unity上で発生した珍しいエラーや解決が困難だったものをメモしておく。
※随時追記


is an ambiguous reference between
クラスの重複。
カスタムDLLをインポートした時に発生しやすい。
namespaceが重複してしまっているので、クラス名の前にパッケージ名を付与する必要が有る。

・DllNotFoundExeption
DllImportで読み込むときのファイルが存在しないと言っている。
とあるDLLを使おうとしたときに発生したのでメモ。


とりあえずこんなところ。

[Blender]Blender How To


Blender How To

Unityを使う上でサンプルオブジェクトはある程度エンジニアでも作れるようになっておかないといかんので、自分用にメモしておく。

◆最初にすること

 - Mayaをしばらく触ったことがあるので、基本操作をMaya版に設定変更する
 - 右クリックと左クリックの動作を変更しておくこと
 - 必ず操作方法のチュートリアルを見ること

特に、操作方法のチュートリアルは見ておかないと、後に別のチュートリアルを見た時に、「なんだそのウィンドウは!?」、「どうやったらそういう操作ができるんだ!?」などと困ってしまうことになる。

◆簡単なものを作成してみる or 操作してみる

・本のページめくりを作成するまでのチュートリアル
アニメーションの作成方法のチュートリアルとしては見た目面白いが、基本キー操作が解っていないとつらい。
操作方法のチュートリアルを飛ばしたのでここで詰まった。

・テクスチャの裏表に別々のテクスチャを貼付ける
原理は非常に簡単。
しかし、objファイルやfbxファイルに書き出した時に反映されていないので、Unityを使っていく上では必要なかった。

・操作方法の図解ブログ
この人は図解されているので説明が親切。
ほとんどのブログや公式の説明の類いは、文字だけの説明になっているので、特定のコマンドがどこに存在するのかが解り辛く、初心者には厳しい中、こういうのは非常にありがたい。

・移動、回転、拡大縮小の軸を限定する方法
G,R,Sに続けて[X,Y,Z]のキーを押すと限定できる。

◆必要なこと

 - アーチなどのように、四角形を少しだけ複雑にしたようなモデリングができる
 - 一つのオブジェクトに対してマテリアルを複数適用できる
 - 出力形式やパラメータ設定の違いを理解しておくこと

これくらい出来れば、モデリングの作成や修正の依頼する時にそこそこ話が通じる。
基本的にどういったモデルが必要になるかは実装するエンジニア次第なところがあるので、エンジニアも最低限これくらいはできないといかんな。
あとはその時の立場とかにもよるかもしれないが……


2013年3月24日日曜日

[Unity]Shader上で深度値を取得する方法


Shaderから深度値を取得する方法
チュートリアルの「Shader Replacement」が良い教材

◆Edge Detection

・カメラ上で以下のコードを追加する
取得できるのはモードにより異なる
  • 深度のみ
  • 深度と法線

void OnEnable() {
    camera.depthTextureMode = DepthTextureMode.Depth;
    camera.depthTextureMode = DepthTextureMode.DepthNormals;
}



・Shader上の処理
深度バッファ値を格納してあるテクスチャー情報を取得する。
そのためには以下のようにShader用のグローバルな固定変数がある
sampler2D _CameraDepthTexture;
sampler2D _CameraDepthNormalsTexture;

デプスバッファはプラットフォーム毎に異なる実装方法なので、
リンクを参照する。
あとは、差異をなるべく少なくするためのマクロも実装されているので活用する。


◆Glowing Things

RenderWithShader -> 特定のレンダリングパスにシェーダーを適応する処理
そのデモが「Glowing Things」である。

・オブジェクトに適応するShaderのレンダリングタイプを設定する
Hierarchy上のCylinderオブジェクトには「VertexLit Funky」というShaderが適応されている。
ポストエフェクト時に演出していることがわかる。


以下、Unity Script からの抜粋
OnPreCull is called before a camera culls the scene.
OnPreRender is called before a camera starts rendering the scene.
OnPostRender is called after a camera finished rendering the scene.
OnRenderObject is called after camera has rendered the scene.
OnWillRenderObject is called once for each camera if the object is visible.
OnGUI is called for rendering and handling GUI events.
OnRenderImage is called after all rendering is complete to render image






[Blender]3D View FullからDefaultに戻る方法

Blender(v2.64a)を使用しているとき、
Screen Layoutの3D View Fullから戻れなくて困ったのでメモ。

◆手順

 1. 3D View Full画面に移動する
 2. 画面右下の+ボタンを押す、するとヘッダー画面が出現
 3. ヘッダー画面の表示タイプを「info」に変更する
 4. スクリーンビュータイプを「Default」(3D View Full)以外に変更する











いやー、戻れなくて困った困った。
検索すると、Blenderの操作感に違和感がある方が多くてびっくり。

◆参考

http://blenderartists.org/forum/showthread.php?268127-Delete-2-64-Screen-Layout-3D-View-Full-(Solved)