2020-12-01から1ヶ月間の記事一覧
AssetDatabase.GetDependencies を利用すれば、そのアセットで利用されているアセットの参照を取得することができますが、自分自身を利用しているアセット一覧を取得することができません そのため、自分自身を利用しているアセットを検索するツールを作りま…
Hierarchy 上でオブジェクトの依存関係を取得する方法を調べてみても Unity には存在しなかったようなので、依存を調べられるツールを作成しました 2018.3以降であれば「Find References In Scene」を利用することで どのオブジェクトが参照しているかを見る…
コード 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>…
Vector Graphics Version 2.0.0-preview.13 より SVGImage の表示確認しようとして GameObject に追加したものの表示されませんでした いろいろ試して見た結果 CanvasRenderer が無いため表示されていなかっただけでした ※ Canvas内 で 描画するには CanvasR…
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…
hacchi-man.hatenablog.com 以前 Unmask の記事を書きましたが、Unmask したからには その部分のクリックをしたいと思ったのでクリック処理を追加してみました ICanvasRaycastFilter を使う方法もありますが、Mask内にボタンを設置する必要があったので 利用…
複数の IEnumerator を待つ場合は以下のような処理を書く必要があり面倒だったので 手軽に複数の IEnumerator を待てないかと思い作成しました private void WaitAll(Action action) { var end = 0; void End() { if (++end >= 2) { action.Invoke(); // End…
CommandBuffer を試すために ポストエフェクトだけの処理を作成すると なぜか結果が上下反転して出力されてしまいました 1 using UnityEngine; using UnityEngine.Rendering; public class CommandBufferSample : MonoBehaviour { [SerializeField] private …
BaseClass の CustomEditor を作成して、それを ChildClass にも反映させる場合 いつもどおりの記述では ChildClass 側に反映することができない using UnityEngine; public class BaseClass : MonoBehaviour { } [UnityEditor.CustomEditor(typeof(BaseClas…
以下のように記述している場合 Hierarchy にあるオブジェクトや Project にあるオブジェクト等 制限なく自由にオブジェクトの設定ができてしまう [SerializeField] private GameObject _obj; そのため、オブジェクトに制限をかける Attribute を作成しました…
Unity2020.2.1f にしたところ新しいシーンを作成する際にダイアログが開くようになりました 調べてみたところ、これは Scene Template というもので下記にドキュメントがありました Scene Templates | Scene Template | 1.0.0-preview.11 今までの仕様への戻…
エフェクトなど、一時的なオブジェクト生成時にオブジェクトの破棄を忘れることがあるので 破棄してくれるスコープを作ってみました [SerializeField] private GameObject _effect; private void PlayEffect() { var obj = GameObject.Instantiate(_effect, …
UnityEditor で Animator の確認を行う場合 Project Window から Animator を選択して State を確認し、State の AnimationClip を選択して、AnimationClip Window から再生する必要があった それが面倒だったので、State 一覧を表示するツールを作成してみ…
UnityEditor 上で Animation の再生をするのはちょっと面倒なので、 手軽にできるようにクラスを作成してみました コード [Serializable] public class EditorPlayAnimation { [SerializeField] private Animator _animator; [SerializeField] private List<AnimationClipData> </animationclipdata>…
Animator の state 一覧を見るためには runtimeAnimatorController を AnimatorController にキャストすることで可能になります AnimatorController は UnityEditor.Animations のクラスなため、UniytEditor 上でしか動作させることはできません var animato…
シーン上に Gizmo アイコンがあり邪魔なことがまれに邪魔なことがあるので、 このアイコンを非表示にする方法を記述します Scene Window ツールバーの Gizmo は トグルになっているので これを押すことで全 Gizmo を非表示にすることができます また、個々の…
UI 上に 3D モデルを出したい際には RenderTexture を利用したりするが、 メモリを食ってしまったり、汚かったりする その場合、UI 上に映るように 3D モデル を別カメラで写してやることがある この際に UI の位置が変わるたびに、カメラの Rect を調整する…
FPS は Update を呼ばれた回数 / 呼び出しの合計時間 で求めることができるのでそれを利用して計算しています どこからでも計測できるようにイベントを登録することで利用できるようにしてあり 呼ばれないときにインスタンスは無いので、無駄に動かないよう…
Assets/ が含まれているパスがクリップボードにある状態で これを実行するとパスで指定しているオブジェクトを選択状態にしてくれます using UnityEditor; using UnityEngine; public class SelectFromClipboard { [MenuItem("Tools/SelectAssetFromClipboar…
1回だけ実行させるボタンが必要だったので拡張メソッドを作成してみました public static class ButtonExtension { public static void OneShot(this Button self, System.Action action) { self.onClick.AddListener(() => { action?.Invoke(); self.onClic…
hacchi-man.hatenablog.com の記事に内容を追加して拡張メソッドとして利用できるようにしたものです GetWorldCorners を利用すると RectTransform の4角の座標を取得することができる この際に Canvas の RenderMode が Overlay じゃない場合は、座標変換が…
UnityEditor の中心に EditorWindow を表示させるためには、MainWindow の座標を取得することで可能になる が MainWindow の情報は public な訳もなく、Reflection を利用して、MainWindow 探し その位置を取得することで中心位置を知ることができる コード …
Animator や Scene など、UnityEditor 上で編集したにも関わらず、git 上で差分が出てこないことがある これは Dirty フラグが立っておらず差分が反映されてないから生じている そのため、右クリックメニューから強制的にフラグを立てられるメニューを作成 […
ServiceLocater のコードを見ていると インスタンスが登録されていない場合は エラーになるものが多く(多分) もし、インスタンスがなくてもエラーにならないものを作る場合どのような実装になるのか気になったので、作成してみました この ServiceLocater …
github.com 今までブログで紹介してきた Texture を編集するツールをまとめてひとつにしました ※ Unity2019.3 以降でしか動作しません 使い方 タグ 機能 ChangeAlpha 指定の色を透過する ChangeColor 指定の色を変更する NoApha 透過を無くす Resize 画像の…
UnityEngine.Random は InitState(seed) を利用すると乱数を固定化できる しかし一度使うと、次に Seed を利用しない乱数を利用したい場合戻す処理をする必要がある そのため、通常の乱数と Seed を指定した乱数でよしなに利用できるようなクラスを作成しま…
interface を利用したクラスでは基本的に public で定義する必要がある public class SampleRandom : MonoBehaviour { private void Start() { var t = new Test(); t.Test1(); } private interface ITest1 { void Test1(); } private class Test : ITest1 {…
コルーチンを使う場合 MonoBehaviour クラスを継承している必要があり またオブジェクトがアクティブである必要がある 色々制限があって面倒だったので、GlobalCoroutine を作成しました これは内部で CoroutineManager を生成しており、特に意識することな…
ProjectWindow で拡張子を表示させたいこと等があったので、汎用的に利用できる ProjectWindow 拡張ツールを作成しました github.com OnOff Preference に OnOffを選択するUIを追加してあるので、こちらからOnOffできます また必要な機能毎にもOnOff選択でき…
RectTransform の Rect を取得するには、 Canvas が Overlay 以外の場合 Camera が必要になり、自前で取得処理をする必要がある それが面倒だったので PointerEventData の enterEventCamera を利用して楽に Rect を取得する public static class RectTransf…