2020-06-01から1ヶ月間の記事一覧
カメラの深度テクスチャを確認する場合ポストエフェクトのコンポーネントを作成し 深度テクスチャを取得して表示する Shader を作成する必要がある が多少面倒なので、手軽に確認できる方法を記述する PostProcessing 手軽に確認するために PostPorcessing …
Text と TextMeshPro の違いを同じ機能の部分のみ簡単にまとめる UI 表示 Font Atlas Text TextMeshPro 文字色 Shadow Text TextMeshPro Outline Text TextMeshPro UI 表示 TextMeshPro のフォントはズームしてもきれいに表示され 文字の周りをぼかすには Fo…
以前 OnTriggerStay で一定時間 特定の範囲にいる際に処理をしたくて 以下のコードを書いていたのですが、想定した挙動にならなかった public class SampleMonoBehaviour : MonoBehaviour { [SerializeField] private float _targetTime; private float _tim…
たまに扱いを間違うのでメモ Time.timeScale Time.deltaTime Time.fixedDeltaTime Time.time Time.fixedTime Time.unscaledDeltaTime Time.fixedUnscaledDeltaTime Time.unscaledTime Time.fixedUnscaledTime Time.smoothDeltaTime Time.realtimeSinceStartu…
uGUI では Hierarchy の上にあるものから順番に描画される この際に同じ Atlas の場合 バッチングされる そのため間に Text をはさんだ場合バッチングが途切れると思っていたが 特定のケースでバッチングされることがあったのでそれについてまとめる ※Unity2…
どこかで拾ってきた処理だとは思うが、いつか使うかもしれないのでメモ こちらのページにて解説してる人がいたので、詳細はこちらから intの1のビットの数を数えるロジック | mwSoft public static int GetBitCount(int x) { x = (x & 0x55555555) + ((x >> …
using UnityEngine; public class RotateObject : MonoBehaviour { [SerializeField] private Vector3 speed; private void LateUpdate() { transform.Rotate(speed, Space.Self); } }
Unity 2018からPreset機能が導入された これを利用することで、コンポーネントの初期値を設定することができる Image の Raycast TargetTarget はすべて true にする必要が無いので デフォルトで false にする等の利用方法が想定できます Preset Manager - U…
文字列結合時の GC を調査してみました 文字の長さが短いかつ何度も計測しているわけではないのでこれが正しいかどうか分かりません 単純な結合より string.Formatのほうが GC が少ないと思っていたが string.Format は結合が早い分 GC が多い模様 // 0B var…
Dictionary を key 順にソートしたくて、調べていると SortedDictionary というものがあるみたいでした docs.microsoft.com 使い方 例えばこのようにすると foreach で取得する際にはソートされて取得できます var sortedDictionary = new SortedDictionary<int, string>(</int,>…
コードをプロファイリングするために Profiler.BeginSample Profiler.EndSample が用意されている Unity - Scripting API: Profiling.Profiler.BeginSample コードのプロファイリングするには以下のように記述すればいけますが private void Awake() { Profi…
サイコロの出目を知る方法として、角度を求める等あると思いますが 各目の位置に Transform を設置し、各 Transform の y 座標が一番大きな要素を出目として判定してみる サイコロにはAssetStoreから無料のこちらを利用する Dice Pack Light | Packs | Unity…
hacchi-man.hatenablog.com 以前作成したものに、テクスチャの合成を追加しました 処理的には単純で 合成するテクスチャのアルファを見てもとのテクスチャと混ぜるだけです この際にテクスチャの ReadWriteEnable が有効でなければ合成できません for (int x…
UnityEditor UnityEditor 上でのみの配列操作なら ArrayUtility が利用できるのでこちらを利用します UnityEditor.ArrayUtility - Unity スクリプトリファレンス using UnityEditor; private void ArrayControl() { int[] _array = new int[0]; // 追加 Arra…
Button 等 uGUI の要素には 押されたときなどのイベントをハンドルするために UnityEvent が利用されています UnityEvent にはイベントを登録する方法として下記の2つの方法がある Inspector から GameObject と メソッドを指定 Script から イベントを登録 …
パフォーマンス 0~10000までを加算して計測する private class Test { public int Value; } private void Main() { List<Test> _list = Enumerable.Range(0, 10000).Select(i => new Test(){Value = i}).ToList(); var sum = 0; Profiler.BeginSample("ProfileFor"</test>…
Surface Shader の頂点処理を差し込む場合は pragma の最後に指定してやれば良い #pragma surface surf Lambert vertex:vert Shader "SurfaceVert" { Properties { _Color ("Color", Color) = (1,1,1,1) _MainTex ("Albedo (RGB)", 2D) = "white" {} _Glossi…
using System.Collections.Generic; public static class ListUtil { public static string Display<T>(this IList<T> self) { if (self == null || self.Count <= 0) return ""; var builder = new System.Text.StringBuilder(); builder.AppendLine("[Display IL</t></t>…
AddComponent Attribute の 引数を空文字列にすることで AddComponent Menuで検索しても出てこなくすることができる 親クラスに記述していても、継承先でも記述しなければ一覧に表示されるので すべてを表示したくない場合は継承先にも記述する必要がありま…
下記コードを実行して速度等を見てみる ループの上限が60000なのは Enumerable.Range 側で大きい値を入れると OverflowException: Arithmetic operation resulted in an overflow. のエラーが出てしまったため private void Start() { Profiler.BeginSample(…
Transform.GetSiblingIndex 現在の順番を取得できる using UnityEngine; public class TransformGetSiblingIndex : MonoBehaviour { private void Awake() { Debug.Log(transform.GetSiblingIndex()); } } Transform.SetSiblingIndex 指定した順番に変更する…
カメラの Z-Depth を利用する Shader を記述していると一部オブジェクトで Z-Depthが取得できないことがあった 調べてみると Unlit Shader の場合は Z-Depth が取得できないようでした 理由も調査したのですが、詳しい理由はわかりませんでした・・・ 対応 …
TextMeshPro を利用していると FontMaterial が大量にできてしまったりして、管理が面倒になってくるので 外部からロードできれば楽になることがあるのではと思い実装の調査をしてみました TextMeshPro の Font Material Font Material の 差し替えを行うこ…
UnityCG.cginc 内に vert_img という頂点処理用のメソッドが用意されているので 頂点とuvしか利用しない場合こちらを利用したほうが手軽で行数も少なくなる struct appdata_img { float4 vertex : POSITION; half2 texcoord : TEXCOORD0; }; struct v2f_img …
Surface Shader でライトを無効にしたいことがあり、作成 左側がライトが有効なもので、左側がライトが無効なものです Shader "Custom/UnlitSurf" { Properties { _MainTex ("Albedo (RGB)", 2D) = "white" {} } SubShader { Tags { "RenderType"="Opaque" }…
ランタイムでカメラの写してる画像を保存しようとしてもタイミングを考慮しないと 正しく画像を撮影することができません そのため WaitForEndOffFrame でレンダリングの完了を待つ必要があります yield return new WaitForEndOffFrame(); コード レンダリン…
State を enum で分けて管理しているとき クラスが増えていった際に 追加処理が面倒だったので自動的に管理してくれるものを作成 using System; using System.Collections.Generic; using System.Linq; public class ClassManage<T, TEnum> where T : BaseClass where </t,>…
どうぶつの森のような曲がった世界を Unity で再現してみたかったのでやってみます あつまれ どうぶつの森 | Nintendo Switch | 任天堂 計算式 ある点から進むにつれて頂点の座標を下図グラフのように下げてやれば 同じようにできるはずなので、これをもとに…
using System.Collections.Generic; public static class ListUtil { /// <summary> /// Replace Index1 and index2 /// </summary> public static void Replace<T>(this IList<T> self, int index1, int index2) { if (self.Count <= index1 || self.Count <= index2) return; var ca</t></t>…
範囲や配置するアイテムサイズを指定して、重複しないようにもしくは完全ランダムで配置することが可能なコンポーネントです 重複不可時はどうしても配置できない場合は非表示にします using System.Collections.Generic; using UnityEngine; using Random =…