Unityな日々(Unity Geek)

Unityで可視化アプリを開発するための試行錯誤の覚書

2017-01-01から1年間の記事一覧

シェーダーでトグル・列挙型のプロパティを使う

MaterialPropertyDrawer Shaderlabのシェーダ・プロパティに、インスペクタでトグルや列挙型(enum)などを使うには、UnityEditorのMaterialPropertyDrawerクラスを使う。 Unityの組み込みMaterialPropertyDrawerには次がある。 Drawer 記述 機能 ToggleDraw…

UnityEventのコールバック関数に、動的に引数を渡す

unitygeek.hatenablog.com 上のブログに書いたように、UnityEventをpublic変数で定義すると、インスペクタにUnityEvent変数が表示され、インスペクタ上でコールバック関数を追加・削除できる。 コールバック関数が引数をとる場合は、インスペクタ上に引数を…

入れ子のGeneric Listをインスペクタで使う

C#では、Generic Listを要素にもつGeneric List、すなわち、入れ子(多重)のGeneric Listを定義できる。 public List<List<string>> names = new List <List<string>>(); しかし、入れ子(二重)のGeneric Listは、インスペクタに表示されない。 インスペクタで入れ子Listを使うには、</list<string></list<string>…

UnityEventコールバック関数の設定方法について

C#/.NETに限らず、いわゆるオブジェクト指向言語では、クラスの独立性を高めるため、Eventが使われる。 Eventを使うには、イベント・リスナーを設定する必要がある。 たとえば、クラスA(ClassA)の初期化が終わってから、クラスB(ClassB)のInit()メソッド…

カスタムSkyboxを設定する

Skybox画像の読み込み Skyboxとして使う、全天周画像を準備する。 これをUnityのプロジェクトビューに読み込み、Textureのインスペクタで、'Texture Shape'を'Cube'に設定する。 Skybox用Materialの作成 Materialを新規作成し、 Shaderを'Skybox/Cubemap' 'C…

XMLからDictionaryを作成する。

unitygeek.hatenablog.com XMLを読み込んで、タグ名と値からDictionaryを作っておくと便利な場合がある。この方法について。 サンプルXML <works> <title>リップヴァンウィンクルの花嫁</title> <director>岩井俊二</director> <company>ロックウェルアイズ</company> <year>2016</year> </works> XMLからDicionaryに変換するコード 下の通り。 X…

LINQ to XMLを使ったXML操作

.NET(C#)でXMLを扱うにはいくつかの方法があるが、'LINQ to XML'を使うと簡潔に書けそうだ。 今回、Unity上で'LINK to XML'を動かしてみた。Unityバージョンは、2017.2。 XMLサンプルファイル XMLのサンプルは、次を使う。 <persons> <person> <name yomi="はりそんふぉーど">Harrison Ford</name> <birth>1942-07-13</birth> <works> <title>Sta</title></works></person></persons>…

非MonoBehaviourクラスでコルーチンを使う

参考: unitygeek.hatenablog.com コルーチンを使うには、 StartCoroutine(戻り値IENumeratorのメソッド) と記述する。 StartCoroutine()はMonoBehaviourクラスのメソッドである(Unity - Scripting API: MonoBehaviour.StartCoroutine)。 MonoBehaviour継…

標準リテラルと逐語リテラル

「リテラル」とは「文字通り」という意味。プログラミングにおける「リテラル」は、値や文字をそのまま書き下したものを指す。 リテラル文字列には、「標準リテラル」と「逐語リテラル」の2種類があり、特殊文字の記述方法が異なる。(2.4.4.5 リテラル文字…

Oculus Rift使用時に、スピーカーから(も)音声を出力する

Oculusアプリの設定(歯車アイコン)で、'Settings'を選択。 Devicesメニューで、'Rift'(ヘッドセット)を選択。 ‘Audio Output in VR'のドロップダウンメニューで、 Windows Default: OS側出力のみ Both (audio mirroring):OculusとOSの両方に出力 を選択…

ウェブカメラの映像を表示する

ウェブカメラの映像をテクスチャとして貼り付ける ウェブカメラの動画を取得するには、WebCamTextureクラスを使う。 docs.unity3d.com 次は、ウェブカメラからの映像をメインテクスチャとして適用するスクリプト。このスクリプトを、たとえばPlaneオブジェク…

プロパティ(getter/setter)について

通常、C#のクラスは「フィールド」と「メソッド」で構成される。フィールドは「メンバ変数」とも言い、変数(データ)の定義箇所。メソッドはそのままメソッドの定義。 //フィールド public bool isRunning; private float age; //メソッド public void Chec…

?と??ーNull許容型・Null条件演算子

C#のコードの中に、たまに'?‘が出てくる。たとえば次のように。 int? length = customers?.Length; Customer first = customers?[0]; int? count = customers?[0]?.Orders?.Count(); なんじゃこれは??・・・コードを見てまさに「?」と思っていたところ、…

C# (.NET Framework)の名前の付け方

UnityでC#のコードを作成するとき、変数やメソッドなどの名前の付け方に迷うことが多々ある。「何が正しいか」は一意に決められないとは思うが、基本的には本家Microsoftの考える「名前の付け方ガイドライン」に従うのがいい。そうすれば、他のメンバーや、…

コルーチンについての覚書

たまに使いたくなるが、いまいち理解できていないもののひとつが、コルーチン(Coroutine)。 ということで、いくつかメモ書きを。 コルーチン(Coroutine)とは何か? Coroutineとは何だろうか? Wikipediaには次のようにある。 「コルーチン(英: co-routi…

Unityエディタをバッチで起動し、プロジェクトにコマンドライン引数を渡す

Unityエディタをバッチファイルから起動するには、 "C:\Program Files\Unity543\Editor\Unity.exe" と書いたバッチファイルを作って、ダブルクリックすればよい。"“でくくっているのは、フォルダ名Program Filesがスペースを含んでいるため。 ちなみに、Unit…