Unityな日々(Unity Geek)

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

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

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

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

インスペクタで、カスタムクラスの中にある変数にアクセスする

わかりにくいタイトルだが、具体的な例で説明する。下のように、メインであるクラス(下の例では、Physics)のPublic変数にカスタム・クラス(SubData) を指定しているとする。、 using UnityEngine; using System.Collections; public class SubData { publi…

コンポーネントが存在するかどうかを見る

GameObjectに対し、あるコンポーネントを持っているかを調べ、なければ足す(あるいは、処理を変える)場合の手順例えば、あるGameObjectに対し、rigidbodyコンポーネントがなければ新たに加え、rigidbodyコンポーネントを返す例。 if(rigidbody == null){ r…

timeScaleでアニメーション速度を変更する

Time.timeScaleでFixedUpdate()の時間間隔を調整できる。Time.timeScale=1.0 で、デフォルトの速度(時間間隔) Time.timeScale=0.5で、速度を半分(時間間隔を2倍)にする Time.timeScale=0.0は、速度ゼロ、すなわち、FixedUpdate()を停止する 具体的な事…

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

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

Mouse入力 Event, OnMouse, Input

Mouse入力(および、タッチセンサー入力)を受け取るには、次の3つの方法がある。1)Event キー入力とMouse操作が発生した時に発信されるEventを受け取る。 ただし、Eventは、OnGUIの中のみで受け取れる(ようだ) using UnityEngine; using System.Collec…

LineRendererを使う

例えば、空間上に引出線を描画する場合、線に相当するオブジェクトを置くよりも、LineRendererを使ったほうがスマート。1)Scriptの例 下の例は、Transformの配列(transforms)に格納した座標間にラインを描画するもの。 using UnityEngine; using System.Co…

3Dプロジェクタを設定する

Unityから3Dモニタ/プロジェクタに出力する際の設定覚書。 ちなみにサンプルの環境は、GeForce680のHDMIポートに、SANYO PDG-DWL2500(Panasonic CT230)とMitsubishi RDT231WMがつながっている状態である。DWL2500は解像度1280X800の3Dプロジェクタ、RDT231W…

Prefabのインスタンスを生成する

Project内に次のPrefab (BallPrefab)があるとする。 このPrefabをシーン内に生成するには、Instantiate()を使う。 たとえば次のScriptを作り、シーン内のGameObjectにアタッチ。 using UnityEngine; using System.Collections; public class MainScript : Mo…

Textureの設定

オブジェクトへのTextureの貼付は 1)AssetにTexure画像を読み込み、 2) その画像をMaterialに貼り、 3) そのMaterialをObjectに適用する と言う手順になる。この時、Texture画像の設定によってレンダリング後の見え方が違う。Assetで画像データを選択した状…

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…

書式付で数値を文字に変換する

数値を文字に変換するのは、toString()関数だが、同時に書式も指定できる。 たとえば、小数点以下第一位まで表示した文字は、数値変数.toString("#.0")とする。他にも多くの書式設定がある。 カスタム数値書式指定文字列 なお、toString()は、日付時刻の書式…

GUIがエラーになる時(クラス名のコンフリクト)

GUIのメソッドがない、というエラーで悩まされた。 スクリプトは間違いがないので、システムがおかしくなったかとも疑ったが、理由は簡単だった。 別途、'GUI'という名前のC#クラスを作ったため、コンフリクトを起こしていたのだ。 GUIファイルを削除(リネ…

Static Classを使う

Static Classを使う場合は次のように記述javascript #pragma strict static class Ball { function getColor():Color{ return new Color(0.0F,1.0F,1.0F,0.3F); } } c# using UnityEngine; using System.Collections; public static class Ball { //関数名 p…

キー入力のメモ 'GetKey'と'GetKeyDown/Up'の違い

キー入力は基本だが、「あるキーが押された」「離された」というイベントと、「押されているか」「押されていないか」という状態は区別されている。1)イベント(一回限り)キーが押された if (Input.GetKeyDown("a")) { // aが押された!(押され続けは検知…

javascriptとC#の違い

Unityでスクリプトを書いていると、javascriptとC#の表記方法の違いに混乱することがある。似ているところと違うところがあるから、ややこしい。 たとえば、ゲームは初心者にやさしく: Unity C#とJavascriptの主な違いが参考になる。

C#を使う際の注意事項

Unity Script Reference – Overview: Writing Scripts in C#にまとめられている。 すべてのクラス(静的クラスを除く)はMonoBehaviourを継承し、クラス名とファイル名は一致していなければならない。 コルーチンはIEnumerator型の戻り値を持たねばならない…

覚えておくと便利なMathf関数

UnityのMathf関数には、通常のMath関数以外に3Dインタラクティブ用に特化された関数がある。次は知っておくと効率化できそう。 関数名(引数) 機能 Clamp(,min,max) 最大・最小値でカット Pow(x,y) xのy乗 Ceil(x) 小数点切り上げ(floatのまま) CeilToIn…