2020-07-01から1ヶ月間の記事一覧
GUIStyle.CalcSize を使うことで GUIStyle で GUIContent を描画する場合の 縦横を取得できるメソッドがある Unity - Scripting API: GUIStyle.CalcSize これを利用すると Rect の領域を知ることができる そのため、下記記事のように GUILayout.FlexibleSpac…
showAlternatingRowBackgrounds 背景色を1行ずつ変更する showBoarder TreeViewの描画枠に枠線を表示する Border無しBorder有り depthIndentWidth 子要素を表示させた際のインデント幅 (100) useScrollView Viewをスクロール可能にするかどうか customFoldou…
BuildRoot BuildRows GetRows OnGUI SelectionChanged SingleClickedItem DoubleClickedItem ContextClickedItem ContextClicked ExpandedStateChanged SearchChanged KeyEvent GetDescendantsThatHaveChildren CanMultiSelect CanRename RenameEnded CanSta…
using System.Collections.Generic; using UnityEditor; using UnityEditor.IMGUI.Controls; using UnityEngine; public class SearchTreeViewSample : EditorWindow { [MenuItem("Tools/SampleTreeView")] private static void ShowWindow() { GetWindow<SearchTreeViewSample>();</searchtreeviewsample>…
AssetDatabase.GetAssetPathsFromAssetBundle を利用することで Asset に設定してある assetBundleName が一致するアセットのパスを取得できます アセットバンドル名は重複を許可しているため、複数のパスが取得することができるので注意が必要です using Un…
例えば以下のメソッドがあり、null は指定したくないが、何も処理したくない場合がある private void CallAction(Action action) その場合は () => { } を渡してやれば何を処理をしない CallAction(() => { }); 他には ReorderableList 等で コールバックを…
Unity の Assembly はディレクトリに応じて下記 4つに分類されます Assembly-CSharp Assembly-CSharp-Editor Assembly-CSharp-firstpass Assembly-CSharp-Editor-firstpass 各 Assembly の分類は以下のような条件で行われます Assembly 条件 Assembly-CSharp…
ReorderableList のデフォルト GUI は右下に + と - があり 削除する際は要素を選択してから - を押す必要があり面倒だったので、GUI を変更してみました using UnityEditor; using UnityEditorInternal; using UnityEngine; public class SampleMonoBehavio…
StackTraceUtility.ExtractStackTrace() を利用すると Debug.Log で表示しているような スタックトレースを取得することができます ログには出したくないが、スタックトレースのみほしい場合に利用することができます
https://github.com/Unity-Technologies/UnityCsReference から 2017.1 の処理を見たのですが、特に重そうな処理をしておらず Mathf.Lerp を要素分計算しているだけだった もしかしたら Unity4系 だったら処理が違ったのかもしれないが、古いので調査は断念…
通常 x と y のループを回す場合は下記のように for を2回使ってループを回す がインデントが上がってしまうので面倒だと思い foreach 一度でループできるようにしてみました for (var x = 0; x < hogeX; x++) { for (var y = 0; y < hogeY; y++) { } } usin…
Unity では 以下のような拡張メソッドを利用して Transform の位置を変更することがあるが これを何度か呼んだ場合 GC がどうなってるかを調べる public static class TransformExtension { public static void SetPositionY(this Transform self, float val…
static class に public static void Test(this Hoge) と記述すると既存のクラスの拡張メソッドを作成することができる 例えば string クラスの 拡張メソッドを作りたい場合は以下のように記述する public static class StringExtension { public static boo…
Enumerable.Range public static IEnumerable<int> Range (int start, int count); for のように a ~ b までの値のリストを作成する 1 ~ 10 までのリストができる IEnumerable<int> enumerable = Enumerable.Range(1, 10); Enumerable.Repeat public static IEnumerable<int></int></int></int>…
https://docs.microsoft.com/ja-jp/dotnet/api/system.linq.enumerable.defaultifempty?view=netcore-3.1 上記からよく使いそうなメソッドをまとめました Any All Append Average Cast Concat Contains Count Where First FirstOrDefault GroupBy Last LastO…
new List<T>(1) のように List のインスタンス生成時に 要素数を指定すると 予め 領域を確保することができるため突然のGC を防ぐことができる 初期化のタイミングだと空の場合は 40B 指定した場合は 76 + サイズ * 4B (int の場合) 指定したサイズに満たない場</t>…
boxing 時にはゴミが出るから使わないほうがいいと聞いたが 実際には調べたことがなかったので調査してみました ボクシングについては下記サイトに記述されていますので参考にしてください ボックス化 - C# によるプログラミング入門 | ++C++; // 未確認飛行…
Primitive なぜか short だけはこのルールじゃなかったので謎でした 型 サイズ バイト int 0 40 int 1 76 int 2 80 short 0 120 short 1 154 short 2 156 float 0 40 float 1 76 float 2 80 uint 0 40 uint 1 76 uint 2 80 Class 変数1 変数2 サイズ バイト …
Primitive型 int 型のからリストを ToArray してみてGCを見てみる var list = new List<int>(); // 32B list.ToArray(); 次に 1要素だけ入れて見てみる var list = new List<int>(){0}; // 36B list.ToArray(); 36B になった int 型が 4B なのでおそらく要素分だけゴミ</int></int>…
何度も計測しているわけではないのと階層の違いで速度は違うと思います parent に直接値を入れる以外は何度も利用するわけじゃなければ 使っても問題なさそう Transform.parent Transform.SetParent Transform.SetSiblingIndex Transform.SetAsFirstSibling …
CanvasGroup のように Graphic のColor を書き換えずに 一括で色変更をしてみようと CanvasGroup のコードをみたところ ネイティブの処理で記述されているらしく同じようなものはできなかったので とりあえず無理やり作ってみましたが微妙なやつです using S…
通常の画像 9Sliceのある画像 using System.Collections.Generic; using System.Linq; using System.Reflection; using UnityEditor; using UnityEngine; using UnityEngine.UI; namespace Yorozu.EditorTool { public class EditorImageDrawer { private st…
C#7 から switch で when を利用できるようになりました これを利用することで switch の case に 条件式を埋め込めます switch (chr) { // アルファベットかどうか case var c when c >= 'A' && c <= 'z': break; // 数字かどうか case var c when c >= '0'…
気になったので計測 WaitUntil と WaitWhile は white() に置き換えたほうがいいかもしれない WaitForSeconds 20 B WaitUntil 136 B WaitWhile 136 B WaitForFixedUpdate 16 B WaitForSecondsRealtime 24 B WaitForEndOfFrame 16 B
Material に パラメータをセットする際には Material.SetColor や Material.SetVector などを利用する この際に第一引数には string と int を指定することができる string の場合でも 結局 int に変換されるのですが、この変換処理が遅いらしいので調べてみ…
下のようなテキストのサイズに合わせてフレームを自動的に変える場合は uGUI の自動レイアウトを利用すると手軽にできる これを作成するには2つのGameObjectが必要で、下図のような親子関係にする 親のGameObject はこのように設定する RectTransformのサイ…
三角関数はもっと遅い - Vitalabolove 店長の雑記帳 上記のサイトを見ていただければ分かるように 三角関数 の計算は遅い なので Shader で利用する際には使いすぎないように注意しようと言われている だから テクスチャ の rgb に sin, cos, tan の結果を書…
画像はこちらのを利用させていただく Lightning Bolt Effect for Unity | Particles/Effects | Unity Asset Store 縦横の分割数と、1枚あたりの時間を指定して利用する そうするとこのように Shader で SpriteAnimation ができます Shader "Unlit/SpriteAnim…
ddx と ddy を利用して輪郭が取得できるかのテストを兼ねて作成してみました 画像は以下のサイトから利用させていただいています [無料写真] 空に浮かぶ風船 - パブリックドメインQ:著作権フリー画像素材集 輪郭 色の差分が少ないところは灰色になってるの…
Unity - Download Archive より、見たい Version の ダウンロードをクリックするとBuilt-in Shader を DLすることができる Unity 公式の Github にあると便利なんだけども