うにてぃブログ

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

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

【Unity】アセットの参照を確認するツール

AssetDatabase.GetDependencies を利用すれば、そのアセットで利用されているアセットの参照を取得することができますが、自分自身を利用しているアセット一覧を取得することができません そのため、自分自身を利用しているアセットを検索するツールを作りま…

【Unity】Hierarchy に存在するオブジェクトの参照を調べるツール

Hierarchy 上でオブジェクトの依存関係を取得する方法を調べてみても Unity には存在しなかったようなので、依存を調べられるツールを作成しました 2018.3以降であれば「Find References In Scene」を利用することで どのオブジェクトが参照しているかを見る…

【Unity】全シーンのすべてのオブジェクトを取得する

コード using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; public static class SceneUtil { public static List<GameObject> GetAllSceneObjects() { var objs = new List<GameObject>(100); var count = SceneManager.sceneCount; for (va</gameobject></gameobject>…

【Unity】SVGImage が表示されない

Vector Graphics Version 2.0.0-preview.13 より SVGImage の表示確認しようとして GameObject に追加したものの表示されませんでした いろいろ試して見た結果 CanvasRenderer が無いため表示されていなかっただけでした ※ Canvas内 で 描画するには CanvasR…

【Unity】対象の Transform を親に持つかどうかを調べる拡張メソッド

public static class TransformExtension { public static bool HasInParent(this Transform self, Transform target) { var current = self; while (current.parent != null) { if (current == target) return true; current = current.parent; } return fa…

【Unity】Unmask の部分をクリック可能にする

hacchi-man.hatenablog.com 以前 Unmask の記事を書きましたが、Unmask したからには その部分のクリックをしたいと思ったのでクリック処理を追加してみました ICanvasRaycastFilter を使う方法もありますが、Mask内にボタンを設置する必要があったので 利用…

【Unity】複数の IEnumerator もしくは YieldInstruction の終了を待つ

複数の IEnumerator を待つ場合は以下のような処理を書く必要があり面倒だったので 手軽に複数の IEnumerator を待てないかと思い作成しました private void WaitAll(Action action) { var end = 0; void End() { if (++end >= 2) { action.Invoke(); // End…

【Unity】CommandBuffer の Blit 時に画像の上下が反転する

CommandBuffer を試すために ポストエフェクトだけの処理を作成すると なぜか結果が上下反転して出力されてしまいました 1 using UnityEngine; using UnityEngine.Rendering; public class CommandBufferSample : MonoBehaviour { [SerializeField] private …

【Unity】継承先のクラスでも CustomEditor を適応する

BaseClass の CustomEditor を作成して、それを ChildClass にも反映させる場合 いつもどおりの記述では ChildClass 側に反映することができない using UnityEngine; public class BaseClass : MonoBehaviour { } [UnityEditor.CustomEditor(typeof(BaseClas…

【Unity】シリアライズしたオブジェクトの参照を制限する Attribute

以下のように記述している場合 Hierarchy にあるオブジェクトや Project にあるオブジェクト等 制限なく自由にオブジェクトの設定ができてしまう [SerializeField] private GameObject _obj; そのため、オブジェクトに制限をかける Attribute を作成しました…

【Unity】Scene Template について

Unity2020.2.1f にしたところ新しいシーンを作成する際にダイアログが開くようになりました 調べてみたところ、これは Scene Template というもので下記にドキュメントがありました Scene Templates | Scene Template | 1.0.0-preview.11 今までの仕様への戻…

【Unity】インスタンスを破棄するスコープ

エフェクトなど、一時的なオブジェクト生成時にオブジェクトの破棄を忘れることがあるので 破棄してくれるスコープを作ってみました [SerializeField] private GameObject _effect; private void PlayEffect() { var obj = GameObject.Instantiate(_effect, …

【Unity】Hierarchy で選択したオブジェクトの Animator state 一覧を表示して再生する

UnityEditor で Animator の確認を行う場合 Project Window から Animator を選択して State を確認し、State の AnimationClip を選択して、AnimationClip Window から再生する必要があった それが面倒だったので、State 一覧を表示するツールを作成してみ…

【Unity】UnityEditor 上で Animation を再生するための便利クラス

UnityEditor 上で Animation の再生をするのはちょっと面倒なので、 手軽にできるようにクラスを作成してみました コード [Serializable] public class EditorPlayAnimation { [SerializeField] private Animator _animator; [SerializeField] private List<AnimationClipData> </animationclipdata>…

【Unity】Animator の State 一覧を取得する

Animator の state 一覧を見るためには runtimeAnimatorController を AnimatorController にキャストすることで可能になります AnimatorController は UnityEditor.Animations のクラスなため、UniytEditor 上でしか動作させることはできません var animato…

【Unity】Scene 上の Gizmo アイコンを非表示にする

シーン上に Gizmo アイコンがあり邪魔なことがまれに邪魔なことがあるので、 このアイコンを非表示にする方法を記述します Scene Window ツールバーの Gizmo は トグルになっているので これを押すことで全 Gizmo を非表示にすることができます また、個々の…

【Unity】カメラの Rect を RectTransform に合わせる

UI 上に 3D モデルを出したい際には RenderTexture を利用したりするが、 メモリを食ってしまったり、汚かったりする その場合、UI 上に映るように 3D モデル を別カメラで写してやることがある この際に UI の位置が変わるたびに、カメラの Rect を調整する…

【Unity】FPS を測定する

FPS は Update を呼ばれた回数 / 呼び出しの合計時間 で求めることができるのでそれを利用して計算しています どこからでも計測できるようにイベントを登録することで利用できるようにしてあり 呼ばれないときにインスタンスは無いので、無駄に動かないよう…

【Unity】パスからアセットを検索する

Assets/ が含まれているパスがクリップボードにある状態で これを実行するとパスで指定しているオブジェクトを選択状態にしてくれます using UnityEditor; using UnityEngine; public class SelectFromClipboard { [MenuItem("Tools/SelectAssetFromClipboar…

【Unity】ボタンを 1回だけ実行するようにする 拡張メソッド

1回だけ実行させるボタンが必要だったので拡張メソッドを作成してみました public static class ButtonExtension { public static void OneShot(this Button self, System.Action action) { self.onClick.AddListener(() => { action?.Invoke(); self.onClic…

【Unity】RectTransform の スクリーン座標の Rect を取得する

hacchi-man.hatenablog.com の記事に内容を追加して拡張メソッドとして利用できるようにしたものです GetWorldCorners を利用すると RectTransform の4角の座標を取得することができる この際に Canvas の RenderMode が Overlay じゃない場合は、座標変換が…

【Unity】UnityEditor の中心座標を取得する

UnityEditor の中心に EditorWindow を表示させるためには、MainWindow の座標を取得することで可能になる が MainWindow の情報は public な訳もなく、Reflection を利用して、MainWindow 探し その位置を取得することで中心位置を知ることができる コード …

【Unity】強制的に Dirty フラグをつける メニューの追加

Animator や Scene など、UnityEditor 上で編集したにも関わらず、git 上で差分が出てこないことがある これは Dirty フラグが立っておらず差分が反映されてないから生じている そのため、右クリックメニューから強制的にフラグを立てられるメニューを作成 […

【C#】インスタンスが登録してなくてもエラーにならない ServiceLocater

ServiceLocater のコードを見ていると インスタンスが登録されていない場合は エラーになるものが多く(多分) もし、インスタンスがなくてもエラーにならないものを作る場合どのような実装になるのか気になったので、作成してみました この ServiceLocater …

【Unity】Texture を加工するツール

github.com 今までブログで紹介してきた Texture を編集するツールをまとめてひとつにしました ※ Unity2019.3 以降でしか動作しません 使い方 タグ 機能 ChangeAlpha 指定の色を透過する ChangeColor 指定の色を変更する NoApha 透過を無くす Resize 画像の…

【Unity】乱数を管理する

UnityEngine.Random は InitState(seed) を利用すると乱数を固定化できる しかし一度使うと、次に Seed を利用しない乱数を利用したい場合戻す処理をする必要がある そのため、通常の乱数と Seed を指定した乱数でよしなに利用できるようなクラスを作成しま…

【C#】interface を private で定義する

interface を利用したクラスでは基本的に public で定義する必要がある public class SampleRandom : MonoBehaviour { private void Start() { var t = new Test(); t.Test1(); } private interface ITest1 { void Test1(); } private class Test : ITest1 {…

【Unity】コルーチンを MonoBehaviour を使わずに呼び出す

コルーチンを使う場合 MonoBehaviour クラスを継承している必要があり またオブジェクトがアクティブである必要がある 色々制限があって面倒だったので、GlobalCoroutine を作成しました これは内部で CoroutineManager を生成しており、特に意識することな…

【Unity】ProjectWindow を拡張するツール

ProjectWindow で拡張子を表示させたいこと等があったので、汎用的に利用できる ProjectWindow 拡張ツールを作成しました github.com OnOff Preference に OnOffを選択するUIを追加してあるので、こちらからOnOffできます また必要な機能毎にもOnOff選択でき…

【Unity】PointerEventData を利用して RectTransform の Rect を取得する

RectTransform の Rect を取得するには、 Canvas が Overlay 以外の場合 Camera が必要になり、自前で取得処理をする必要がある それが面倒だったので PointerEventData の enterEventCamera を利用して楽に Rect を取得する public static class RectTransf…