2021-01-01から1年間の記事一覧
Unity 内部でテキストファイルを扱う場合は TextAsset クラスを利用してロードを行う 以下にロードするサンプルコードを示す // Resources 以下からロード var text = Resources.Load<TextAsset>("Data/Hoge"); // Editor 内部でロード var text = AssetDatabase.LoadAs</textasset>…
プレハブモードでのプレハブの編集 - Unity マニュアル UI プレハブには UI Environment 設定を使用します。UI プレハブは、通常の Transform コンポーネントではなく、ルート上に Rect Transform コンポーネントを持つプレハブです。 “UI 以外” のプレハブ…
iPhone で 通知センターを利用したときに背景がぼけるようなものを作りたかったので、GrabPass を利用してできないかやってみた 描画順が手前のものに対してちゃんとぼかしっぽいことができてるのが確認できる 使うには Material の Shader をこれにして Ima…
GrabPass 描画する際に、現在の画面のテクスチャを取得することができるパス 例 例えばこういったオブジェクト配置の際に D で GrabPass を利用すると以下のようなテクスチャが取得できる テクスチャ自体はこれですが、現在の描画位置に合わせて変換した座標…
TreeView でドラッグ & ドロップをする処理が分からなかったので、調べて github にサンプルコードを上げました もし実装する際によければ参考にしてください github.com ドラッグ & ドロップ に必要なメソッド 以下のメソッドが override されていれば ドラ…
アセットのお気に入り登録や Hierarchy のログなど、あると便利な機能を詰め込んだツールを作成しました 機能はタブを変えることで切り替えることができるようになっており、検索窓があるので各機能で検索が可能です 導入はこちらから github.com アセット …
パラメータがどういった影響を与えるのか分からなくなることがあるので、こちらにまとめる ※ Unity2020.3.14f1 での検証のため パラメータや挙動が異なる可能性がある Padding 上下左右の余白部分のサイズ 0 5 20 Spacing 並べる要素間のサイズ 0 10 50 Chil…
このコンポーネント使ってる Prefab どれだっけみたいなことがあるときに利用できるツールを作成しました 使い方 Tools/Find Use Component から 開くことができます Search Type から探したいコンポーネントクラスを選択して、「Find」を押すことで Project…
TextMeshPro を利用してると TMP SubMeshUI が生成されることがある これは、設定したフォントにフォールバックフォントが呼び出された際に生成されるオブジェクトで 例えば あaaあ とTextMeshPro に設定すると、 フォールバックフォントの部分だけ SubMesh …
以前Graphic を利用してタップした座標から Ray を飛ばしてタップしたオブジェクトを取得する方法を記述した。 【Unity】uGUI を利用してタップした位置のオブジェクトを取得する - うにてぃブログ しかし、これだと様々な uGUI Event (PointerDown や Point…
時間を計測する際に、毎回インスタンス作成して、Start, Stop するのが面倒だったので Scope を作成してみました。 using System; using System.Diagnostics; using Debug = UnityEngine.Debug; public class StopWatchScope : IDisposable { private Stopwa…
複数パスの Shader で各パスごとに全部記述していくと以下のようになる Shader "Custom/Outline" { Properties { _Stencil ("Stencil", int) = 10 } SubShader { Tags { "RenderType"="Opaque" } Pass { Stencil { Ref [_Stencil] Comp notequal } ZWrite Of…
単位ベクトルから、角度を取得するメソッドが欲しくて作成すると以下になる using UnityEngine; public class Utility { /// <summary> /// 2つの単位ベクトル間の角度を取得 /// </summary> public static float SignedAngle(Vector2 a, Vector2 b) { // dot(a, b) = cos(b - a…
Unity 2021.2.0b1 で UIElements を入れるために PackageManager で UI Toolkit を導入したところ大量のエラーが発生 調べて見ると、2021.2 では Built-in にすでに UI Elements が含まれているため PackageManager で導入する必要は無いということでした つ…
URP で PostEffect を利用するには ForwardRendererData を作成して UniversalRenderPipeline に登録する必要がある この手順を記述する ScriptableRendererFeature の作成 ScriptableRendererFeature は レンダラーにレンダリングパスを追加するためのクラ…
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…
複数パラメータを監視して、制御したい際に public 変数にしていると管理が大変なので Func を登録して戻り値で判定できるようにしてみました クラス using System; using System.Collections.Generic; /// <summary> /// Function を登録して、それが全部満たすか、</summary>…
Content Size Fitter や LayoutGroup などを使っていると、Inspector の値を変更できなくなる これを実現するためには、DrivenRectTransformTracker を利用する DrivenRectTransformTracker は 登録した RectTransform の値を Inspector で変更できなくし ス…
最大幅を固定した UI を作成するのが面倒だったので 今後作成する必要があったときのために、設定をここにメモしておく オブジェクトの構成 各オブジェクトのコンポーネント MaxHorizontalSize RectTransform の Width に最大幅を入力 Root Text サンプル 実…
SceneView 上で細かい移動をしようとしてもできないことがあったので、 WASD で移動できるような拡張を作成してみました サンプル 実際に SceneView上でこのように動きます ワールド座標ではなく、ローカル座標から前後左右に動きます github github.com
Editorツール系では、Input.GetKeyDown を利用してキーボードの入力を検知できないので Event.current を利用して SceneView 上でのキーボードの入力を検知する [InitializeOnLoad] internal static class SceneViewInput { static SceneViewInput() { Scene…
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…
Gizmos.DrawCube を利用して Cube を描画した際に回転ができないため、Rotation 0 じゃない場合は正しく描画できない private void OnDrawGizmos() { Gizmos.DrawWireCube(transform.position, Vector3.one); } そのため、Gizmos.matrix に適切な行列を指定…
static インスタンスの開放などで、スクリプトのコンパイルを行いたいときに コードを少しいじって、コンパイルを走らせていましたが、CompilationPipeline.RequestScriptCompilation を呼び出すことで非同期コンパイルを走らせることができるようでした // …
昔は Preference から Skin を変更できた気がするのですが、Unity2020.3 には無いようだったので 内部のメソッドを呼び出して、Skin を変更できるようにしてみました スキンの変更にはコンパイルが必要なので即時には変わりませんが、これを利用することでス…
Hierarchy にあるオブジェクトを選択状態にするには GameObject.Find でパスからオブジェクトを探して、Selection.activeGameObjectに代入するだけでできる Selection.activeGameObject = GameObject.Find(path); しかし、PrefabMode の場合 GameObject.Find…
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>…
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>
Listの要素を増減させる Editor 拡張を作成した際に 下記のようにスクリプトを書くと、消したタイミングでエラーが発生する public class EditorSampleWindow : EditorWindow { private List<int> _intList = new List<int>() { 1, 2, 3, 4, 5 }; private void OnGUI()</int></int>…
ContentSizeFitter 等を利用した RectTransform では サイズを確定させるためには 1フレーム待つ必要があります もし、待ちを無くす場合は以下のどちらかのメソッドを呼び出すことで 1フレームの待ちをせずサイズを確定させることができます Canvas.ForceUpd…