Unityな日々(Unity Geek)

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

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

XMLファイル読み込みのサンプルスクリプト

以前、XmlDocumentクラスを使ってXMLを読み込み、パースする方法について書いた。 XmlDocument()でXMLをパースする その1 - Unityな日々(Unity Geek) XmlDocument()でXMLをパースする その2 - Unityな日々(Unity Geek) が、XMLファイルの読み込み&パ…

Unity-C#で数値を扱うクラス

Unity-C#で数値を扱う場合、あまり考えることなく整数だとint、浮動小数点だとfloatをつい使ってしまうが、扱える範囲やサイズに応じていくつかの変数型がある。メモリサイズや速度をギリギリとつめたいときや、逆に大きな数値を扱う場合は、型の最適化を忘…

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

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

InputFieldにテキストを設定する際の注意点

Create-UI-InputFieldでInputFieldを作成すると、'InputField'オブジェクトの下に、PlaceholderとTextという名前の2つの'Text'オブジェクトが生成される。 Placeholder, Textの2つの'Text'オブジェクトは、作成時点で親のInputFieldオブジェクトにひもづけ…

iTweenの参考資料

スクリプトでアニメーションを行う定番ライブラリが、iTween。Flash(Action Script)ライク名表記で多彩なアニメーションを実装できる。 iTween for Unity by Bob Berkebile (pixelplacement)itween.pixelplacement.com ただ、iTweenの表記方法は結構忘れや…

Unity5のプロジェクトをUnity4.6で開く

Unity5で作成したプロジェクトを4.6で開きたい場合、次のように設定する。 UnityメニューのEdit/Project Settings/Editorを開き、 vertion controlのmodeを「Visible Meta Files」にする Asset Serializationのmodeを「Force Text」にする をおこなってプロ…

iOS用のレスポンシブなUIをつくる

iOSデバイスにはさまざまな解像度、アスペクト比があり、それぞれに適切なUIとなるような工夫がいる。 参考: Canvas(uGUI)の基本レイアウト - Unityな日々(Unity Geek)unitygeek.hatenablog.com 実現したいUI:トリミングとストレッチ たとえば、次のよう…

iOSアプリの作成手順

UnityからiOSアプリを書き出す手順についてのメモ。 iOSアプリ開発の前提として、App IDやプロビジョニングファイルといった情報を取得・設定しておく必要がある。これらについては次の記事を参考に。 iOS App開発:.p12ファイルとProvisioning Profileの作…

Unity5.1でOculus Riftを使う

Unity4.6でOculusRiftを使う場合は、ライブラリをインポートする必要があった。(ライブラリは4.6.3以降で利用可能)Oculus Riftの導入(DK2) - Unityな日々(Unity Geek) Unity5.1以降では、OculusなどのVRデバイスの標準で対応している。 UnityとOculusを…

Unity5でCharacterControllerを使う

方法1:CharacterControllerクラス(コンポーネント)を使う キャラクターとして動かすGameObjectを作る MainCameraを同GameObjectの子にする 同GameObjectに、Physics-CharacterControllerをアタッチする キャラクター移動のUIクラスを作る。参考:Unity-A…

覚えておくと便利な小技(Tips)

Unityの「ビギナーTips」の中に、結構便利そうなもの(で、知らなかったもの)があったのでメモ。 Snap Ctrl(Macはコマンド)キーを押しながら、移動、拡大・縮小、回転をおこなうと、一定の増分ごとに「スナップ」されて移動、拡大・縮小、回転を行える。 …

Asset Storeのダウンロードフォルダを変更する

AssetStoreからたくさんのアセットをダウンロードすると、いつの間にかCドライブがいっぱいになってしまう。僕の場合、もともとCドライブに空きが少ないので危険な状態になってしまっていた。 Asset Storeで購入したアセットの保存先を変更しようと思ったの…

Oculus Riftの導入(DK2)

Oculus Riftは初代DK1から使っているが、DK2も出てSDKもどんどんアップデートされている。ので、このあたりでUnity導入時の覚書を残しておくことにした。 OculusのDeveloperページ。"Oculus PC SDK"をクリック(この次元では、0.5.0.1 betaが最新だった)。 …

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

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

C#からJavascriptのクラスを呼びだせない時

C#からJavascriptのクラスは、通常のC#クラスと同じように呼び出せる。たとえば、 [SerializeField]protected FPSInputControllerREI fpsInputController; //Javascript Class ところが、これでは「該当クラスがない」というエラーが出る。 Assets/Scripts/R…

角度指定と外部呼出しに関するベンチマーク

Unityでは、角度は、オイラー角とクォータニオンの2つの方法で扱える。また、回転を設定する際、角度の絶対値と、Rotate()で相対角変化を与える方法がある。いったいどれがもっとも効率的、すなわち高速なのだろうか? また、あるオブジェクトのクラスから…

uGUIのテキストにブラーがかかってしまう問題

uGUI(Canvas UIシステム)のTextUI要素にブラーがかかってしまう問題は、既知のバグのようだ。 現時点では、対応策はピクセル解像度の大きなテキストを作り、Scaleを小さくして縮小する、という手しかないようだ。 Text UI要素のインスペクタは次のような感…

uGUI: スクリプトからUIのパラメータを変更する

uGUIへユーザが操作した際にメソッドを呼び出すのとは逆に、スクリプトからUIの状態やパラメータを変更したい場合もある。代表的な例を下にあげる。 テキスト uGUIのテキストを変更するには、テキストGameObjectのTextコンポーネントを取得し、このText.text…

スクリプトのテンプレートを追加する

スクリプトを新規作成する際に、独自のテンプレートを使いたいことがあるとおもう。 その場合は、Unityのインスールフォルダ/Editor/Data/Resources/ScriptTemplates/の下にある、 80-Javascript-NewBehaviourScript.js.txt 81-C# Script-NewBehaviourScript…

Materialを比較する

あるオブジェクトにアサインされている特定のマテリアルを別のマテリアルに置き換えたかったので、次のようなコードを書いた。 [SerializeField]protected Renderer rend; //Target Renderer [SerializeField]protected Material matFrom; //Change from thi…

"9x9 Slice" Spriteを作成する

UI用のイメージを設定する場合、イメージを拡大しても周囲のラインは画像が荒れるので拡大したくない。これを実現するのが、「9x9スライス」というテクニック。要は、4つの角はスケーリングせず、中間の画像のみ拡大するという手法だ。 これをUnityで実現す…

CanvasUI(uGUI)要素にアニメーションを設定する

CanvasUI(uGUI)のインタラクティブ要素(Button, Toggle, Sliderなど)は、「操作状態」に応じて「外観」を変更できる。 操作状態 各UI要素の状態には Normal Highlighted Pressed Disabled の4通りがある。'Highlighted'はフォーカスがあたった状態で、マ…

Canvas UI(uGUI)のイベント処理

CanvasUI(uGUI)システムでは、ユーザの操作をEventで授受する。たとえばButton要素の場合、インスペクタのButtonスクリプト・ブロックの一番下に、OnClick()という項目がある。ここにOnClick()イベントを受け取る関数と渡す引数を設定する。 タブの"+"をクリ…

Canvas(uGUI)の基本レイアウト

Unity4.6から導入された新GUI、"uGUI"。従来のGUIより柔軟な設定ができるuGUIの導入についてまとめた。 CanvasUI要素をシーンに配置する ヒエラルキビュー、Create-UIで、CanvasのUI要素が表示される。CanvasUIは、まず土台となるCanvasをシーンに配置し、そ…

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

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

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

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

レンダリングの品質設定

レンダリングの品質設定は Edit-Project Settings-Quality でおこなう。 各パラメータを個別に設定もできるが、Levelsに"Fastest"~"Fantastic"までのプリセットがあり、それを選択することもできる。また、カスタム品質レベルを登録することも可能。 個人的…

覚えておくと作業がはかどるショートカット

シーンビューの操作と重複するが、シーン編集時に作業がはかどるUnity標準のショートカットキーをまとめた。 選択モード ショートカット 操作 q ハンドモード w オブジェクトの移動モード e オブジェクトの回転モード r オブジェクトの拡大・縮小モード t 矩…

C#のプロパティを理解する

プロパティの使用 (C# プログラミング ガイド) C#にかぎらずオブジェクト指向言語のクラス内の変数を外部から読み出したり、変数に値を設定する場合は、get/setメソッドを使うのが基本。しかし、変数ごとにいちいちget/setメソッドを設定するのは煩雑になっ…

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

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