Unityな日々(Unity Geek)

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

script-発展

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継…

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

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

Event使用時のエラー"... can only be called from the main thread"

次のようなエラーがでた。 状況は次のとおり。 オリジナルの'subClass'のスクリプトで、別クラスであるmainClassのイベントReadに、('subClass'のスクリプト内の)Actionメソッドを登録していた。イベントが発行されるとsubClassのAction()メソッドが呼ばれ…

Unity Editor上かどうかで処理内容を変える

Unityの開発はUnity Editorで行うが、Editor上と実際の実行プラットフォーム(Windows, Mac, Linux、iOS, Androidなど)とで処理を変えたい場合がある。これには次の2つの方法がある。 1. "Application.platform"を使う方法 実行時にスクリプト内で現在の実…

ジェネリックリストのジェネリックリスト(ジェネリックリストの入れ子)を作る

以前、「Unityで使える広義の配列」で書いたように、最近のC#では、ArrayListよりGeneric Listが推奨されている。 要素の型を指定できるので、よりロバストなコードがかけるGeneric Listだが、Generic Listの要素にGeneric Listを指定する、すなわち、Generi…

インスペクタでプルダウンリストを使う

インスペクタにプルダウンリストを表示するには、enumを使う。 たとえば、iTweenプラグインのイージングタイプをプルダウンリストで指定するには、 public enum EaseType { easeInQuad, easeOutQuad, easeInOutQuad, easeInCubic, easeOutCubic, easeInOutCu…

ShaderLabの基礎:Culling & Depth Testingを理解する

参考:ShaderLab syntax: Culling & Depth Testing 英語の'cull'は「選びとる・間引く」という意味だが、CGの世界では「除外する」ととらえるとわかりすい。たとえば、「バックフェース・カリング」はポリゴンの裏面を表示しない処理になる。また、オブジェ…

ShaderLabの基礎:SubshaderとColor, Material, Lightingを理解する

1つのShaderには複数のSubshaderを記述できる。Unityは上からSubshaderを見ていき、現在のマシン(GraphicCard)に適用できるシェーダがあれば、それを適用する。 1つのSubshaderの中には、1つ以上のレンダリングパス(Pass)を指定できる。また、オプシ…

Unity Shaderの基本構造

シェーダーとはレンダリングを行うプログラム。Unityには80以上のビルトイン・シェーダーが組み込まれている。 自分でシェーダーを書く場合の基礎知識をまとめる。Unity Manual/Shaders Overview Shader全体はShderLabでラップされる。基本構造は次のとおり…

ShaderLab:Propertiesの種類

Properties{}ブロックの中に記述するPropertyは次の種類がある。 Float Range (Range):スライダで範囲指定 Color(Color):RGBAの4次元配列。各値は0~1 Texuture2D(2D):テクスチャ Rectangle(Rect): Cubemap(Cube):Cubemap Float(Float):不動小数点数 Ve…

Marmoset Skyshopを使う

Mamoset/SkyshopはUnity上でHDRIを利用できるライブラリ。クオリティの高い表現は定評がある。Tutorial: Introduction to Skyshop | Marmosetを参考に、Marmoset/Skyshopを触ってみる。まず当然のことだがSkyshopを購入し、unitypackageを読み込む必要がある…

実行の順番:OnEnable, Awake, OnLevelWasLoaded, Start

Unityのスクリプト内で初期化を行う関数はいくつかある。ひとつのスクリプトの中で実行される順番は次の通りらしい。(出典はこれ) Awake OnEnable OnLevelWasLoaded Start しかし、スクリプトを無効にした場合(Script.enabled=false)は、次の通り Awake …

オブジェクトの一部をマスクする

Unityで、GameObjectの一部にマスクをかけるには、DepthMaskを使う。 参考:Unity - Manual: ShaderLab syntax: SubShader Tags 1. Maskとなるオブジェクトの設定 1-1. 新規シェーダを作成。Maskシェーダのスクリプト(下記)を記述する。 Maskオブジェクト…

KINET SDKを使う その2・スクリプト解析編

KINECT SDKを使う その1・環境設定編 - Unityな日々(Unity Geek)の続きKinectInterop.cs Kinectとのインターフェースを司どる最下層のスクリプト。public interfrace KinectInterface :Kinectとのインターフェース定義。実装はKinectSensor.csで定義され…

Meshの三角ポリゴンを反転する

http://wiki.unity3d.com/index.php?title=ReverseNormals http://forum.unity3d.com/threads/101018-How-do-I-get-the-normal-of-each-triangle-in-meshインポートした3DモデルのMeshを次のスクリプトで調べてみた。 print ("normals="+normals.Length+" t…

ベジェ曲線にそってオブジェクトを動かす

参考:Bezier Curve Unityは標準ではベジェ曲線を扱うクラスはない。そこで、デベロッパーネットワークの投稿にあったベジェ曲線のクラスを使ってみた。1.ベジェ曲線のクラス P0〜P3は制御点、関数GetPointAtTime( float t )で、曲線上の座標を取得できる…

ポリゴン・メッシュを裏返す

参考:ReverseNormals - Unify Community Wikiモデルのポリゴン・メッシュの一部が裏返っている場合の修正。下の例は、水平面で上向きに揃える。 // ReverseMesh (Flip Mesh) // First Version 2015/06/02 by A.Y.@XOOMS // Last Update 2015/06/02 by A.Y.@…

高速化:静的型付け

高速化の基本は、静的型付け。多くの場合は、Unityが自動的に型を決めてくれる。例えば、 var foo = 5;とすれば、fooはInteger型になる。もしfooをfloat型として扱いたい場合は、期待した計算ができない。 var sum2 = 0;// 自動的にInteger型になる sum2 += …

XmlDocument()でXMLをパースする その2

XmlDocumentを使ったXMLパース方法の続き。Unity Noobs: XML - Loading data from a xml file.のスクリプトが良い参考になるので、これを解読してみる。サンプルのXMLは次。 <levels> <level> <name>Level 1 (xml)</name> <tutorial>Try comes close to all four objects. (xml)</tutorial> <object name="Cube"> Hi, I'm a cube! (</object></level></levels>…

XmlDocument()でXMLをパースする その1

以前、XMLParserを使ってXMLをパースする記事を書いたが(XMLParserを使う その1、XMLParserを使う その2)、テキストやアトリビュートの取り出し方が今ひとつわからなかった。そこで、別の方法---というよりこちらの方が正当なやり方かもしれないが---、.…

XMLParserを使う その2

XMLParserについての続き。(「その1」はこちら)。XMLNodeクラスには3つのメソッドが定義されている。 class XMLNode extends Boo.Lang.Hash{ function GetNodeList(path:String){ return GetObject(path) as XMLNodeList; } function GetNode(path:Strin…

XMLParserを使う その1

Unity Scriptsの[Download UnityScript XML Parser:title=Unityscript XML Parserへのリンク]をクリックし、ZIPをダウンロードする。 解凍すると3つのjsスクリプトファイルができる。 これらをUnityのプロジェクトビューにドラッグ&ドロップ パースするス…