うにてぃブログ

主にUnityとC#に関する記事を書いていきます

2020-01-01から1ヶ月間の記事一覧

【Unity】Scene View に 選択してないオブジェクトの Collider を表示する

あらまし Unity で Collider を設定している際に選択しているオブジェクトの Collider しか表示されない 今回はすべて Mesh が見えているが Mesh が無くても Collider をセットすることもあり 個人的には下図のように見えてほしい そのため、選択していない…

【Unity】uGUI の Text をスクロールさせる

あらまし 電光掲示板を見ていて uGUI の Text も文字スクロールができるのではと思い立って作成してみる テキストを左に動かしてみる 今回 Text の頂点を動かすことで、文字スクロールを実装するため IMeshModifier を継承したクラスを利用する IMeshModifie…

【Unity】VideoPlayer で動画をストリーミング再生する

あらまし Unity 5.6 以降動画再生用のライブラリとして VideoPlayer が導入された ローカルファイルから動画再生ができることは知っていたが、 ストリーミング再生ができるか公式に記述が無かったため調査してみた ※ 英語なので見逃している可能性がある Vid…

【Unity】GUID を変更せずにファイルを置き換える拡張

あらまし Unity で Asset (例えば画像ファイル) を入れ替える際に Finder や Explorer から ドラッグアンドドロップ を行いファイルを入れ替えることがあると思う その際にファイル名が **** 1 になってしまい、前のファイルを消して 再度ファイル名を変更し…

まとめ

ライブラリ github.com デバッグツール Easing関数 Missing Script 検索ツール モデル撮影ツール Module化ライブラリ Unity上で使える Git Tool 単純なメッシュを作成するツール カメラ一覧を表示 アセットのディレクトリを移動する テクスチャ生成ツール 対…

【Unity】Hierarchy Window を拡張する

Hierarchy Window を拡張するには EditorApplication.hierarchyWindowItemOnGUI を利用する 拡張処理を記述しないで、最低限の処理のみだと以下のコードになる using UnityEditor; using UnityEngine; public class HierarchyExtension { [InitializeOnLoadM…

【Unity】UnityEditor で利用できる Field 一覧

Editor拡張作成時に利用できる Field のまとめ 説明が必要そうなものには説明を追記します EditorGUILayout > EditorGUI > GUILayout で無いもの順に記述しています GUILayout GUILayout.FlexibleSpace GUILayout.Space GUILayout.SelectionGrid GUILayout.B…

【Unity】uGUI の Text に改行されないスペースを表示させる

UnityEngine.UI.Text は英語をいい感じで表示するためなのか、 Rect の領域からはみ出る場合 スペースがあるとその位置で改行されてしまう 日本語では基本的にスペースを利用することが少ないが、 「鹿目 まどか」や「暁美ほむら」など人物名を表示する場合…

【Unity】Grid Shader

Shader でグリッドを表示させる方法について考える 画像を n分割する グリッドを作成する前に 画像を n分割する方法を考える 画像を分割するためには frac 関数を利用する frac 関数は「小数値の小数部分を返す」関数なので uv に 5を掛けた場合、下図のよう…

【Unity】JsonUtility の罠

JsonUtility Unity には Json データを操作するクラスとして JsonUtility がある JsonUtility は Primitive 型、Array、シリアライズ可能なクラス・構造体を Json 形式に変換できる using System; using UnityEditor; using UnityEngine; [Serializable] pub…

【Unity】EditorWindow に Unity デフォルト Window のようなヘッダーを追加する

例えば Unity の Console には下図のようにヘッダー領域があり、そこにボタンやトグルなどを表示している 今回はその表示方法について記述する ※内部的にはツールバー (toolbar) と呼ばれている Header ヘッダーを描画するのは至極簡単で EditorGUILayout.Ho…

【Unity】Unity で使えるフォルダ・ファイル選択パネル

EditorUtility.OpenFolderPanel EditorUtility.OpenFilePanel EditorUtility.OpenFilePanelWithFilters EditorUtility.SaveFolderPanel EditorUtility.SaveFilePanel EditorUtility.SaveFilePanelInProject 参考リンク folder には フルパスでもいいし、Asse…

【Unity】Splatoon で利用されているような波ゲージ を Shader を用いて作る

静止画ですがゲージの部分が波のように揺れている表現を作ってみます 波 波のような結果を出すものとして sin波とcos波 があるのでこちらを利用する Shader で利用する場合はこれに _Time を食わせることで -1 ~ 1 の間を行き来させることができる 左右に動…

【Unity】Unlit Shader でも 影出したい!

Directional Light を複数置いて Culling Mask で制御するのが面倒な時などに Unlit Shader でも 光の向きを指定したい場合があります。 法線との内積の処理で指定したXYZを利用しているだけで特に特殊な処理はしていません Shader Shader "Custom/Unlit/Dir…

【Unity】続 Unity デフォルト型の Inspector拡張 ~Transform~

【Unity】Unity デフォルト型の Inspector 拡張 - うにてぃブログ 上記記事で CanEditMultipleObjects を設定時に複数の要素の更新ができない問題があったため、いっそ TransformInspector の実装部分をまるっと実装してしまうことにする 実装 Position と S…

【Unity】UnityEditor でプログレスバーを表示する

Unity でプログレスバーを操作するものは以下のものがある EditorUtility.DisplayProgressBar EditorUtility.DisplayCancelableProgressBar EditorUtility.ClearProgressBar 表示に使うのは DisplayProgressBar と DisplayCancelableProgressBar EditorUtili…

【Unity】Console Window で利用されているような Splitter を作る

Unity の Console Window では 一覧と詳細の間にあるバーを操作することでサイズを変更できるが、 機能を利用することができない コード 1から作るのは面倒だったため、Unity 内部のコードを参考に作成 VerticalSplitter クラスは載せて無いが、HorizontalSp…

【Unity】RectTransform の Rect を Scene View に描画する

UI を作成している際に親の RectTransform の Rect を見つつ作業したいが 基本的には選択しているものしか範囲がわからないので UI を作りづらい これの解決方法として、編集する RectTransform 選択時親の Rect を描画することにする RectTransform の Rect…

【Unity】GUI, GUILayout, EditorGUI, EditorGUILayout の違い

GUI や Editor の表示時に使うクラスとしてGUI, GUILayout, EditorGUI, EditorGUILayoutがあるが 名前と機能が似ててよくわからなくなるのでまとめてみる(まとめるとは言ってない) 公式リファレンスの説明 まず公式リファレンスの説明から見てみる GUI GUI…

【Unity】Unity2019.3 でも boxを利用したい

Unity 2019.3 2019.3より Unity のUIが一新されました これにともない using (new GUILayout.VerticalScope(GUI.skin.box)) { using (new GUILayout.VerticalScope(GUI.skin.box)) { using (new GUILayout.VerticalScope(GUI.skin.box)) { GUILayout.Label("…

【Unity】DefaultAsset の Inspector拡張

UnityVersion 2018.4.14f1 DefaultAsset の Inspector 作成 [CustomEditor(typeof(DefaultAsset))] を定義することで DefaultAsset のInspector拡張を行える Unity2017くらいだと Scene ファイルも DefaultAsset 扱いだった記憶があるが、現在では SceneAsse…

【Unity】SerializedProperty を用いたクラス描画手法 ~2~

だいぶ複雑になるが EditorGUILayout.PropertyField の includeChildren: true を利用せずに すべての SerializedProperty を取得し描画していくこともできる。 NextVisible を利用するのは変わらないが、SerializedPropertyType.Generic の場合は中身を更に…

【Unity】SerializedProperty を用いたクラス描画手法 ~1~

SerializedProperty の表示 通常 SerializedProperty を利用して Editor の表示を行う場合以下ように記述する。 using UnityEditor; public class SampleEditor : Editor { private SerializedProperty _sampleProp; private void OnEnable() { _sampleProp …

【Unity】CustomPropertyDrawer を利用している Type 一覧の取得

CustomPropertyDrawer を利用しているクラスは描画方法を変えたかったことがあったが 自分で取得する必要があったので、そのとき利用した方法を記述する。 CustomPropertyDrawer github.com CustomPropertyDrawer のクラスは上記のようになっており、"m_Type…

【Unity】SerializedProperty と System.Type の Array と List の判定と Type 取得

Array と List の判定 SerializedProperty のみでは Array か List どちらか知ることができますが、System.Typeを利用しないとどちらかを判定できません string も内部的には char の Array なので string のチェックをする必要があります public static boo…

【Unity】Mac で Unity の Log を tail する

Terminal で Unity のログを見るときのログファイルのディレクトリを忘れることがあるのでメモ tail -F ~/Library/Logs/Unity/Editor.log .bashrc の alias に登録しておくと便利 alias unity_log='tail -F ~/Library/Logs/Unity/Editor.log' Windows の場合…

【Unity】Type の FieldInfo を serializedObject.FindProperty で取得できるように 再帰的に取得するコード

Array や List の場合は要素のTypeを取得する必要があるためチェック処理を入れている また、System系の構造体やクラスだと無限ループすることがあったので Array や List 以外の System系は無視している ※Array や List の Path には非対応 private static …

【Unity】Editor の OnInspectorGUI の呼び出しでハマったこと

EditorWindow の拡張を行っている際に ScriptableObject の Editor を取得し、 OnInspectorGUIを呼び出した際に CustomPropertyDrawerと Foldout を利用した際にUIがおかしくなりました 本来であればこう表示されます 原因調査 公式の Editor.cs を読んでい…

【Unity】ProjectWindow を拡張してみる

ProjectWindowにアイコンなどを表示する場合は以下のデリゲートを用いる EditorApplication-projectWindowItemOnGUI - Unity スクリプトリファレンス EditorWindowを継承したくないので、InitializeOnLoadMethodを利用する スクリプト サンプルとしてguidを…

【Unity】画像の HSV 変換シェーダー

シェーダーを用いて色の加算・乗算は容易にできるがHSV変換をする場合変換用のメソッドを容易してやる必要があるため こちらにシェーダをメモ HSVのカラーシフトの式はこちらを参考にしました HSV Shader with Alpha - Unity Answers シェーダー Shader "Cus…