うにてぃブログ

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

2020-02-01から1ヶ月間の記事一覧

【Unity】単色テクスチャを生成する

// 白色の64×64のテクスチャをAssets/に作成する private static void CreateTexture() { var texture = CreateTempTexture(64, 64, Color.white); // これを呼ばないと色が書き込まれない texture.Apply(); System.IO.File.WriteAllBytes(Application.dataP…

【Unity】Texture をコピーする方法

RenderTexture を利用することで、Texture をコピーすることができます ※ Runtime もしくは UnityEditor上で private static Texture2D TextureCopy(Texture source, string savePath) { var texture = new Texture2D(source.width, source.height, TextureF…

【Unity】UnityEditor で IList の表示に ReorderableList を使う

Inspector Inspector で ReorderableList を利用する場合は SerializedObject と SerializedProperty が利用できるので結構簡単にReorderableListが利用できる クラスを List の型に指定してしまうとちょっと見た目が悪くなってしまうので 見栄えをよくする…

【Unity】ジグソーパズルの自動生成 ~7~

ピース間の境界線の描画 ジグソーパズルの絵には境界線があったほうが絵っぽくなるので絵に境界線を追加してみます internal class Border { public readonly Vector2Int Begin; public readonly Vector2Int End; public readonly List<BezierPathSegment> Segments; public Bor</bezierpathsegment>…

【Unity】ジグソーパズルの自動生成 ~6~

生成したピースの Pivot 現状すべてのピースの GameObject を (0, 0, 0) 座標に生成しており頂点をずらすことで並べている そのため、ピースを回転させたりする場合 Pivot が (0, 0, 0) なので Z回転を入れると下図のように意図しない回転になる Pivot 調整 …

【Unity】ジグソーパズルの自動生成 ~5~

テクスチャを貼り付ける ジグソーピースの生成ができたのでこれにテクスチャを貼り付ける そのためには今の頂点座標から、uvを計算してやればよい //uvのセット var uv = new List<Vector2>(); foreach (var vertex in mesh.vertices) uv.Add(new Vector2(vertex.x / </vector2>…

【Unity】ジグソーパズルの自動生成 ~4~

ジグソーの複数分割 ピースの生成はできましたが、最終的には一枚絵からジグソーを作成するため 分割数を指定して、それに応じたピースを生成するようにしていきます ジグソーの境界 隣り合うジグソーの境界は同じものを使う必要がありますが すべてのピース…

【Unity】ジグソーパズルの自動生成 ~3~

ピースの厚み 今回は ~2~で作成したメッシュに厚みをつけるために 生成したMeshの輪郭線のZ座標をずらして複製し、複製した線と元の線の間にポリゴンを作成することで厚みをつけます 背面に関しては、表面の頂点座標を押し出し頂点の順番を反転してやれば作…

【Unity】ジグソーパズルの自動生成 ~2~

ピースの Mesh 生成 ~1~で作成したピースの境界を4つ繋げればピースができる 前回は線を描画するために new PathProperties() を利用していたが、今回は線では無く面を作成するため new SolidFill(), を設定する。 各境界を作成しているのが GetBorder メソ…

【Unity】ジグソーパズルの自動生成 ~1~

ふと Unity でジグソーパズルを作成したくなったので、Unity でのジグソーパズルの自動生成について考える ピース Mesh の生成 まずピースの生成について考える 自前で頂点を作成するのは容易ですが、頂点からメッシュを作成するのは容易では無いため 頂点と…

【Unity】ScriptableSingleton の使いみち

ScriptableSingleton は UnityEditor を終了するまで存在するインスタンスです 主な利用用途としては ・EditorWindow 間でのデータ共有 ・EditorWindow を開いていない間データを確保したい場合 が考えられる EditorWindow 間でのデータ共有 例えば Selectio…

【Unity】Animatior の再生を待つ

この記事は、Animator に セットしてる Animation が一つのみを想定している AnimationStateInfo.IsName Animation の名前が分かっていた場合は IsName で待つことができます private IEnumerator WaitAnimationImpl() { var animator = gameObject.GetCompo…

【Unity】ScriptableObject の InspectorGUI を EditorWindow で利用する

Editor クラスの OnInspectorGUI を EditorWindow OnGUI を呼び出すことで Inspector の UI を表示することができます そのためには ScriptableObject の Editor を取得する必要があり それは下記メソッドで取得できます public static UnityEditor.Editor C…

【Unity】uGUI の透明な画像の Draw について

透明な画像を置いてタップ判定をさせたり、タップをさせなくしたりすることがあるが 透明な画像でも無駄にDraw Call が発生していることがある 調査 uGUI で透明 (アルファが0) の画像のみを置いておき Frame Debug を利用して Draw Call を見てみる Canvas…

【Unity】Unity の各 Scene にある Root GameObject を取得する方法

各シーンの Root にある GameObject を取得したくて下記のコードを書いたが GameObject の数が増えると Resources.FindObjectsOfTypeAll の処理が重くなると思ったので 別の方法を探していたら UnityEngine.SceneManagement.SceneManager たるものを見つけま…

【Unity】Unity Editor で ラベルや画像をボタンにする

// ラベルをボタンにするには ボタンで EditorStyles.label を指定する if (GUILayout.Button("Button Text", EditorStyles.label)) { Debug.Log("Click Label"); } EditorGUILayout.Space(); // 画像をボタンにするには ロードしたテクスチャを指定する if …

【Unity】描画しているカメラ一覧を表示する拡張機能

あらまし 開発中にカメラが増えてくると、調べたいオブジェクトがどのカメラに写っているかを調べるときがあり、探すのが面倒だったので作ってみた 実装 SceneView に写ってるこれをそのまんま利用すればできるんじゃないかと思ったので 公式のコードを参考…

【Unity】Reflection を利用して Unity の internal 処理を利用する

internal と書いてあるけど private でも問題無くできます static ではない場合はインスタンスを取得する必要がある のでインスタンス取得処理も記述してあります ※全部ProjectBrowserですが・・・ Type の取得 // ProjectBrowser の Typeを取得 var type = …

【Unity】UnityEditor で Unityデフォルトの EditorWindow を取得する

EditorWindow を取得する方法として EditorWindow.GetWindow があるが これはすでに EditorWindow を開いていた場合でも新しく EditorWindowを作成してしまう すでに開いている EditorWindow を確認する方法として以下がある var findSceneView = Resources.…

【Unity】UnityEditor の List の表示を変更する

Unity で IList (Array や List) を利用すると下図のような Editor UIが表示される これだと途中の要素を消すことができず、配列のサイズを変えたいときにも 数値を入力するのが面倒なので拡張することにした 実装 Inspector で利用することを想定して Seria…

【Unity】Shader を用いて 画像を白黒だけで表現する

キャラの輪郭を表示させたり、画像を見せたいけど詳しく見せたく無いから 二色で塗りつぶしたりしたいときがあると思うので、それの対応 正しい名称が分からなかったのでざっくりとした表現 処理 各色味を計算してrgb値によって色を振り分けている fixed tot…

【Unity】ログをハンドルする (StackTrace 解析もあるよ)

実機でUnityの出力するログを見たいときは Application.logMessageReceived にイベントを登録することでログをハンドルすることができます Console を自作するときにも利用できますが、スクリプトコンパイル時の warning の管理が面倒なので 既存の Console …

【Unity】Graphic の RaycastTarget が true のオブジェクトを SceneViewに描画する

あらまし UI を作成時に 不要な箇所の Text や Image の raycastTarget が true になってしまっていることがあり raycastTarget が true のオブジェクトが多いとそれだけパフォーマンスに問題が出るので、できるだけ無くしたい 実装後にあとから一つ一つ確認…

【Unity】Transform の Global Scale (lossyScale) を 指定の値に変更する

Transform の Global Scale (lossyScale) は Read Only のため値の変更が出来ない そのため lossyScale を指定した値にする拡張を作成した /// <summary> /// <para>The global scale of the object (Read Only).</para> /// </summary> public Vector3 lossyScale { [NativeMethod("GetWorld…

【Unity】MonoBehaviour の メソッドを登録してデバッグしやすくする

あらまし 開発中にデバッグメニューを作成時に機能を追加する度に どのウィンドウに表示させるか決めて、表示名を決めて等の作業が面倒になる そのため、フラグだけ建てておけば自動的に登録されていく機構があれば便利である 実装 メソッドに利用できる Att…

【Unity】Hierarchy で GameObject を Duplicate したタイミングで処理を走らせる

あらまし Hierarchy で GameObject を Duplicate (複製) した際に複製した GameObject の Scale が一致しないことがある Duplicate した GameObject の WorldScale が1じゃないときに発生しているような気がするが正しい原因は分からない また複製した GameO…

【Unity】Unity 用のデバッグツールを公開

あらまし 実機では画面に表示、UnityEditor では EditorWindow で 同じデバッグメニューができれば便利だと思い作成してみました。 ※ 実機用 UI はUIElement が runtime UI として使えるようになってから作成する予定なので 現状は EditorWindow で利用する…

【Unity】各Scene にある Root GameObject 一覧を取得する

using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; public class SampleBehaviour : MonoBehaviour { private void Awake() { var rootObjects = new List<GameObject>(); for (var i = 0; i < SceneManager.sceneCount; i++) {</gameobject>…

【Unity】EditorWindow でタブを利用する

タブを表示するのに利用できるクラスは GUILayout.toolbar です 2019.1で追加された EditorGUILayout.EditorToolbar も利用できると思いましたが全然用途が違いました GUILayout.toolbar public static int Toolbar (int selected, string texts, params GUI…