うにてぃブログ

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

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

【Unity】Coroutine が動作している間に 特定処理の有効無効を制御したい

コルーチンを呼び出している間中はタップを無効にしたいとか そういったことがあり、呼び出し毎に無効有効処理を書くのが面倒だったので 一括でできないかと思い作ってみた コルーチンを利用する場合はこのクラスの StartCoroutine を呼び出すようにする ※今…

【Unity】シンプルなテクスチャを作成するツール

GitHub - yayorozu/UnityEditorCreateTexture ちょっとしたときに簡単な画像を作成できるツールを作成しました 単色テクスチャ アウトラインテクスチャ グラデーションテクスチャ の3種類のテクスチャを色サイズ指定で作成することができます 単色テクスチャ…

【Unity】セピア シェーダー

画像のセピア色への変換(備忘録) 上記記事を参考にポストエフェクトを利用して セピア に変換してみました Shader "Unlit/Sepia" { Properties { _MainTex ("Texture", 2D) = "white" {} } SubShader { Tags { "RenderType"="Opaque" } LOD 100 Pass { CGP…

【C#】重みをつけて IList を抽選する

C#

抽選したいクラスに interface を継承させて LotteryUtil.Lot を呼び出せば抽選してくれる private class Food : LotteryUtil.IWeight { public string Name; public int Weight; public int GetWeight() => Weight; } コード using System; using System.Co…

【Unity】選択したオブジェクトの持つ法線をScene上に表示する拡張

デバッグ用に法線を見たいことがあったので選択したオブジェクトの法線を表示する拡張を作成 MeshFilter と SkinnedMeshRenderer に対応してみました が SkinnedMeshRenderer は正しい位置に法線が表示されない場合があるのですが原因は不明 ※頂点数が多いと…

【Unity】揺れる テキスト

Textの頂点をランダムに移動させて揺れてるようなテキストを実現してみました Textの頂点はシェーダー側では揺らせないので、スクリプトで実現しています using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; [RequireComponent(ty…

【Unity】ポストエフェクト利用時のメモリ

調査 ポストエフェクトを利用した際のメモリを見てみると 利用してないときと比べて「TempBuffer 337 720*1280」が増えています これは ポストエフェクトを利用する際に OnRenderImage を定義するのですが このタイミングで ポストエフェクトを適応する Rend…

【Unity】ポストエフェクトのサイズを変える

OnRenderImage のタイミングで、対象サイズの RenderTexture に一度書き込み それを destination にコピーすることでサイズを変更することができます using UnityEngine; [RequireComponent(typeof(Camera))] [ExecuteInEditMode] public class PostEffect :…

【Unity】モザイク シェーダー

SizeXとSizeYを調整することで縦横のモザイクサイズを変更できます 上と左が0.5ずれているのを直したいが直し方が分からなかったため、いつか直します Shader "Unlit/Pixelation" { Properties { [NoScaleOffset] _MainTex ("Main Tex", 2D) = "white" {} _S…

【Unity】Monobehaviour 継承クラスで利用できる UnityEvent 一覧

Generally よく使うやつ /// <summary> /// インスタンスの生成時に1度だけ呼ばれる /// ActiveSelf が false だった場合でも呼ばれる /// </summary> private void Awake() /// <summary> /// activeSelf が true になった時に1回だけ呼び出される /// activeSelf が false だった場合は</summary>…

【Unity】グレースケール シェーダー

グレースケール画像のうんちく - Qiita 上記の記事より 「NTSC係数」を利用してグレースケール変換をすることで 下図のようにグレースケールに変換できます ※ポストエフェクト 変換式は以下の通りです col.r * 0.298912 + col.g * 0.586611 + col.b * 0.1144…

【Unity】ShaderLab 条件式置き換え メモ

条件式を if 文を使わないで書く処理をメモしておきます ※define 形式です x >= y #define GREATER_EQUAL(x, y) step(y, x) x <= y #define LESS_EQUAL(x, y) step(x, y) x > y #define GREATER(x, y) 1.0 - step(y, x) x < y #define LESS(x, y) 1.0 - step…

【Unity】RenderType が Opaque の シェーダに アルファ 0を適応する

Opaque のシェーダ に対して アルファを入れても無視されてしまう fixed4 frag (v2f i) : SV_Target { if (i.uv.x < 0.2 || i.uv.x > 0.8 || i.uv.y < 0.2 || i.uv.y > 0.8) { return fixed4(0, 0, 0, 1); } return fixed4(1, 1, 1, 0); } clip を利用するこ…

【Unity】パーリンノイズを使った Dissolve Shader

こちらの記事 nn-hokuson.hatenablog.com を参考にパーリンノイズを利用し Dissovle シェーダーを作成してみました ノイズの値と _Threshold の値を見て そこの ahpha を変えているだけの簡単なシェーダーです Shader "Unlit/Dissolve" { Properties { [NoSc…

【Unity】Sceneに選択したオブジェクトのMesh情報を表示する

自作したMesh の uvや頂点カラーを見たかったので、表示する拡張を作成 内蔵されているCubeのUVを表示するとこのようになります 頂点カラーも持ってる場合は文字色が頂点カラーの色に変わります 頂点が多いやつだと多すぎて見るのが辛い using System.Collec…

【Unity】物理演算の予測線を表示する

Rigidbody の挙動の予測線を表示したかったので、表示するコンポーネントを作成しました using System.Collections.Generic; using UnityEngine; public class RigidbodySimulate : MonoBehaviour { [SerializeField] private GameObject _simulateResource;…

【C#】List をシャッフルする【LINQ】

LINQ を使わずに配列をシャッフルする方法を以前紹介したが 今回はLINQ を利用した配列をシャッフル方法を記述する 【C#】配列をシャッフルしたり、ランダムに取得する - うにてぃブログ Guid C# には GUID を生成するために Guid 構造体が存在する Guid 構…

【C#】ランダムな文字列を返す

C#

ランダムな文字列の長さを指定するとその長さ分の文字列を返してくれる関数 private const string PASSWORD_CHARS = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; public static string GenerateRandomString(int size = 32) { var s…

【Unity】Component を Module 化するライブラリ

Particle System のように要素を選択して、機能を追加できるライブラリを公開しました github.com 使い方 ModuleControlAbstract を継承したクラスを作成する こちらが MonoBehaviour を継承しているクラス using System; public class SampleModuleControl …

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

RectTransform の位置を取得するとPivot に応じた位置が取得できる たまに Pivot (0.5, 0.5) の場合の位置を取得したい場合に利用できます using UnityEngine; public static class RectTransformExtension { public static Vector3 CenterPosition(this Rec…

【Unity】SpriteRenderer の Inspector拡張

複数選択時に一括で色やアルファを変えられるように using System.Linq; using UnityEditor; using UnityEngine; [CustomEditor(typeof(SpriteRenderer))] [CanEditMultipleObjects] public class InspectorExtensionSpriteRenderer : Editor { private Edit…

【Unity】デフォルト Inspector 拡張 の CanEditMultipleObjects 対応

過去に何度か デフォルト Insepector 拡張を行って来ましたが CanEditMultipleObjects を用いて 複数選択に対応すると不具合が生じていましたが、CreateEditor時に targets を指定することで解決できました hacchi-man.hatenablog.com using UnityEditor; us…

【Unity】特定の RectTransform の範囲内かどうか判定する

RectTransform から Bounds を取得し、Bounds を用いて判定を行うことで範囲内かどうか知ることができます RectTransformUtility.CalculateRelativeRectTransformBounds を利用することで Bounds が取得できますが、 これは子供の RectTransfrom も対象にし…

【Unity】Escape で閉じれる PopupWindow のテンプレート

Editor 拡張時に PopupWindow を使いますが、たまに Escape で閉じるようにするの どうするのか忘れるのでメモ PopupWindow.Show(rect, new Popup()); 呼び出しはこれで using UnityEditor; public class Popup : PopupWindowContent { public Popup() { } p…

【Unity】BaseMeshEffect で UIVertex の color, position, uv0 以外を利用する方法

BaseMeshEffect を利用して Shader側にパラメータを渡すために 下記コードのように uv1 を利用しようとしたがパラメータが渡されない public override void ModifyMesh(VertexHelper vh) { var vertexList = new List<UIVertex>(); vh.GetUIVertexStream(vertexList); </uivertex>…

【Unity】uGUI の要素をドラッグする

uGUI のドラッグするためには IDragHandler, IBeginDragHandler, IEndDragHandler の3つの interface を継承してやる必要があります これを継承していると Eventsystem が勝手に OnDrag, OnBeginDrag, OnEndDrag を呼び出ししてくれます ドラッグを反映させ…

【Unity】Editor でキャラ等 の画像を撮影できるツールのサンプル ~コード解説~

https://hacchi-man.hatenablog.com/entry/2020/05/04/220000hacchi-man.hatenablog.com キャプチャ機能で使った一部処理を抜粋 RenderTexture を GUI に表示 // カメラの描画を更新 _camera.Render(); var rect = GUILayoutUtility.GetRect(_renderTexture.…

【Unity】Editor でキャラ等 の画像を撮影できるツールのサンプル

このように UnityEditor 上でオブジェクトの Animation 等を指定してキャプチャーできるツールを公開しました github.com 使い方 Capture Object に Animator を持っている Prefabをセットする ※このサンプル内であれば Assets/unity-chan!/Unity-chan! Mode…

【Unity】カーブする Text

AnimationCurveに合わせてテキストをカーブさせるスクリプト コード using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; [RequireComponent(typeof(Text))] public class TextCurve : BaseMeshEffect { [SerializeField] private …

【Unity】Text と Image の頂点の描画順

BaseMeshEffect で頂点をいじるときに忘れるのでメモ それにしてもなんで Text と Image で頂点の順番が違うんだろうか Text 左上, 右上, 右下 右下, 左下, 左上 // 左上, 右上, 右下 var mesh1Pos = new []{ new Vector2(-1, 1), new Vector2(1, 1), new Ve…