【Unity】インスペクタに編集不可のパラメータを表示してみた編集不可のパラメータをインスペクターに表示したいという機会があり、PropertyAttribute、PropertyDrawerを継承して処理を書くやり方があったので試しにやってみました。v10.14.3実装NonEditableAttribute.csというスクリプトを作成して、PropertyAttributeとPropertyDrawerクラスを継承したクラスを定義しました。(ReadOnlyAttributeという名前にしたかったのですが、Unity側に既にあった為、被らない名前にしました。UNITY_EDITORで囲う形にするとEditorフォルダにいれなくても使えた為、こういう形にしてみました。};}インスペクタ表示はこんな感じに!ListのSizeは編集できてしまうようで、ここも編集出来ない形にできると良かったのですが・・・。まとめ値を確認したいだけの時に、編集不可にして表示するととても便利でした。他にも色々できそうなのでインスペクタ表示についても色々調べていこうと思います。v10.14.3実装AnimatorのruntimeAnimatorControllerをUnityEditor.Animations.AnimatorControllerでキャストしてやると、情報が取れるようです。);}}}}デバッグ出力した内容を確認してみると、意図した情報が取れていました。この処理とUnityちゃんを使ってUIからlayerとstateを選択できるものを作ってみました。);}}実行したものがこちらです。まとめ今回使った、UnityEditor.Animations.AnimatorControllerはエディタでしか使えませんが、layer、state名を調べたり手動で書いてアニメーション切り替えをしたりしなくてもいいのはとても便利でした。【Unity】Handheld.Vibrateを使ってみたスマホのバイブレーション機能がUnityに用意されていたので、試しに使ってみました。調べてみると呼び出し自体はすごくシンプルで、Handheld.Vibrate関数を呼び出すだけでした。(){Handheld.Vibrate();}}とてもシンプルですね!ただ、用意されている関数はこれだけの為、強弱や回数、振動しているかどうかというのは取得できないようです。他サイトで調べてみると、自分でネイティブ実装すればできるようですね。コールバック受け取りできるような形にしたクラスを作ってみました!Vibrationのstatic関数にアクセスしたタイミングで破棄されないGameObjectを生成し振動処理を行う形になっています。);}}1回の振動を計測したら、約0.5秒くらいだったので、再生時間を0.5秒として扱ってみました。【Unity】logEnabledを使ってLog出力を無効化してみた開発をしている時だけ、ログ出力をさせたい!という事は多々あるかなと思いますが、その際に手軽にできるものとして、logEnabledをfalseにする方法があります。これはランタイムで設定できる為、ログ出力がされないだけで、関数に書いている処理は残っているのではないかな?と思ったので今回はそれを検証してみました。v10.14.3実装ボタンを押すと、Log関数内で変数をインクリメントする関数を呼ぶという処理を作ってみました。スクリプトはこんな感じに。m_count;}}実行して、ボタンを押した際のキャプチャがこちらボタンを押すたびに、Countが増えログにも出力がされています。次にStart関数内でlogEnabledをfalse設定にして試したものがこちらです。m_count;}}実行して、ボタンを押してみたキャプチャがこちらです。ログ出力はされなくなりましたが、Count表示の数は増えていきました。Debug.Log関数内に記載している処理は実行されてしまうというのがわかります。ログ出力にこういう形で処理を書く人は少ないと思いますが、処理自体が実行される為、ボトルネックになる可能性はあります。そこでConditionalを使ってみたらどうかなと思い、下記スクリプトを追加してみました。SymbolsにENABLE_LOGGINGを記述するとLog出力されます。){UnityEngine.Debug.Log(message);}}実行して、ボタンを押してみたキャプチャがこちらです。ログ出力もCountUp関数も実行されていないことがわかります。まとめログ出力を手っ取り早く無くしたい場合は、logEnabledをfalseにすれば簡単にできてしまうのでとても便利ですね。【Unity】Unity複数起動をメニューからできるようにしてみたUnityを複数起動したい事が多々あり、以前はターミナルでコマンドを打って起動していましたが、面倒になったのでFileメニューに項目を追加してそこから起動できるようにしてみました。v10.14.3準備まず最初にFileメニューに項目を追加する為に、Editorフォルダを作りそのフォルダ内にCustomMenuFile.csスクリプトを作成しました。使用しているEditorのパスを取得する為に、InternalEditorUtility.GetEngineAssemblyPath関数を使って取得しています。path;}}まとめメニュー追加も簡単にでき、複数起動もショートカットキーで簡単に立ち上げれるようになってとても便利になりました。【Unity】WebCamTextureを使ってみたUnityだけでカメラアプリっぽいものが作れないかなと思って調べた所、WebCamTextureというものが用意されたいたので試しに使ってみた内容を書いていこうと思います。環境Unity2018.3.0f2XCode10.1準備iPhoneでカメラアクセスをする為には、Info.plistにNSCameraUsageDescriptionを追記する必要があったので、下記スクリプトを用意してAssets/Scripts/Editorフォルダ内に配置しておきました。);}}}実装1WebCamTextureはTextureクラスを継承している為、UGUIのRawImageのtexture変数に設定すればそのまま表示されるかな?と思ったので、RawImageを使ってみました。それに加えてWebCamTextureに用意されている変数も表示してみました。Hierarchyはこんな感じに。スクリプトはこんな感じに。sb.ToString();}}実際にiPhoneに転送して動かしてみたのものがこちらです。RawImageもWebCamTexture情報も表示する事ができました!実装2先程、実装したものはRawImageに表示された向きが意図した向きではありませんでした。調べてみるとWebCamTexture情報を使って表示向きを調整する必要がありそうという事で、表示向きを調整しつつ全画面表示にしてみました。size;}}実行したものがこちらです。全画面表示で向きも意図した向きになりました。まとめWebCamTextureを使用すればフロント、バックカメラで映ったもの簡単に表示することができました!映っているものをカメラロールに保存したい場合はネイティブコードを書かないと駄目なようですが、単に表示するだけであれば数時間でできたしまったのでとても便利だと思います。);m_texture.Apply();}}}実行してみたものがこちらです。点がまばらで想定したものと全然違いました・・・。塗りつぶす領域を広くしてみればいいのかな?という事で、幅と高さを設定できる形にしてみたものがこちら!さっきより塗りつぶす領域が広くなった分、見えやすくなりましたが、線のような感じにはなっていません・・・。点と点を繋ぐ形で塗りつぶせばそれっぽくなるだろう!という事で、マウス座標を保存しておき、塗りつぶす領域を前回のマウス座標から今回のマウス座標までを塗っていく形にしてみました。Input.mousePosition;}}今度は、思っていた通りになりました!!まとめ実際にやってみると、想定と違った結果になったりもしましたが、最終的には線を描く事ができて、自分でやってみる事の大切に改めてきづけました!今回は指定した色を塗っていく形でしたが、テクスチャを元に色を塗っていく形にすればペイントツールのブラシ機能みたいなものも作れるかなと思うので、別の機会にチャレンジしてみたいと思います。【Unity】コンパスを作ってみたコンパスアプリを作ってみようと思って調べてみると、UnityにCompassインターフェースというもがあったので、今回はそれを使った内容を書いてみました。コンパスを有効または無効にするために使用します。Input.compass.trueHeadingプロパティーに有効な値を含ませたい場合、Input.location.Start()を呼び出してロケーションの更新を有効にする必要があります。あるので、とりあえず画面に情報を出すだけのプログラムを書いてみました。);}}iPhoneに転送した画面がこちらです。端末を傾けると数字が変化していました。動作してそうです!次にUGUIのTextを使って東西南北と角度を表示してみました。※角度表示は回転してほしくない為、Rootオブジェクトには含めないtrueHeadingの値を使って、Rootオブジェクトを回転させる処理がこちらです。"°";}}端末実行したものがこちらです。実際に動かしてみると表示がカクついていたので、targetFrameRateを60に設定し、見た目も調整して最終的にはこんな感じにしてみました。まとめ既にUnityで提供されているインターフェースがあり、ネイティブコードを書かなくても作ることができました。29プロフィール東京でフリーランスエンジニアとして活動中。Unityを使ってアプリ開発をしています。開発に関連する内容をブログに書いていこうと思います。