うにてぃブログ

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

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

【Unity】テキストファイルをロードする

Unity 内部でテキストファイルを扱う場合は TextAsset クラスを利用してロードを行う 以下にロードするサンプルコードを示す // Resources 以下からロード var text = Resources.Load<TextAsset>("Data/Hoge"); // Editor 内部でロード var text = AssetDatabase.LoadAs</textasset>…

【Unity】RectTransform の Prefab が UI プレハブモード で開始されない

プレハブモードでのプレハブの編集 - Unity マニュアル UI プレハブには UI Environment 設定を使用します。UI プレハブは、通常の Transform コンポーネントではなく、ルート上に Rect Transform コンポーネントを持つプレハブです。 “UI 以外” のプレハブ…

【Unity】uGUI の Image を利用して背景をぼかす

iPhone で 通知センターを利用したときに背景がぼけるようなものを作りたかったので、GrabPass を利用してできないかやってみた 描画順が手前のものに対してちゃんとぼかしっぽいことができてるのが確認できる 使うには Material の Shader をこれにして Ima…

【Unity】ShaderLab: GrabPass を使ってみる

GrabPass 描画する際に、現在の画面のテクスチャを取得することができるパス 例 例えばこういったオブジェクト配置の際に D で GrabPass を利用すると以下のようなテクスチャが取得できる テクスチャ自体はこれですが、現在の描画位置に合わせて変換した座標…

【Unity】TreeView で TreeViewItem をドラッグ&ドロップするサンプル

TreeView でドラッグ & ドロップをする処理が分からなかったので、調べて github にサンプルコードを上げました もし実装する際によければ参考にしてください github.com ドラッグ & ドロップ に必要なメソッド 以下のメソッドが override されていれば ドラ…

【Unity】UnityEditor で使えるアセットのお気に入りなどのマルチ便利ツール

アセットのお気に入り登録や Hierarchy のログなど、あると便利な機能を詰め込んだツールを作成しました 機能はタブを変えることで切り替えることができるようになっており、検索窓があるので各機能で検索が可能です 導入はこちらから github.com アセット …

【Unity】HorizontalLayoutGroup や VerticalLayoutGroup の各パラメータについて

パラメータがどういった影響を与えるのか分からなくなることがあるので、こちらにまとめる ※ Unity2020.3.14f1 での検証のため パラメータや挙動が異なる可能性がある Padding 上下左右の余白部分のサイズ 0 5 20 Spacing 並べる要素間のサイズ 0 10 50 Chil…

【Unity】対象のコンポーネントを利用している Prefab や Scene を探すツール

このコンポーネント使ってる Prefab どれだっけみたいなことがあるときに利用できるツールを作成しました 使い方 Tools/Find Use Component から 開くことができます Search Type から探したいコンポーネントクラスを選択して、「Find」を押すことで Project…

【Unity】TextMeshPro の TMP SubMeshUI ってなんだ?

TextMeshPro を利用してると TMP SubMeshUI が生成されることがある これは、設定したフォントにフォールバックフォントが呼び出された際に生成されるオブジェクトで 例えば あaaあ とTextMeshPro に設定すると、 フォールバックフォントの部分だけ SubMesh …

【Unity】uGUI でないオブジェクトのタップ等のイベントを監視する

以前Graphic を利用してタップした座標から Ray を飛ばしてタップしたオブジェクトを取得する方法を記述した。 【Unity】uGUI を利用してタップした位置のオブジェクトを取得する - うにてぃブログ しかし、これだと様々な uGUI Event (PointerDown や Point…

【Unity】時間を計測する Scope

時間を計測する際に、毎回インスタンス作成して、Start, Stop するのが面倒だったので Scope を作成してみました。 using System; using System.Diagnostics; using Debug = UnityEngine.Debug; public class StopWatchScope : IDisposable { private Stopwa…

【Unity】Shader コードの複数パスでパラメータを共有する

複数パスの Shader で各パスごとに全部記述していくと以下のようになる Shader "Custom/Outline" { Properties { _Stencil ("Stencil", int) = 10 } SubShader { Tags { "RenderType"="Opaque" } Pass { Stencil { Ref [_Stencil] Comp notequal } ZWrite Of…

【Unity】2つの単位ベクトル間の角度を取得する

単位ベクトルから、角度を取得するメソッドが欲しくて作成すると以下になる using UnityEngine; public class Utility { /// <summary> /// 2つの単位ベクトル間の角度を取得 /// </summary> public static float SignedAngle(Vector2 a, Vector2 b) { // dot(a, b) = cos(b - a…

【Unity】Core/Text/TextHandle.cs(36,16): error CS0246: The type or namespace name 'FontAsset' could not be found (are you missing a using directive or an assembly reference?)

Unity 2021.2.0b1 で UIElements を入れるために PackageManager で UI Toolkit を導入したところ大量のエラーが発生 調べて見ると、2021.2 では Built-in にすでに UI Elements が含まれているため PackageManager で導入する必要は無いということでした つ…

【Unity】URP で PostProcess を利用する

URP で PostEffect を利用するには ForwardRendererData を作成して UniversalRenderPipeline に登録する必要がある この手順を記述する ScriptableRendererFeature の作成 ScriptableRendererFeature は レンダラーにレンダリングパスを追加するためのクラ…

【Unity】スクリプトが MonoBehaviour を継承しているクラスかどうかを判定する

using UnityEditor; using UnityEngine; public static class AssetUtility { /// <summary> /// スクリプトが MonoBehaviour を継承しているかどうか /// </summary> /// <param name="path"></param> /// <returns></returns> public static bool IsMonoBehaviour(string path) { var assetType = AssetDatabase.GetMainAsset…

【C#】登録したすべてのメソッドが true もしくは false を返すか判定する

C#

複数パラメータを監視して、制御したい際に public 変数にしていると管理が大変なので Func を登録して戻り値で判定できるようにしてみました クラス using System; using System.Collections.Generic; /// <summary> /// Function を登録して、それが全部満たすか、</summary>…

【Unity】RectTransform の値を Inspector から変更できなくする

Content Size Fitter や LayoutGroup などを使っていると、Inspector の値を変更できなくなる これを実現するためには、DrivenRectTransformTracker を利用する DrivenRectTransformTracker は 登録した RectTransform の値を Inspector で変更できなくし ス…

【Unity】uGUI で最大幅を固定した動的UIの作成

最大幅を固定した UI を作成するのが面倒だったので 今後作成する必要があったときのために、設定をここにメモしておく オブジェクトの構成 各オブジェクトのコンポーネント MaxHorizontalSize RectTransform の Width に最大幅を入力 Root Text サンプル 実…

【Unity】SceneView を キーボード入力で移動する

SceneView 上で細かい移動をしようとしてもできないことがあったので、 WASD で移動できるような拡張を作成してみました サンプル 実際に SceneView上でこのように動きます ワールド座標ではなく、ローカル座標から前後左右に動きます github github.com

【Unity】SceneView で キーボード入力を検知する

Editorツール系では、Input.GetKeyDown を利用してキーボードの入力を検知できないので Event.current を利用して SceneView 上でのキーボードの入力を検知する [InitializeOnLoad] internal static class SceneViewInput { static SceneViewInput() { Scene…

【Unity】UnityWebRequest で Json パラメータを送信する

public static class UnityWebRequestExtension { /// <summary> /// Json を追加 /// </summary> public static void AddJson(this UnityEngine.Networking.UnityWebRequest self, string json) { var postData = System.Text.Encoding.UTF8.GetBytes(json); self.uploadHandle…

【Unity】Gizmo を描画する際に回転させる

Gizmos.DrawCube を利用して Cube を描画した際に回転ができないため、Rotation 0 じゃない場合は正しく描画できない private void OnDrawGizmos() { Gizmos.DrawWireCube(transform.position, Vector3.one); } そのため、Gizmos.matrix に適切な行列を指定…

【Unity】強制的にスクリプトのコンパイルを行う

static インスタンスの開放などで、スクリプトのコンパイルを行いたいときに コードを少しいじって、コンパイルを走らせていましたが、CompilationPipeline.RequestScriptCompilation を呼び出すことで非同期コンパイルを走らせることができるようでした // …

【Unity】EditorSkin を Pro やデフォルトに変更する

昔は Preference から Skin を変更できた気がするのですが、Unity2020.3 には無いようだったので 内部のメソッドを呼び出して、Skin を変更できるようにしてみました スキンの変更にはコンパイルが必要なので即時には変わりませんが、これを利用することでス…

【Unity】PrefabMode でスクリプトからオブジェクトを選択状態にする

Hierarchy にあるオブジェクトを選択状態にするには GameObject.Find でパスからオブジェクトを探して、Selection.activeGameObjectに代入するだけでできる Selection.activeGameObject = GameObject.Find(path); しかし、PrefabMode の場合 GameObject.Find…

【C#】リフレクションで IList のインスタンスを作成する

private object CreateListInstance<T>(T[] values) { var elementType = typeof(T); var listType = typeof(List<>).MakeGenericType(elementType); var list = (IList) Activator.CreateInstance(listType); for (var i = 0; i < values.Length; i++) list.Ad</t>…

【C#】リフレクションで Array のインスタンスを作成する

private object CreateArrayInstance<T>(T[] values) { var elementType = typeof(T); var array = (Array) Activator.CreateInstance(elementType, values.Length); for (var i = 0; i < values.Length; i++) array.SetValue(values[i], i); return array; }</t>

【Unity】OnGUI の描画処理を終了させる

Listの要素を増減させる Editor 拡張を作成した際に 下記のようにスクリプトを書くと、消したタイミングでエラーが発生する public class EditorSampleWindow : EditorWindow { private List<int> _intList = new List<int>() { 1, 2, 3, 4, 5 }; private void OnGUI()</int></int>…

【Unity】同じフレームで RectTransform を再構築する処理

ContentSizeFitter 等を利用した RectTransform では サイズを確定させるためには 1フレーム待つ必要があります もし、待ちを無くす場合は以下のどちらかのメソッドを呼び出すことで 1フレームの待ちをせずサイズを確定させることができます Canvas.ForceUpd…